18.5.4. 配置专用的 IOThreads
要提高虚拟机(VM)上磁盘的输入/输出(I/O)性能,您可以配置专用的 IOThread,用于管理虚拟机磁盘的 IO 操作。
通常,磁盘的 I/O 操作是主 QEMU 线程的一部分,这可以降低虚拟机在密集 I/O 工作负载期间的响应。通过将 I/O 操作分离到专用的 IOThread,您可以显著提高虚拟机的响应和性能。
流程
- 如果所选的虚拟机正在运行,请关闭它。
在主机上,在虚拟机 XML 配置中添加或编辑
<iothreads>标签。例如,要为testguest1虚拟机创建单个IOThread:# virsh edit <testguest1> <domain type='kvm'> <name>testguest1</name> ... <vcpu placement='static'>8</vcpu> <iothreads>1</iothreads> ... </domain>注意为获得最佳结果,请对主机上的每个 CPU 只使用 1-2 个
IOThreads。为虚拟机磁盘分配专用的
IOThread。例如,要将 ID 为1的IOThread分配给testguest1虚拟机上的一个磁盘:# virsh edit <testguest1> <domain type='kvm'> <name>testguest1</name> ... <devices> <disk type='file' device='disk'> <driver name='qemu' type='raw' cache='none' io='native' iothread='1'/> <source file='/var/lib/libvirt/images/test-disk.raw'/> <target dev='vda' bus='virtio'/> <address type='pci' domain='0x0000' bus='0x04' slot='0x00' function='0x0'/> </disk> ... </devices> ... </domain>注意IOThreadID 从 1 开始,您必须将单个IOThread专用于一个磁盘。通常,要获得最佳性能,每个虚拟机有一个专用的
IOThread就足够了。使用
virtio-scsi存储设备时,为virtio-scsi控制器分配一个专用的IOThread。例如,要将 ID 为1的IOThread分配给testguest1虚拟机上的一个控制器:# virsh edit <testguest1> <domain type='kvm'> <name>testguest1</name> ... <devices> <controller type='scsi' index='0' model='virtio-scsi'> <driver iothread='1'/> <address type='pci' domain='0x0000' bus='0x00' slot='0x0b' function='0x0'/> </controller> ... </devices> ... </domain>
验证
- 评估您的更改对虚拟机性能的影响。详情请查看: 虚拟机性能监控工具