我正在运行 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"
选项创建的,我可以想象那里发生了一些奇怪的事情。