主权项 |
一种基于xen虚拟磁盘设备的前端缓存方法,其特征在于,包括以下步骤:1)用户空间程序通过系统调用产生一个磁盘读请求;2)虚拟机操作系统为所述请求分配DMA页并且调度所述请求;3)当所述请求被下发到前端驱动后,所述前端驱动将所述请求放到前端缓存上,然后通过事件通道通知后端驱动;运行在Dom0中的所述后端驱动接收到所述通知后,从所述前端缓存上取出所述请求并且提交给真实设备;4)以bio vector为单位查看缓存命中情况,若一个所述bio vector要求的磁盘数据全部命中缓存,则使用缓存中保留的要求的磁盘数据的内存页指针更新所述bio vector中的指针;其中bio为Block‑IO的缩写,每一个所述磁盘读请求由多个bio请求组成,每个所述bio请求是由多个所述bio vector组成,所述bio vector是磁盘I/O的最小单元;每个所述bio vector数据结构中包括一个所述DMA页的引用,并负责最多一个页面大小的磁盘读写;所述页面大小为4KB;5)命中和丢失的扇区均视为最近访问的扇区,需要加入缓存中;若缓存已满,则采用替换策略进行替换;6)对于所有所述bio vector都命中缓存的请求,由于步骤4)中已经将内存页指针更新成实际数据所在页的指针,相当于需要的数据已经全部取到内存中,就可以直接结束读请求,将数据返回给上层;7)当一个所述请求中有一些所述bio vector命中了缓存,而另外一些所述bio vector没有命中缓存,就对所述请求做缩减操作和分割操作;所述缩减操作是指将那些命中缓存的所述bio vector从所述请求中删除再递交给后端驱动;所述分割操作是指当后端驱动要求一个所述请求是连续的若干个扇区,如果命中的那些所述bio vector在所述请求所有bio vector的中部,就将所述请求分割成两个小请求;8)通过授权表机制将这些小请求的内存页共享给Dom0以便后续写入,并且产生相应的请求,放到前端缓存上;9)后端驱动在接到事件通道通知后,处理前端递交过来的请求,从物理磁盘中读取数据放进相应的内存页;完成后通知前端,请求结束;所述bio vector最多包括8个扇区的请求;缓存存储真实扇区的数据或者存放数据的内存地址;步骤5)中,所述替换策略为LRU算法;所述LRU算法具体如下:每个缓存中的扇区维持一个访问时间Tlast access,代表上一次访问到这个扇区的时间;当扇区命中缓存,以当前的时间戳来更新Tlast access;当缓存已满需要替换一个扇区时,遍历整个缓存找出最小Tlast access的那个替换。 |