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

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

我一直在使用量子计算单元系统来构建软件。我遇到的问题是,该系统似乎受到极其磁盘访问速度慢。这不一定是个问题,因为它实际上并不是一个耗时的操作,但我希望它能尽可能快地运行。

以下是我为加快 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。

相关内容