CN103207763B - 基于xen虚拟磁盘设备的前端缓存方法 - Google Patents
基于xen虚拟磁盘设备的前端缓存方法 Download PDFInfo
- Publication number
- CN103207763B CN103207763B CN201310150963.5A CN201310150963A CN103207763B CN 103207763 B CN103207763 B CN 103207763B CN 201310150963 A CN201310150963 A CN 201310150963A CN 103207763 B CN103207763 B CN 103207763B
- Authority
- CN
- China
- Prior art keywords
- request
- buffer memory
- biovector
- sector
- page
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本发明公开了一种基于xen虚拟磁盘设备的前端缓存方法,该方法采用缓存最近对虚拟磁盘扇区访问的结果,进而提供一种接下去访问的扇区在缓存中就能找到的可能性。由于缓存设置在前端驱动中,使得虚拟磁盘读有可能直接在前端驱动中返回而不涉及到后端驱动。本发明完全保留现有xen前后端驱动优点,同时对虚拟机前端驱动做了少量修改,在代码路径添加了查询缓存的功能,只引入较少的额外开销。此外,由于因为在实际应用中缓存的命中率较高,该方法能明显提高xen虚拟磁盘设备的性能。
Description
技术领域
本发明属于计算机系统虚拟化I/O虚拟化领域,具体地,涉及一种基于xen虚拟磁盘设备的前端缓存方法,用于改善xen虚拟化技术中半虚拟化设备的性能。
背景技术
虚拟机监控器(VirtualMachineMonitor,VMM)是指在硬件与传统操作系统之间提供一个软件管理层,来抽象底层的硬件,向上层提供虚拟硬件接口,从而能够使多个操作系统同时在该虚拟硬件上运行。虚拟机管理主要负责对硬件资源的管理,主要资源包括处理器、内存和I/O。虚拟机监控器与运行其上的虚拟机或者说虚拟机操作系统之间的关系就如同传统操作系统和进程之间的关系。
基于虚拟机监控器的系统虚拟化技术是当今云计算,数据中心底层构建的基础。系统虚拟化技术提供执行的高效性、资源管理的隔离性,有助于企业将原本运行于多台物理服务器上的服务整合到一台物理服务器上,从而充分利用硬件资源,有效减少企业在IT基础架构上的开销。此外,通过在虚拟机管理上运行虚拟操作系统,有助于遗留软件系统的移植。系统虚拟化技术提供的隔离性能够保证一个虚拟机的执行不影响其他虚拟机的运行。这其中包括安全隔离性和性能隔离性。安全隔离性指某个虚拟机运行出错或者崩溃不会影响到在同一个宿主机上其他虚拟机的正常运行。而所谓性能隔离性是指某个虚拟机对系统资源的消耗不会影响系统初始配置给其他虚拟机的资源。
由于在硬件和虚拟操作系统之间引入了虚拟机监控器中间层,系统的性能势必受到一些影响。由于硬件虚拟化技术的产生,CPU虚拟化开销已经变得很小了,并且提升的潜力不大。但是虚拟I/O设备,尤其是虚拟磁盘设备,依然是系统的主要性能瓶颈之一。当今研究表明,磁盘I/O的性能瓶颈已经从之前的I/O设备变成了I/O路径。为了减少在I/O路径上的开销,本发明提出了一种装备在xen的前端驱动中的缓存,来尽可能地缩短I/O路径的长度。
发明内容
有鉴于现有技术的上述缺陷,本发明所要解决的技术问题是提供一种基于xen虚拟磁盘设备的前端缓存方法,以尽可能地缩短I/O路径的长度。
为实现上述目的,本发明提供了一种基于xen虚拟磁盘设备的前端缓存方法,包括以下步骤:
1)用户空间程序通过系统调用产生一个磁盘读请求;
2)虚拟机操作系统为这个请求分配DMA页并且调度请求;
3)以biovector为单位查看缓存命中情况,若一个biovector要求的磁盘数据全部命中缓存,则使用缓存中保留的要求的磁盘数据的内存页指针更新biovector中的指针;
4)命中和丢失的扇区均视为最近访问的扇区,需要加入缓存中;若缓存已满,则采用替换策略进行替换;
5)对于所有biovector都命中缓存的请求,由于步骤3)中已经将内存页指针更新成实际数据所在页的指针,相当于需要的数据已经全部取到内存中,就可以直接结束读请求,将数据返回给上层;
6)如果不是所有biovector都命中缓存,则按照要求扇区连续的原则,将原请求分割成若干个小请求;
7)通过授权表机制将这些小请求的内存页共享给Dom0以便后续写入,并且产生相应的ringrequest,放到ringbuffer上;
8)后端驱动在接到事件通道通知后,处理前端递交过来的请求,从物理磁盘中读取数据放进相应的内存页;完成后通知前端,请求结束。
根据上述的基于xen虚拟磁盘设备的前端缓存方法,其中,biovector最多包括8个扇区的请求。
根据上述的基于xen虚拟磁盘设备的前端缓存方法,其中,缓存存储真实扇区的数据或者存放数据的内存地址。
根据上述的基于xen虚拟磁盘设备的前端缓存方法,其中,步骤4)中,所述替换策略为LRU算法。
进一步地,根据上述的基于xen虚拟磁盘设备的前端缓存方法,其中,所述LRU算法具体如下:每个缓存中的扇区维持一个访问时间Tlastaccess,代表上一次访问到这个扇区的时间;当扇区命中缓存,以当前的时间戳来更新Tlastaccess;当缓存已满需要踢出一个扇区时,遍历整个缓存找出最小Tlastaccess的那个踢出。
因此,本发明的基于xen虚拟磁盘设备的前端缓存方法相较于现有技术具有以下有益的技术效果:
(1)采用缓存最近对虚拟磁盘扇区访问的结果,进而提供一种接下去访问的扇区在缓存中就能找到的可能性;
(2)由于缓存设置在前端驱动中,本发明使得虚拟磁盘读取有可能直接在前端驱动中返回而不涉及到后端驱动;
(3)本发明虽然在Xen平台上实现,并且目标的是虚拟磁盘设备,但该方法不局限于平台和I/O设备,可以用于其他半虚拟化I/O驱动;
(4)本发明对虚拟机前端驱动做了少量修改,在代码路径添加了查询缓存的功能,只引入较少的额外开销;
(5)此外,本发明还能完全保留现有xen前后端驱动优点,因为在实际应用中缓存的命中率较高,本发明能明显提高xen虚拟磁盘设备的性能。
附图说明
图1是现有的前后端虚拟磁盘一次读过程;
图2是使用本发明的基于xen虚拟磁盘设备的前端缓存方法后前后端虚拟磁盘一次读过程;
图3是缓存命中后对原请求的处理。
具体实施方式
以下将结合附图对本发明的构思、具体结构及产生的技术效果作进一步说明,以充分地了解本发明的目的、特征和效果。
与传统的基于陷入模拟敏感I/O指令的设备模拟方法相比,xen的半虚拟化设备驱动(前后端驱动)性能得到了明显提升,这是由于它的上下文切换次数更少并且使用了共享内存这种快捷的数据转移方法。然而,虚拟机监控器(hypervisor或VMM)依然参与了整个I/O过程。等待后端驱动的响应以及事件通道机制均引入严重的开销。
整个虚拟磁盘I/O过程大致如下:首先用户空间程序通过系统调用产生一个磁盘读写请求;之后虚拟机操作系统为这个请求分配DMA页并且调度请求;当请求被下发到前端驱动后,前端驱动将这个请求做特定的包装后放到ringbuffer上,之后通过事件通道通知后端。运行在Dom0中的后端驱动接收到通知后,会从ringbuffer上取出这个请求并且提交给真实设备。
本发明提出了在前端设置缓存来缓存最近访问过的那些虚拟磁盘扇区数据。由于数据访问的地址空间和时间连续性,这些缓存中的数据有可能最近还会被访问到,这就被称为缓存命中。当缓存命中时,前端驱动就可以直接把请求的数据返回给上层,避免使用事件通道机制和Dom0的参与。
前端驱动和后端驱动均工作在Linux的block-IO驱动之上。每一个磁盘读写请求由多个bio请求组成。每个bio请求又是由多个biovector组成,这个biovector是磁盘I/O的最小单元。每个biovector数据结构中包括一个DMA内存页的引用,并负责最多一个页面大小(4KB)的磁盘读写。通常情况中,磁盘读写的单元为扇区,它的大小是512byte,比一个内存页要小。biovector数据结构有相应的成员来指明DMA页内的偏移和大小,这样就可以满足小于1个内存页的请求。为了和后端驱动配合,被递交给后端的一个请求必须是由连续若干个扇区组成。
biovector最多可以包括8个扇区的请求。如果一个biovector中的所有扇区都命中了缓存,才可以认为一个biovector命中了缓存。当一个biovector命中缓存,就可以被完全的丢弃掉而不需要被递交给后端驱动。这时只需要将biovector中使用的DMA页里的内容置换成缓存中存储的相应数据内容即可。如果一个请求中的所有biovector都命中缓存,那么这个请求就可以立刻返回。否则,就需要将缓存中没有的那些biovector递交给后端驱动,走原始的路径。这里可能的发生的是,一个请求中有一些biovector命中了缓存,另外一些没有命中。这样就需要对原始请求做缩减和分割处理。缩减指的是可以将那些命中缓存的biovector从这个请求中删除掉再递交给后端;分割操作有由后端要求一个请求是连续的若干个扇区而决定的,如果命中的那些biovector在该请求所有biovector的中部,就需要将这个请求分割成两个小请求,以满足连续性。
缓存中存储的可以是扇区中真实的数据,但是这样的话在缓存命中时或者将新的扇区加入缓存时都需要一次额外的数据拷贝,即在相应DMA内存页和缓存之间的数据拷贝。本发明采用了另一种方法,缓存内存地址。具体来说,缓存的是一个扇区数据在内存中地址,包括页帧的引用以及页内的偏移。这样,缓存的大小可以被控制得很小,并且不需要额外的数据拷贝。当一次请求中的扇区命中缓存后,只需要将biovector数据结构中的DMA页引用和页内偏移设置成缓存中的相应地址,就可以返回了。这一方法需要修改代码流程以配合,被取到DMA中的内存不能在结束一次请求之后全部释放,只能释放那些未被加入缓存中的扇区所在的内存。而加入缓存中的扇区所在的内存不能这时释放,即需要提供给后续可能的缓存命中的请求使用。释放这些内存的时机被拖后,直到这个内存存储的扇区从缓存中被替换出去,才可以释放内存。
本发明使用最近最少使用策略(least-recently-used,LRU)作为缓存的替换策略。LRU基于以下事实:刚被访问过的扇区很可能在不久的将来被再次访问到。当需要替换时,LRU总是替换那个最近最少被使用到的缓存单元。具体的实施方法如下:为每个缓存中的扇区维持一个访问时间Tlastaccess,代表上一次访问到这个扇区的时间。当扇区命中缓存,以当前的时间戳(rdtsc命令)来更新Tlastaccess。当缓存已满需要踢出一个扇区时,遍历整个缓存找出最小Tlastaccess的那个踢出。
图1是现有技术中前后端虚拟磁盘一次读过程。当一个对虚拟磁盘的读请求产生后,由上层为这次读请求分配存储读结果的DMA内存页,之后将请求递交给xen的前端块设备驱动。前端块设备驱动通过xen的授权表机制,将这些DMA内存页共享给后端驱动所在的Dom0,之后对上层请求做处理,使之转化成符合xen前后端通信规则的ringrequest结构,之后将ringrequest放到共享内存ringbuffer上。这些都完成之后,通过事件通道机制通知后端块设备驱动有新的请求。后端块设备从ringbuffer上取下这个请求,解析之后进行真正的磁盘读操作。这些操作完成后,通过一个中断告知前端读完成,整个请求结束。
图2是使用本发明的基于xen虚拟磁盘设备的前端缓存方法后一次读过程。具体步骤如下:
1)用户空间程序通过系统调用产生一个磁盘读请求;
2)虚拟机操作系统为这个请求分配DMA页并且调度请求;
3)以biovector为单位查看缓存命中情况,若一个biovector要求的磁盘数据全部命中缓存,则使用缓存中保留的要求的磁盘数据的内存页指针更新biovector中的指针;
4)命中和丢失的扇区均视为最近访问的扇区,需要加入缓存中;若缓存已满,则采用替换策略进行替换;
5)对于所有biovector都命中缓存的请求,由于步骤3)中已经将内存页指针更新成实际数据所在页的指针,相当于需要的数据已经全部取到内存中,就可以直接结束读请求,将数据返回给上层;
6)如果不是所有biovector都命中缓存,则按照要求扇区连续的原则,将原请求分割成若干个小请求;
7)通过授权表机制将这些小请求的内存页共享给Dom0以便后续写入,并且产生相应的ringrequest,放到ringbuffer上;
8)后端驱动在接到事件通道通知后,处理前端递交过来的请求,从物理磁盘中读取数据放进相应的内存页;完成后通知前端,请求结束。
由上可见,新过程同原过程不同体现在前半部分。当前端驱动接受到上层递交的请求后,首先对请求的扇区是否命中缓存做判断。如果全部biovector命中,那么请求可以直接返回;否则,对原请求做压缩分割处理:将命中的部分剔除掉,留下未命中的部分。之后的流程和原过程类似。
图3是缓存命中后对原请求的处理。当一个biovector的所有扇区在缓存中发现,说明这个biovector命中缓存。那么之前为这个biovector分配的DMA内存页(准备将读磁盘的数据写入)可以被丢弃,修改biovector结构中的页指针指向缓存中提供的页。这样,这个biovector指向的页里面就有之前已经取好的数据了,可以直接返回。
Xen是一个开源的虚拟机监控器,xen虚拟机运行的操作系统代码如今已经被集成在linux中。本发明主要修改的内容为xen的前端块设备驱动代码,在linux内核目录下具体路径为driver/block/xen-blkfront.c。为了在原本的代码路径中增加本发明提到的缓存功能,对此文件的主要修改如下:
1.在blkif_queue_request()函数中生成ringrequest之前以下代码。该代码的主要功能是:对构成一个request的所有biovector进行遍历,判断每个biovector是否命中缓存,如果命中,将页指针更新(更新sg->page_link)。在遍历的同时,如果有需要分割出新的ringrequest(当中间有命中的biovector时),开始构造一个新的ringrequest。主要代码为清零每个ringrequest的biovector数量的nr_segments。这样一次遍历就可以完成对原request的缩减和分割功能。
2.在blkif_queue_request()末尾添加判断代码。如果req所有的biovector均命中缓存,那么req可以直接返回,通过调用blk_end_request_all函数。
以上详细描述了本发明的较佳具体实施例。应当理解,本领域的普通技术无需创造性劳动就可以根据本发明的构思作出诸多修改和变化。因此,凡本技术领域中技术人员依本发明的构思在现有技术的基础上通过逻辑分析、推理或者有限的实验可以得到的技术方案,皆应在由权利要求书所确定的保护范围内。
Claims (1)
1.一种基于xen虚拟磁盘设备的前端缓存方法,其特征在于,包括以下步骤:
1)用户空间程序通过系统调用产生一个磁盘读请求;
2)虚拟机操作系统为所述请求分配DMA页并且调度所述请求;
3)当所述请求被下发到前端驱动后,所述前端驱动将所述请求放到前端缓存上,然后通过事件通道通知后端驱动;运行在Dom0中的所述后端驱动接收到所述通知后,从所述前端缓存上取出所述请求并且提交给真实设备;
4)以biovector为单位查看缓存命中情况,若一个所述biovector要求的磁盘数据全部命中缓存,则使用缓存中保留的要求的磁盘数据的内存页指针更新所述biovector中的指针;其中bio为Block-IO的缩写,每一个所述磁盘读请求由多个bio请求组成,每个所述bio请求是由多个所述biovector组成,所述biovector是磁盘I/O的最小单元;每个所述biovector数据结构中包括一个所述DMA页的引用,并负责最多一个页面大小的磁盘读写;所述页面大小为4KB;
5)命中和丢失的扇区均视为最近访问的扇区,需要加入缓存中;若缓存已满,则采用替换策略进行替换;
6)对于所有所述biovector都命中缓存的请求,由于步骤4)中已经将内存页指针更新成实际数据所在页的指针,相当于需要的数据已经全部取到内存中,就可以直接结束读请求,将数据返回给上层;
7)当一个所述请求中有一些所述biovector命中了缓存,而另外一些所述biovector没有命中缓存,就对所述请求做缩减操作和分割操作;所述缩减操作是指将那些命中缓存的所述biovector从所述请求中删除再递交给后端驱动;
所述分割操作是指当后端驱动要求一个所述请求是连续的若干个扇区,如果命中的那些所述biovector在所述请求所有biovector的中部,就将所述请求分割成两个小请求;
8)通过授权表机制将这些小请求的内存页共享给Dom0以便后续写入,并且产生相应的请求,放到前端缓存上;
9)后端驱动在接到事件通道通知后,处理前端递交过来的请求,从物理磁盘中读取数据放进相应的内存页;完成后通知前端,请求结束;
所述biovector最多包括8个扇区的请求;
缓存存储真实扇区的数据或者存放数据的内存地址;
步骤5)中,所述替换策略为LRU算法;
所述LRU算法具体如下:每个缓存中的扇区维持一个访问时间Tlastaccess,代表上一次访问到这个扇区的时间;当扇区命中缓存,以当前的时间戳来更新Tlastaccess;当缓存已满需要替换一个扇区时,遍历整个缓存找出最小Tlastaccess的那个替换。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310150963.5A CN103207763B (zh) | 2013-04-26 | 2013-04-26 | 基于xen虚拟磁盘设备的前端缓存方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310150963.5A CN103207763B (zh) | 2013-04-26 | 2013-04-26 | 基于xen虚拟磁盘设备的前端缓存方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103207763A CN103207763A (zh) | 2013-07-17 |
CN103207763B true CN103207763B (zh) | 2015-11-25 |
Family
ID=48755001
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310150963.5A Active CN103207763B (zh) | 2013-04-26 | 2013-04-26 | 基于xen虚拟磁盘设备的前端缓存方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103207763B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107301021B (zh) * | 2017-06-22 | 2021-03-09 | 苏州浪潮智能科技有限公司 | 一种利用ssd缓存对lun进行加速的方法和装置 |
CN111198750A (zh) * | 2020-01-06 | 2020-05-26 | 紫光云技术有限公司 | 一种提高虚拟磁盘读写性能的方法 |
CN115396478B (zh) * | 2022-10-31 | 2023-03-07 | 长城汽车股份有限公司 | 用户域与设备的通信方法、装置以及汽车 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101661381A (zh) * | 2009-09-08 | 2010-03-03 | 华南理工大学 | 一种基于Xen的数据共享与访问控制方法 |
CN102129531A (zh) * | 2011-03-22 | 2011-07-20 | 北京工业大学 | 一种基于Xen的主动防御方法 |
CN102279769A (zh) * | 2011-07-08 | 2011-12-14 | 西安交通大学 | 一种面向嵌入式Hypervisor 的中断虚拟化操作方法 |
CN102289620A (zh) * | 2011-08-12 | 2011-12-21 | 华南理工大学 | 一种基于Xen安全计算机可信设备虚拟化系统及方法 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8254261B2 (en) * | 2009-10-16 | 2012-08-28 | Oracle America, Inc. | Method and system for intra-host communication |
US8893274B2 (en) * | 2011-08-03 | 2014-11-18 | Trend Micro, Inc. | Cross-VM network filtering |
-
2013
- 2013-04-26 CN CN201310150963.5A patent/CN103207763B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101661381A (zh) * | 2009-09-08 | 2010-03-03 | 华南理工大学 | 一种基于Xen的数据共享与访问控制方法 |
CN102129531A (zh) * | 2011-03-22 | 2011-07-20 | 北京工业大学 | 一种基于Xen的主动防御方法 |
CN102279769A (zh) * | 2011-07-08 | 2011-12-14 | 西安交通大学 | 一种面向嵌入式Hypervisor 的中断虚拟化操作方法 |
CN102289620A (zh) * | 2011-08-12 | 2011-12-21 | 华南理工大学 | 一种基于Xen安全计算机可信设备虚拟化系统及方法 |
Non-Patent Citations (2)
Title |
---|
基于文件的Xen虚拟磁盘研究;汤泉;《中国优秀硕士学位论文全文数据库》;20091215;第2009年卷(第12期);第12-16页,第22-23页,第35-36页,第39页,图2-1,图2-2,图3-1 * |
面向虚拟机的远程磁盘缓存;陈昊罡 等;《计算机科学与探索》;20101215;第4卷(第12期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN103207763A (zh) | 2013-07-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8874877B2 (en) | Method and apparatus for preparing a cache replacement catalog | |
CN110597451B (zh) | 一种虚拟化缓存的实现方法及物理机 | |
US9971513B2 (en) | System and method for implementing SSD-based I/O caches | |
CN109344090B (zh) | 数据中心中kvm虚拟机的虚拟硬盘系统及数据中心 | |
US8904113B2 (en) | Virtual machine exclusive caching | |
US8943259B2 (en) | Relieving memory pressure in a host using database memory management | |
US10318325B2 (en) | Host-side cache migration | |
US8645611B2 (en) | Hot-swapping active memory for virtual machines with directed I/O | |
US10223026B2 (en) | Consistent and efficient mirroring of nonvolatile memory state in virtualized environments where dirty bit of page table entries in non-volatile memory are not cleared until pages in non-volatile memory are remotely mirrored | |
JP2020161103A (ja) | ストレージシステム及びデータ転送方法 | |
US20150095576A1 (en) | Consistent and efficient mirroring of nonvolatile memory state in virtualized environments | |
Shi et al. | Memory/disk operation aware lightweight vm live migration across data-centers with low performance impact | |
US9875184B2 (en) | Multi-level snapshot caching | |
CN103207763B (zh) | 基于xen虚拟磁盘设备的前端缓存方法 | |
US11315028B2 (en) | Method and apparatus for increasing the accuracy of predicting future IO operations on a storage system | |
Kim et al. | Flash-Conscious Cache Population for Enterprise Database Workloads. | |
Shi et al. | Memory/disk operation aware lightweight VM live migration | |
US20130346975A1 (en) | Memory management method, information processing device, and computer-readable recording medium having stored therein memory management program | |
Kim et al. | HyperCache: A hypervisor-level virtualized I/O cache on KVM/QEMU | |
Lee et al. | VM-aware flush mechanism for mitigating inter-VM I/O interference | |
AT&T | ||
Tang et al. | Speeding up virtualized transaction logging with vTrans | |
EP3053040B1 (en) | Consistent and efficient mirroring of nonvolatile memory state in virtualized environments | |
Yoon et al. | Harmonized memory system for object-based cloud storage | |
Kim et al. | I/O access frequency-aware cache method on KVM/QEMU |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |