KVM 客户机中令人难以置信的缓慢磁盘读取性能

KVM 客户机中令人难以置信的缓慢磁盘读取性能

我正在运行 Ubuntu Server 22.04.3,其中包含所有最新更新。我安装了 KVM 和具有相同 Ubuntu Server 版本的客户机。我的问题是客户机读取文件的速度非常慢。如果我运行cat .bashrc,大约需要十二秒将文件读入控制台。第二次运行命令时,它立即就完成了。我注意到到处都有这种减速现象。通过 SSH 登录需要 25 秒。在 vim 中打开文件需要 25 秒。ls -la有时甚至会在中途暂停。

这种情况只发生在读取时,写入时不会发生,不过我猜可能是缓存了写入。我使用相同方法安装了另一台干净的虚拟机,它也有同样的问题。

有人能猜出这是怎么回事吗?我不知道该如何进一步排除故障。

诊断

快速写入

写入性能很棒。输出结果dd if=/dev/zero of=test.file bs=64M count=1 oflag=dsync各不相同,但大致如下:

1+0 records in
1+0 records out
67108864 bytes (67 MB, 64 MiB) copied, 0.162529 s, 413 MB/s

作为参考,主机记录的速度约为 600 MB/s。

虚拟机磁盘配置

部分disk输出virsh edit vm-guest-name如下所示:

    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2' discard='unmap'/>
      <source file='/var/lib/libvirt/images/one-1.qcow2'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/>
    </disk>

我尝试禁用缓存<driver>,但没有帮助。

VM 创建 (2023-10-04)

我使用以下命令创建虚拟机:

sudo virt-install --name=two --os-variant=ubuntu22.04 --vcpu=2 --ram=2048 --disk size=10 --location=/var/lib/libvirt/boot/ubuntu-22.04.3-live-server-amd64.iso,kernel=casper/vmlinuz,initrd=casper/initrd --network bridge:br0 --graphics none --extra-args="console=tty0 console=ttyS0,115200"

更多内存? (2023-10-10)

我将虚拟机的 RAM 从 2 GB 升级到了 8 GB(主机有 32 GB),但没有任何变化。cat .viminfo(10 kB 文件)仍然需要 12 秒以上的时间才能输出到控制台。

ls不应该花这么长时间 (2023-10-10)

运行时ls -la,它有时会在很短的输出后暂停,然后继续。例如:

$ ls -la
total 68
drwxr-x--- 6 user user  4096 Oct

但是如果这是读取时的阻塞,为什么它已经知道如何格式化输出?这种阻塞是否实际上发生在控制台输出上而不是读取级别?我该如何检查?

我有点怀疑,因为虚拟机是使用这些--graphics none --extra-args="console=tty0 console=ttyS0,115200"选项创建的,我可以想象那里发生了一些奇怪的事情。

相关内容