第 5 章 使用 Open vSwitch DPDK 的 Instance VHU 接口上 TX Drops


使用此流程对实例 vhost-user(VHU)接口传输的丢弃进行故障排除。

5.1. 症状

数据包通过 virtio 传输从 vswitch 传输到客户机,而不通过内核或 qemu 进程。这可以通过使用 VHU 接口交换数据包来完成。

VHU 主要由 DPDK librte_vhost 实施,其也提供要发送或接收数据包批量的功能。VHU 的后端是由 qemu 提供的 virtio 环形,用于与虚拟机交换数据包。virtio ring 具有特殊的格式,它由描述符和缓冲区组成。

TX/RX(transmit/receive)统计用于 OpenvSwitch(OVS)。这意味着传输统计与接收虚拟机的统计数据直接相关。

如果虚拟机没有足够快地处理数据包,OVS TX 队列溢出,并丢弃数据包。

5.1.1. Packet Drops 的说明

饱和 virtio 环会导致 TX 丢弃 vhost-user 设备。virtio ring 位于客户机的内存中,它与 vhost-user 推送数据包并消耗它们的队列一样。如果虚拟机无法足够快地使用数据包,virtio 环会从缓冲和 vhost-user 丢弃数据包中运行。

使用 Perf 和 Ftrace 工具对数据包丢弃进行故障排除。

  • 使用 Perf 计算调度程序切换的数量,这可能会显示 qemu 线程是否被抢占。
  • 使用 Ftrace 显示抢占的原因以及其所需的时间。

抢占原因包括:

  • 时间中断(内核循环):

    这些添加至少两个上下文切换的成本。计时器中断也可以运行 read-copy update(RCU)回调,这些回调可能会花费无法预计的时间。

  • CPU 电源管理和超线程

您可以在以下软件包中找到这些工具:

5.1.2. 其他丢弃的说明

在 OVS 2.9 之前,vHost 用户端口是在 dpdkvhostuser 模式中创建的。在这种模式中,OVS 充当 vhost 服务器,QEMU 充当客户端。当实例停机或重启时,OVS 网桥上的 vhost 用户端口仍然活跃,丢弃目的地为虚拟机的数据包。这会增加 tx_drop_counter

在以下示例中,虚拟机被 nova stop <UUID&gt; 停止:

[root@overcloud-compute-0 network-scripts]# ovs-vsctl list interface vhubd172106-73 | grep _state
admin_state         : up
link_state          : down
Copy to Clipboard Toggle word wrap

当内核端口使用 ip link 设置 dev <br 内部端口名称> down 和 用户空间中丢弃 帧时,这个情况类似。

当虚拟机启动时,它会连接到同一 vhu socket,并将开始清空 virtio 环缓冲。TX 不再中断,正常的网络流量恢复。

5.1.3. 为 DPDK 增加 TX 和 RX 队列长度

您可以使用以下 OpenStack director 模板修改来更改 DPDK 的 TX 和 RX 队列长度:

NovaComputeExtraConfig:
        nova::compute::libvirt::rx_queue_size: '"1024"'
        nova::compute::libvirt::tx_queue_size: '"1024"'
Copy to Clipboard Toggle word wrap

以下示例显示了验证检查:

[root@overcloud-compute-1 ~]# ovs-vsctl get interface vhu9a9b0feb-2e status
{features="0x0000000150208182", mode=client, num_of_vrings="2", numa="0",
socket="/var/lib/vhost_sockets/vhu9a9b0feb-2e", status=connected, "vring_0_size"="1024",
"vring_1_size"="1024"}

[root@overcloud-compute-1 ~]# virsh dumpxml instance-00000017 | grep rx
<driver rx_queue_size='1024' tx_queue_size='1024'/>
<driver rx_queue_size='1024' tx_queue_size='1024'/>
Copy to Clipboard Toggle word wrap

由于内核限制,您无法将队列大小增加到 1024 以上。

注意

如果您计划通过 DPDK 对 neutron 网络使用 PXE 引导,则必须验证 PXE 版本是否支持 1024 字节。

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat