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

我一直在使用QEMU系统来构build软件。 我遇到的问题是,系统似乎受到非常慢的磁盘访问的影响。 这不一定是一个问题,因为这不是一个真正的时间密集型操作,但我希望尽可能快地工作。

以下是我尝试加速I / O所做的一切:

  • KVM已启用。 就仿真的处理器速度而言,这是夜晚和白天之间的差异。

  • Qemu通过转发的SSH端口以-display none模式运行,因此没有模拟的SDL显示屏正在吃掉CPU周期。

  • 虚拟硬盘驱动器使用-o noatime,nodiratime安装-o noatime,nodiratime以减less不必要的写入。

  • 硬盘映像(分别为8和12演示)采用qcow2格式,使用-o cluster_size=2M创build(这是最大默认值是65,536字节)。 请在手册页中说 :“较小的簇大小可以改善映像文件的大小,而较大的簇大小通常可以提供更好的性能 。”

  • 文件系统是带有-o extents选项的EXT4, 手册页声称“这是一种更加高效的编码,可加快文件系统的访问速度,特别是对于大文件 。”

  • 虚拟磁盘映像中没有存储任何快照。 我不确定这是否会减慢他们的速度,但似乎是这样; 在logging快照时,实际的文件图像大小不会增长 ,所以我猜测数据是以一种复杂的方式存储的,这样快照和“工作”驱动器将共享一个群集,直到它被更改,然后整个2MB的簇被复制到新的空间,然后数据被改变。 巧妙但是完全没有效率

我的问题是,是否有什么我失踪,以提高硬盘的效率,或过去的工作,以实现接近原生的I / O速度。


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

  • 当我使用-o sync安装虚拟主机的硬盘驱动器时,系统变慢。 这对我来说似乎是反直觉的,因为写入到虚拟硬盘驱动器,这是我的实际硬盘驱动器上的一个文件, 写入之前已经caching在RAM中。 这基本上是对磁盘的双倍缓冲,使用两倍于RAM的RAM。 戏剧性的加速是非常奇怪的,因为做一个grep ^Dirty /proc/meminfo从来没有说超过1 MB的东西。

  • 除非将“swappiness”( /proc/sys/vm/swappiness )设置为90或更高,否则虚拟机似乎拒绝使用其交换。 虽然我同意这在磁盘I / O方面可能是一件好事,但它使得构build过程与使用RAM的fs缓冲“战斗”。 是的,我确定它有足够的RAM。

一些性能技巧在这里 ,你一定要尝试使用原始格式,而不是qcow2和原始设备,而不是图像文件。 您还应该在guest虚拟机上安装半虚拟化磁盘驱动程序,并将IDE的磁盘types切换为virtio。