qemu-kvm cache mode

qemu-kvm磁盘读写的缓冲(cache)模式一共有五种,分别是
writethrough, wirteback, none, unsafe, directsync
当你对VM读写磁盘的性能有不同的要求的时候,你可以在其启动的参数(cache=xxxx)
里面进行一个合理的选择.

现在来简单说一说这五种模式的各自的特点

 

cache=writethrough:
  该模式对应的标志位是O_DSYNC,仅当数据被提交到了存储设备里面的时候,写操作
  才会被完整的通告。此时host的页缓存可以被用在一种被称为writethrough缓存的模式。
  guest的虚拟存储设备被告知没有回写缓存(writeback cache),因此guest不需要为了
  操纵整块数据而发送刷新缓存的指令了。此时的存储功能如同有一个直写缓存(writethrough cache)一样

 

cache=none:
  所对应的标志位是O_DIRECT,在 none 模式下,VM的IO操作直接
  在qemu-kvm的userspace缓冲和存储设备之间进行,绕开了host的页缓冲。
  这个过程就相当于让vm直接访问了你的host的磁盘,从而性能得到了提升。

 

cache=writeback:
  对应的标志位既不是 O_DSYNC 也不是 O_DIRECT ,在writeback模式下,IO操作会经过
  host的页缓冲,存放在host页缓冲里的写操作会完整地通知给guest.
  除此之外,guest的虚拟存贮适配器会被告知有回写缓存(writeback cache),所以为了能够
  整体地管理数据,guest将会发送刷新缓存的指令.类似于带有RAM缓存的磁盘阵列(RAID)管理器.

 

cache=unsafe:
  该模式与writeback差不多,不过从guest发出的刷新缓存指令将会被忽视掉,这意味着使用者
  将会以牺牲数据的完整性来换取性能的提升。

 

cache=directsync:
  该模式所对应的标志位是O_DSYNC和O_DIRECT,仅当数据被提交到了存储设备的时候,写
  操作才会被完整地通告,并且可以放心地绕过host的页缓存。
  就像writethrough模式,有时候不发送刷新缓存的指令时很有用的.该模式是最新添加的一种cache模式,
  使得缓存与直接访问的结合成为了可能.

 

以上是网上都能百度到的

根据qemu-kvm的实际需求:

如果直接使用writeback,当cache占满的时候容易出现卡顿,而且在使用时cache的高速IO瞬间降为磁盘IO速度会造成IO延时的上升,使用者在使用时能明显感受到。所以不能直接使用writeback模式,因此我们需要限制writeback模式IO写入所占用的cache大小,通过dirty_bytes可以控制内核使用的内存缓冲区(脏页)。我们可以设置dirty_bytes = 4M,在io过程中能得到小幅度的提升并迅速回落,这样就减小io延时。

在测试过程中dirty_bytes=1M iops上升,dirty_bytes=2M iops有所下降,dirty_bytes=3M,dirty_bytes=4Miops逐步上升。

与none相比,虽然writeback可以提高iops的上限,但同时会影响到io请求响应时间await,使用writeback后await成几十倍上升,大约是10~20倍。

所以个人观点writeback是用io的请求响应时间来换取iops的提高。

 


原文:https://blog.csdn.net/ccc_bigdata/article/details/80361736 
*********************************************************************************************************

之前没有好好看完论坛里的精华贴,贸然的按照前期的做法来安装 
代码: 
kvm -m 1024 -hda ~/*.img 
,结果很慢,很绝望。 
后来加上了virtio设置后果然快多了,但觉得仍然没有Virtualbox快。 
后来不死心仍然翻看帖子,才知道原来也可以使用 
代码: 
kvm -m 1024 -drive file=~/*.img,cache=writeback 
这样来安装,现在 
代码: 
-hda 
已经仅为磁盘分区做准备了。 
今天为了实现在ubuntu和物理机上均能使用winxp,又外加一块硬盘,使用 
代码: 
kvm -m 1024 -hda /dev/sdb1 -boot c -cdrom ~/*.iso 
进行安装,乖乖,速度果然飞快,不会比Virtualbox慢吧,看来之前大家的评价果然属实 
现在请教一个问题,在相同的硬件配制下, 
代码: 
kvm -m 1024 -drive file=~/*.img,if=virtio,boot=on 
和 
代码: 
kvm -m 1024 -drive file=~/*.img,cache=writeback -boot c 
这两条命令哪条执行效率更快? 
如果writeback效率更高,已经按照virtio驱动装好的img文件是不是无法再更改为writeback的硬盘文件了? 
在此请教大家了。 


在我的机器上经测试,安装系统时会出现互斥现象。单纯对比的话,cache比virtio模式快的多。 
在安装win2003和winxp时,同时采用 
代码: 
kvm -dirve file=~/*.img,cache=writeback,if=virtio,boot=on 
这两个参数时,系统基本上无法安装成功,会出现极大蓝屏机率,基本上无法成功。 
使用 
代码: 
kvm -drive file=~/*.img,cache=writeback 
比使用 
代码: 
kvm -drive file=~/*.img,if=virtio,boot=on 

参数快得多。 
使用virtio模式安装操作系统很慢,仅比任何参数都不加稍快些。使用单cache模式安装完后,再加上virtio参数会出现蓝屏。鱼和熊掌兼得的方式比较麻烦,如下: 
先使用此命令安装系统: 
代码: 
kvm -drive file=~/*.img,cache=writeback 

首次进入系统,删除自带的磁盘驱动,提示需重启,不要理会;手工添加新硬件,选择scsi驱动,选择virtio的驱动,手工添加virtio硬盘驱动,提示重启,不要理会。 
选择关闭系统。 
转入命令窗口,更改为如下再次启动: 
代码: 
kvm -dirve file=~/*.img,cache=writeback,if=virtio,boot=on 

请注意,经测试cache参数必须加在virtio前,否则此参数不生效。 
好了,享受如飞一般的感觉吧。 


今天尝试了一下,多次安装后,同时google,找到一个同时virtio和writeback的方法。 
在安装时使用 
kvm -drive file=./XXX.img,cache=writeback,if=virtio,boot=on -cdrom ~/xp.iso -boot d -m 1024 -fda ~/virtio-win-1.1.11-0.vfd 
启动安装后,按“F6”进入scsi的驱动安装,将virtio驱动安装上。 
在http://www.linux-kvm.org/page/WindowsGuestDrivers/viostor/installation有图文说明 




代码: 
qemu -name "win2k3" \ 
-boot menu=on \ 
-monitor stdio \ 
-rtc base=localtime \ 
-enable-kvm \ 
-smp 1 \ 
-m 1G \ 
-ctrl-grab \ 
-balloon virtio \ 
-net nic,model=virtio,macaddr=52:53:00:00:08:01 -net vde,sock=/var/run/tap0_vde_switch \ 
-usb \ 
-drive media=disk,if=virtio,cache=writeback,file=/vm/fb/hd/win2k3.img,format=raw 

Debian 主机,挺好的,没什么问题。seabios 升到了 0.6.0 。

转载:https://yingbin920.iteye.com/blog/1544646

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值