我有一个简单的场景,其中两台服务器通过千兆链路连接。
我在两侧运行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如何在用户,内核,设备驱动程序和网络堆栈之间分配内存分配?
醇>
任何建议都深表赞赏。