Linux套接字缓冲区不平衡

时间:2009-01-27 17:55:26

标签: linux performance tcp

我有一个简单的场景,其中两台服务器通过千兆链路连接。 我在两侧运行iperf来测量吞吐量。

令我惊讶的是,每当我双向运行流量时,它总是只偏向一侧(例如〜900Mbps与~100Mbps)。如果我单向运行流量,每一方都得到~900Mbps。

如果我将其中一台服务器(较低内存)连接到另一台服务器,则双向流量会被平衡掉。所以绝对不是iperf的问题。

其他事实:

  • 一台服务器有很大的内存(~12GB),而另一台只有~4GB。
  • 两台服务器都具有相同的TCP内存配置,在这种情况下,相同的TCP w / r mem,核心w / r mem,TX队列长度。
  • 两者都使用相同的以太网卡(E1000驱动程序)。
  • 相同的Linux版本,RedHat 2.6.9。由于12GB内存,大型服务器运行64位版本。
  • 除了小型SSH之外,两者都没有其他流量,偶尔会有每秒一次的ping。
  • 两者都有“tcp_moderate_rcvbuf”。

问题:

  1. 为什么不平衡?
  2. 我应该查看哪个区域是否在一侧大量使用套接字缓冲区,以及如何使用?
  3. 除了iperf之外,还有哪些其他优秀软件(不是硬件/测试人员)来衡量性能?
  4. 了解Linux如何从以太网环缓冲区,TCP缓冲区,套接字缓冲区和其他缓冲区分配缓冲区的最佳方法是什么?
  5. 可能影响我上面未涉及的吞吐量的其他实体是什么?
  6. 是否有任何文档可以解释Linux如何在用户,内核,设备驱动程序和网络堆栈之间分配内存分配?
  7. 任何建议都深表赞赏。

1 个答案:

答案 0 :(得分:1)

建议:

  • 查看以太网接口的实际设置。 “ethtool”是一种彻底了解的方法。 “ifconfig”告诉你一些事情,尽管少了。 (两者都可能在/ usr / sbin /中。)使用“dmesg”查找内核消息可能会告诉你一些事情。查看链接错误率可能会发现一些事情。
  • 查询您的交换机是否有关端口状态的想法也可能会揭示出真正发生的事情。 (如果您只是在接口之间使用CAT5电缆而没有开关,则无关紧要。)
  • 由于一对机器按预期工作,而另一对机器没有,我正在考虑使用双工自动协商的一些异常。对于GigE,半双工是不常见的,但也许你的交换机或网卡正在引起它。在任何地方发现半双工设置,或者特别是主机与其交换机之间关于端口状态的不一致,都可能是原因造成的。