6.2. 禁用 vhost-net
vhost-net 模块是用于 virtio 网络的内核级后端,通过将 virtio 数据包处理任务移出用户空间(QEMU 进程)和到内核(
vhost-net
驱动程序))。vhost-net 驱动程序只可用于 virtio 网络接口。如果载入 vhost-net 内核模块,则默认为所有 virtio 接口启用它,但如果特定的工作负载在使用中时,可以在接口配置中禁用它。
特别是,当从主机将 UDP 流量发送到该主机上的虚拟客户机虚拟机时,如果客户机虚拟机处理传入的数据的速度比主机发送的速度慢,则可能会出现性能降级。在这种情况下,启用 vhost-net 会导致 UDP 套接字接收缓冲区更快地出现溢出,这会导致数据包丢失。因此最好禁用 vhost-net,以减慢流量的速度,并提高整体性能。
要禁用 vhost-net,编辑客户机虚拟机 XML 配置文件中的
<interface>
子元素,并按如下所示定义网络:
<interface type="network"> ... <model type="virtio"/> <driver name="qemu"/> ... </interface>
将驱动程序名称设置为
qemu
会强制数据包处理到 QEMU 用户空间,从而有效地为该接口禁用 vhost-net。