虚拟机 – 最大化虚拟文件系统的吞吐量

我一直在使用QEMU系统来构建软件.我遇到的问题是系统似乎遭受极慢的磁盘访问.这不一定是一个问题,因为它不是一个耗时的操作,但我希望它尽可能快地运行.

以下是我尝试加速I / O所做的全部工作:

> KVM已启用.就模拟处理器速度而言,这是夜晚和白天之间的差异.
> Qemu通过转发的SSH端口以-display none模式运行,因此没有模拟的SDL显示占用CPU周期.
>虚拟硬盘安装了-o noatime,nodiratime以减少不必要的写入.
>硬盘映像(分别为8和12演出)采用qcow2格式,并使用-o cluster_size = 2M创建(这是最大默认值为65,536字节).在man page:“较小的簇大小可以改善图像文件大小,而较大的簇大小通常可以提供更好的性能.”
>文件系统是带有-o extents选项的EXT4,man page声称“这是一种更有效的编码,可加快文件系统访问速度,特别是对于大文件.”
>虚拟磁盘映像中没有存储任何快照.我不确定这是否会减慢他们的速度,但似乎会这样;记录快照时实际的文件图像大小不会增长,所以我的猜测是数据以某种复杂的方式存储,使得快照和“工作”驱动器共享一个簇直到它被更改,然后将整个2 MB集群复制到新空间,然后更改数据.巧妙但完全低效.

我的问题是,为了实现接近原生的I / O速度,是否有任何我缺少的东西可以提高硬盘效率,或者过去为人们所做的工作.

以下是我观察到的其他一些事情:

>当我使用-o sync将虚拟主机挂载到虚拟主机中时,系统会慢下来.这对我来说似乎是违反直觉的,因为写入虚拟硬盘驱动器只是我实际硬盘驱动器上的一个文件,在写入之前已经缓存在RAM中.这基本上是对磁盘的双重缓冲,使用的内存是原来的两倍.戏剧性的加速特别奇怪,因为做一个grep ^ Dirty / proc / meminfo永远不会说超过1 MB的任何东西.
>除非我将“swappiness”(/ proc / sys / vm / swappiness)设置为90或更高,否则虚拟机似乎拒绝使用其交换.虽然我同意这在磁盘I / O方面可能是一件好事,但是它使构建过程与fs缓冲使用RAM“斗争”.是的,我确定它有足够的RAM.

最佳答案
Some performance tips are here,你绝对应该尝试使用原始格式而不是qcow2和原始设备而不是图像文件.您还应该在guest虚拟机上安装半虚拟化磁盘驱动程序,并将磁盘类型从IDE切换到virtio.

转载注明原文:虚拟机 – 最大化虚拟文件系统的吞吐量 - 代码日志