我有一个简单的场景,其中两台服务器通过千兆链路连接.
我在两侧运行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”.

问题:

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

任何建议都深表感谢.

解决方法:

建议:

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

标签: linux, tcp, performance

相关文章推荐

添加新评论,含*的栏目为必填