5.5. 网络调试技巧

这一部分描述了虚拟化环境中网络性能调试的技术。

5.5.1. 桥接零复制传输

零复制传输(Bridge Zero Copy Transmit)模式对于大尺寸的数据包较为有效。通常在客机网络和外部网络间的大数据包传输中,它对主机 CPU 负荷的减少可达到 15%,对吞吐量没有影响。
它不对客机到客机、客机到主机或小数据包负载造成影响。
Red Hat Enterprise Linux 7 虚拟机完全支持桥接零复制传输,但是被默认禁用。若需要启动零复制传输模式,请将 vhost_net 模块的 experimental_zcopytx kernel 模块参数设置到 1。

注意

由于针对限制服务和信息的威胁防御技术泄露攻击,在传输中通常会创建一个额外的数据复制。启动零复制传输将禁用这一威胁防御技术。
如果有性能回归限向,或如果无需担心主机 CPU 的使用,零复制传输模式可以通过将 experimental_zcopytx 设置到 0 被禁用。

5.5.2. 多队列 virtio-net

多队列 virtio-net 提供了随着虚拟 CPU 数量增加而改变网络性能的方法,即允许每一次通过一组以上的 virtqueue 传输数据包。
今天的高端服务器拥有更多处理器,其中所运行客机的虚拟 CPU 数量往往也在增加。在单一队列的 virtio-net 中,客机中协议堆叠的缩放收到限制,因为网络性能不随虚拟 CPU 数量的增加而改变。鉴于 virtio-net 只有一组 TX 和 RX 队列,客机不能并行传输或检索数据包。
多队列支持通过允许并行的数据包处理移除这些瓶颈。
多队列 virtio-net 在这些时候可以提供最佳性能:
  • 流量数据包相对较大。
  • 客机同时在各种连接中活跃,流量从客机、客机到主机或客户端运行到外部系统。
  • 队列数量与虚拟 CPU 相同。因为多队列支持可以优化 RX 中断关联和 TX 队列选择,实现特定队列对于特定虚拟 CPU 的私有化。

注意

多队列 virtio-net 在输入流量中运行良好,但在少数情况下可能会影响输出流量的性能。启用多队列 virtio-net 提高总体吞吐量,同时提高 CPU 可用量。

5.5.2.1. 配置多队列 virtio-net

使用多队列 virtio-net 时,通过向客机 XML 配置(N 的值为 1 到 8,即 kernel 最多可支持一组多队列 tap 设备中的 8 个队列)添加以下命令:
<interface type='network'>
      <source network='default'/>
      <model type='virtio'/>
      <driver name='vhost' queues='N'/>
</interface>
与客机中的 N virtio-net 队列一同运行虚拟机时,执行以下命令(M 的值为 1 到 N)时允许多队列支持:
# ethtool -L eth0 combined M