我有一台 Debian 10.6 主机,以及一台 Debian 10.6 客户机。KVM/Qemu/libvirt。主机有一个软件 RAID 10 阵列,包含 6 个机械磁盘。LVM 位于 RAID 阵列之上。使用以下命令将一个 LV 传递到客户机中:
<disk type='block' device='disk'>
<driver name='qemu' type='raw' cache='none' io='native'/>
<source dev='/dev/raid10/lv0'/>
<target dev='vdb' bus='virtio'/>
<address type='pci' domain='0x0000' bus='0x00' slot='0x0a' function='0x0'/>
</disk>
主机以大约 720 MB/s 的速度写入逻辑卷:
dd of=diskbench if=/dev/zero bs=30000000 count=2000
(60 GB, 56 GiB) copied, 82.7758 s, 725 MB/s
(60 GB, 56 GiB) copied, 82.5263 s, 727 MB/s
(60 GB, 56 GiB) copied, 83.8701 s, 715 MB/s
(45 GB, 42 GiB) copied, 58.9086 s, 772 MB/s
然而,在客户机内部,同样的测试运行得慢得多:
dd of=diskbench if=/dev/zero bs=30000000 count=2000
(60 GB, 56 GiB) copied, 254.088 s, 236 MB/s
(60 GB, 56 GiB) copied, 245.407 s, 244 MB/s
(60 GB, 56 GiB) copied, 242.558 s, 247 MB/s
此系统尚未投入生产,且未承受负载。我可以检查哪些内容来提高写入性能?
答案1
不要将dd
其用作衡量性能的工具。示例中给出的命令行参数dd
允许主机操作系统将写入缓存在 RAM 中。因此,此处的结果可能会因主机操作系统与客户操作系统中可用于缓存的 RAM 数量而产生偏差。fio
是一种更适合进行基准测试的工具。