virtio-net rx/tx 队列大小的支持¶
https://blueprints.launchpad.net/nova/+spec/libvirt-virtio-set-queue-sizes
目前的多队列 virtio-net 方法中,网络性能随着 CPU 数量的增加而扩展。持续进行大量工作以提高网络性能(通常是 DPDK 应用程序),以便充分利用每个 vCPU 的全部容量。
问题描述¶
即使在强大的分区(isolcpus、tuned)到位的情况下,vCPU 也可能被 hypervisor 内核线程抢占。抢占并不频繁,每秒几次,但对于每个 virtio 队列 256 个描述符的情况,仅一次 vCPU 的抢占就可能导致数据包丢失,因为在抢占期间 256 个槽位已被填满:这对于 NFV VM 来说是常见情况,其中每个队列的数据包速率高于 1 Mpps(每秒 100 万个数据包)。
用例¶
更大的队列大小允许摊销 vCPU 抢占,并避免数据包丢失,这是 NFV 的主要要求之一:零数据包丢失。对于今天的 NFV VM,1k 队列允许在没有任何数据包丢失的情况下实现高性能,因此能够将默认队列大小增加到 1k 将解决今天的问题。使其可配置,由运营商选择,也将有助于解决未来的 NFV 用例(我们现在正从 10Gbps NIC 转向 25Gbps NIC)。
提议的变更¶
在 QEMU 2.7.0 和 libvirt 2.3.0 中,引入了一个新的可调参数来配置 RX 队列大小。在 QEMU 2.10.0 和 libvirt 3.7.0 中,引入了一个新的可调参数来更新 virtio NIC 的 TX 队列大小。
建议的更改是在“nova.conf”的“libvirt”部分添加新的选项,以更新在主机上启动的 guest XML 的默认值。因此,所有使用 vif 类型模型 virtio 后端为 vhost (VIF_TYPE_BRIDGE, VIF_TYPE_OVS) 或后端为 vhostuser (VIF_TYPE_VHOSTUSER) 的 guest 都将使用这些新值启动。
‘tx_queue_size’
‘rx_queue_size’
对于这两个选项,None 将是默认值,这意味着 libvirt 驱动程序不会在 guest 的域 XML 中包含任何队列大小值。
当前实现允许大小在 256 到 1024 之间,并且该数字应该是 2 的幂。如果未满足先前的约束,将为每个启动的 guest 打印警告消息。
如果更新了值,而 guest 在主机上运行时,只有新启动的 guest 才会利用这些新值。这意味着“旧”运行的 guest 将保留以前的值。
注意:在硬重启和冷迁移期间,有两个特殊情况,guest 的域 XML 会被重新生成,这意味着它们将利用在“nova.conf”中配置的新值。
注意:尝试迁移配置了队列大小的 guest 到不支持此类配置的 libvirt 或 QEMU 版本的 host 将无法工作。迁移过程将回滚,让调度器找到新的 host。
备选方案¶
运营商可以通过手动更新 guest 的域 XML 来实现这一点。
在 Nova 中,可以通过更新为实例创建的端口的绑定配置文件来配置 tx/rx 队列。但已经注意到 tx/rx 队列选项与 Networking 无关,而是特定于 virtio 框架,因此允许用户更新这些值是不希望的,因为要正确配置它们,硬件应该知道。
在 Nova 中,还可以通过引入 flavor extra-specs 来配置 tx/rx 队列大小,这将为运营商提供限制该功能到特定租户、灵活更新值以及使用 aggregates 管理 host 的能力。能够为不同的 flavor 配置不同的尺寸。
数据模型影响¶
无
REST API 影响¶
无
安全影响¶
无
通知影响¶
无
其他最终用户影响¶
我们假设配置了新值的计算节点将隔离在特定的 aggregates 中。想要利用该网络改进的用户将使用配置为在这些特定 aggregates 上启动的 flavor。
性能影响¶
无
其他部署者影响¶
运营商必须通过“nova.conf”配置 tx_queue_size 和/或 rx_queue_size,然后将 host 隔离到特定的 host aggregates,并配置与该 aggregate 的属性匹配的 flavor 属性。
或者,运营商可以避免隔离 host。
开发人员影响¶
无
升级影响¶
无
实现¶
负责人¶
- 主要负责人
Sahid Orentino Ferdjaoui <sahid-ferdjaoui>
工作项¶
在 nova.conf 中引入新的选项
更新 config xml 以在启动时处理新的选项
依赖项¶
无
测试¶
将添加单元测试以确保在“nova.conf”中更新的 tx_queue_size 和/或 rx_queue_size 的值将被在 host 上启动的 guest 考虑。
文档影响¶
支持此功能的 VIF 的文档以及在“nova.conf”中引入的 config 选项也应更新。
参考资料¶
历史¶
发布名称 |
描述 |
|---|---|
Rocky |
引入 |