10.4. 通过管理 RX-TX 队列大小来防止数据包丢失
出于许多原因,您可能会遇到高于每秒 350 万条数据包的数据包丢失,例如:
- 网络中断
- a SMI
- Virtual Network Function 中的数据包处理延迟
要防止数据包丢失,将队列大小从默认值 512 增加到最多 1024。
先决条件
-
访问
stack
用户的 undercloud 主机和凭据。
流程
-
以
stack
用户身份登录 undercloud 主机。 查找
stackrc
undercloud 凭证文件:$ source ~/stackrc
创建自定义环境 YAML 文件并在
parameter_defaults
下添加以下定义来提高 RX 和 TX 队列大小:parameter_defaults: NovaLibvirtRxQueueSize: 1024 NovaLibvirtTxQueueSize: 1024
运行部署命令并包括核心 heat 模板、其他环境文件、包含 RX 和 TX 队列大小更改的环境文件:
示例
$ openstack overcloud deploy --templates \ -e <other_environment_files> \ -e /home/stack/my_tx-rx_queue_sizes.yaml
验证
观察
nova.conf
文件中 RX 队列大小和 TX 队列大小的值。$ egrep "^[rt]x_queue_size" /var/lib/config-data/puppet-generated/\ nova_libvirt/etc/nova/nova.conf
您应该看到以下内容:
rx_queue_size=1024 tx_queue_size=1024
在 Compute 主机上 libvirt 生成的 VM 实例 XML 文件中检查 RX 队列大小和 TX 队列大小的值:
- 创建新实例。
获取 Compute 主机和实例名称:
$ openstack server show testvm-queue-sizes -c OS-EXT-SRV-ATTR:\ hypervisor_hostname -c OS-EXT-SRV-ATTR:instance_name
输出示例
您应该看到类似如下的输出:
+-------------------------------------+------------------------------------+ | Field | Value | +-------------------------------------+------------------------------------+ | OS-EXT-SRV-ATTR:hypervisor_hostname | overcloud-novacompute-1.sales | | OS-EXT-SRV-ATTR:instance_name | instance-00000059 | +-------------------------------------+------------------------------------+
登录 Compute 主机并转储实例定义。
示例
$ podman exec nova_libvirt virsh dumpxml instance-00000059
输出示例
您应该看到类似如下的输出:
... <interface type='vhostuser'> <mac address='56:48:4f:4d:5e:6f'/> <source type='unix' path='/tmp/vhost-user1' mode='server'/> <model type='virtio'/> <driver name='vhost' rx_queue_size='1024' tx_queue_size='1024' /> <address type='pci' domain='0x0000' bus='0x00' slot='0x10' function='0x0'/> </interface> ...