通过Linux防火墙VM进行慢速networking传输

我们在ESX上运行RedHat 5.8 VM,并使用iptables作为防火墙。 这个盒子有多个nics,一个nic作为我们networking的网关,其他nics每个都去一个单独的VLAN /networking。 我看到的问题是,从主机直接向防火墙虚拟机执行iperftesting,速度为800 Mbps,但尝试从防火墙外的主机到防火墙内的主机执行iperftesting(导致stream量通过通过防火墙)产生约30Mbps或更低的速度。

细节:

  • 我不确定我们正在运行的ESX或UCS的版本是什么,但我可以看出这是否重要。 我们的系统pipe理员保持最新,所以他们最有可能在最近几次更新。
  • 我知道我们正在为networking适配器使用VMXNET 3驱动程序。
  • 所有连接都被validation为1Gbps。

我试过了:

  • 从我读过的内容来看,e1000驱动程序的效果更好,所以我们添加了一些使用该驱动程序的nics,并通过这些接口testing了iperf,结果相同。
  • 检查testing接口上的LRO是否被禁用。 当我运行“ethtool -K ethX lro off”时,它会报告“没有卸载设置已更改”,我假定它已被禁用。
  • 在testing的接口上也禁用了TSO。
  • 当我进行速度testing时,通常是通过同一个集群上的防火墙从物理设备到虚拟设备进行testing。 我也尝试通过防火墙从虚拟设备到虚拟设备进行testing,得到了相同的结果。
  • 禁用iptables并运行速度testing,收到相同的结果。
  • 上面的项目都没有改变什么,除了可能使事情变得更慢(我得到了一点<10 Mbps的)。

因为我可以得到800 Mbps以上的防火墙本身,这使我认为nics本身的configuration没有任何问题。 我觉得这是操作系统本身的转发问题,因为它只是在stream量通过防火墙时才显现出来。 我也应该注意到在这个过程中我没有观察到任何CPU峰值。

我相信我会留下一些细节,所以如果还有其他问题,请告诉我。 我感谢任何帮助!

我们find了解决scheme。 我们必须在UCS的刀片级别禁用LRO(如下所示 – > http://docwiki.cisco.com/wiki/Disable_LRO )。 一旦我们这样做,速度高达700 + MBps,仅限于CPU和iptables处理。