我一直在使用QEMU系统来构建软件。我已经遇到的问题是,该系统似乎从遭受极其缓慢的磁盘访问。这不一定是一个问题,因为它并不是真正耗时的操作,但我希望它尽可能快地工作。
以下是我为加速 I/O 所做的一切:
KVM 已启用。就仿真处理器速度而言,这就是白天和黑夜之间的区别。
Qemu-display none
通过转发的 SSH 端口以模式运行,因此没有模拟 SDL 显示占用 CPU 周期。
安装虚拟硬盘-o noatime,nodiratime
以减少不必要的写入。
硬盘映像(分别为 8 和 12 个演出)采用 qcow2 格式,并使用-o cluster_size=2M
(这是最大值 - 默认为 65,536 字节)创建。引用手册页:“较小的簇大小可以提高图像文件的大小,而较大的簇大小通常提供更好的性能。”
文件系统是带有-o extents
选项的EXT4,手册页声称“这是一种更有效的编码,可以加快文件系统访问速度,尤其是对于大文件。”
虚拟磁盘映像中没有存储任何快照。我不确定这是否会减慢他们的速度,但似乎会;记录快照时实际文件图像大小不会增加,所以我的猜测是数据以某种复杂的方式存储,因此快照和“工作”驱动器将共享一个集群,直到它被更改,然后整个 2 MB 集群被复制到新空间,然后数据被更改。巧妙但完全低效。
我的问题是我是否缺少提高硬盘效率的任何东西,或者过去人们为了实现接近本机的 I/O 速度而工作的方法。
以下是我观察到的其他一些事情:
当我在虚拟主机上挂载硬盘时-o sync
,系统速度变慢了。这对我来说似乎违反直觉,因为写入虚拟硬盘驱动器(它只是我实际硬盘驱动器上的一个文件)在写入之前已经缓冲在 RAM 中。这本质上是对磁盘的双缓冲,使用两倍的 RAM。戏剧性的加速特别奇怪,因为执行 agrep ^Dirty /proc/meminfo
从来没有超过 1 MB …