我一直在使用量子计算单元系统来构建软件。我遇到的问题是,该系统似乎受到极其磁盘访问速度慢。这不一定是个问题,因为它实际上并不是一个耗时的操作,但我希望它能尽可能快地运行。
以下是我为加快 I/O 速度所做的一切:
KVM 已启用。就模拟处理器速度而言,这简直是天壤之别。
Qemu 通过转发的 SSH 端口以模式运行
-display none
,因此不会有模拟的 SDL 显示占用 CPU 周期。安装虚拟硬盘是为了
-o noatime,nodiratime
减少不必要的写入。硬盘映像(分别为 8 GB 和 12 GB)采用 qcow2 格式,并使用
-o cluster_size=2M
(这是最大值 - 默认值为 65,536 字节)创建。手册页:“较小的簇尺寸可以改善图像文件的大小,而集群规模越大通常能够提供更好的性能“”。文件系统为 EXT4,带有
-o extents
选项,手册页声称“是一种更有效的编码,加快文件系统访问速度,尤其是大文件“”。虚拟磁盘映像中没有存储任何快照。我不确定这是否会减慢它们的速度,但似乎会;实际文件映像大小没有生长当记录快照时,我的猜测是数据以某种复杂的方式存储,使得快照和“工作”驱动器将共享一个群集,直到它被更改,然后整个 2 MB 群集被复制到新空间,然后数据被更改。巧妙但效率低下。
我的问题是,我是否遗漏了什么来提高硬盘效率,或者过去人们做了什么来达到接近原生的 I/O 速度。
以下是我观察到的其他几件事:
当我在虚拟主机中安装硬盘时,
-o sync
系统变慢一路走低。这对我来说似乎是违反直觉的,因为写入虚拟硬盘(只是我实际硬盘上的一个文件)是已经在写入之前缓冲在 RAM 中。这本质上是对磁盘的双重缓冲,使用两倍于其必须使用的 RAM。显著的加速是尤其很奇怪,因为这样做从来grep ^Dirty /proc/meminfo
没有说任何超过 1 MB 的事情。除非我将“swappiness”( ) 设置为 90 或更高,否则虚拟机似乎拒绝使用其交换
/proc/sys/vm/swappiness
。虽然我同意这对磁盘 I/O 来说可能是一件好事,但它使构建过程与 fs 缓冲“争夺” RAM 的使用。是的,我确信它有足够的 RAM。
答案1
以下是一些性能技巧,您一定要尝试使用原始格式而不是 qcow2,使用原始设备而不是映像文件。您还应该在客户机上安装半虚拟化磁盘驱动程序,并将磁盘类型从 IDE 切换到 virtio。