将 OpenStack 计算节点升级到 3.14 内核后,使用 virtio 以太网驱动程序时,所有 KVM 客户端的上传速度都很慢。下载速度不受影响,HTTP 下载保持恒定的 50 MB/s,但上传速度从 2 MB/s 开始下降到每秒千比特(在 1 gbps 网络上)。这包括网络外的 TX 和虚拟机之间的 TX。
设置:
- 带有中子网络的 OpenStack Icehouse
- 通过 openvswitch 在 ml2 插件下实现 GRE 隧道网络
- 所有物理接口上的 GRO 均已禁用,这些接口采用 igb 2.0.5 驱动程序
- 数据接口通过 1gbit 端口/交换机连接
- 具有多个计算节点的单个专用网络节点
- 所有服务器均运行 14.04(也在一个计算节点上尝试了 14.10,但问题仍然存在)
一旦驱动程序切换到 e1000,网络性能就会恢复到预期速度(但 e1000 的性能比 virtio 差;上传速度约为 16 MB/s)。此外,在另一个仍运行 3.13 内核的节点上,上传速度 > 50 MB/s(从 3.13 节点上的 VM 传输到 3.14 节点上的 VM 没问题,而反向传输则存在上传不流畅的问题)。
在客户机上的 SSH 中,只需对 2000 行文件运行 cat 就会出现问题,每 2 秒冻结一次。在普通客户机上,它会在半秒内打印出来。
请注意,只有计算节点受到此问题的影响 - 在同一个集群中有两个计算节点,一个节点运行 3.13,另一个节点运行 3.14,并且中子网络节点运行其他版本(应该没关系,但我认为它目前在 3.16 上),3.13 仍然正常,而 3.14 节点上的客户机则存在问题。
我注意到错误报告https://bugzilla.kernel.org/show_bug.cgi?id=74851。 然而
- a)据我了解,计算节点不需要 IP 转发(通过“echo 0 > /proc/sys/net/ipv4/ip_forward”禁用它后,客户网络仍然运行)并且
- b) 从 升级到最新 3.14、最新 3.15 和最新 3.16 后http://kernel.ubuntu.com/~kernel-ppa/mainline/问题仍然存在。
答案1
看起来这实际上与内核无关,但由于某种原因,升级到 3.14 主线内核导致在网桥、tap 和 OpenStack 自动创建的其他接口上启用 TSO。
在每个 qbr、qvb、qvo 和 tap 接口上运行后ethtool -K [interface] gro off tso off
,virtio 驱动程序恢复良好的性能。
由于我需要 3.14 来进行一些与 bcache 相关的其他更改,因此我最终修补了 OpenStack nova,以便在/usr/lib/python2.7/dist-packages/nova/network/linux_net.py
每次创建其中一个接口时运行 ethtool 命令(通过 utils.execute 和 run_as_root=True)。到目前为止,它似乎正在发挥作用。