performance - Linux Socket Buffer Imbalance -


I have a simple scenario, where two servers are connected through the Gigabit link, I use both sides to measure the throughput But I drive iPhorefire.

I am surprised that whenever I drive traffic in a bidirectional way, it always favors one side (such as ~ 900 Mbps vs ~ 100 Mbps). If I run for traffic Ekadidae, then each side gets ~ 900 Mbps.

If I connect a server (low memory) to another server, bidirectional traffic is balanced.

  • One server has a very large memory (~ 12 GB), while the other has ~ 4GB only.
  • The two servers have the same TCP memory configuration, in this case, the same TCP w / r mem, core W / R mem, TX line length.
  • The driver using both Ethernet cards (E1000)).
  • The same Linux version, Redhat 2.6.9.
  • The two do not have any other traffic, with small SSH and sometimes every ping is pinged.
  • In both "tcp_moderate_rcvbuf"

Question:

  1. Why unbalanced?
  2. Which area should I see to see that socket buffer is heavily used on one side, and how?
  3. Next to iperf, what are other good software (not hardware / testers) to measure performance?
  4. What is the best way to understand that how Linux can allocate buffer to Ethernet ring buffer, TCP buffer, socket buffer, and other buffers
  5. Can the other unit be? Is that which can affect throughput that I have not covered above?
  6. Is there a document that tells how Linux distributes memory allocation between users, kernels, device drivers, and network stacks?

Any advice is highly appreciated.

Tip:

  • Look at the actual settings on your Ethernet interface . To fully see "Atoll" is a way "Ifconfig" tells you something, though low. (Both possibly in / usr / sbin /.) Finding the kernel message with "dmesg" can tell you something can be revealed by looking at the link error rates.
  • For the idea of ​​the Port State, inquiries of your switch can come from what is actually happening (if you are just using a CAT5 cable between the interfaces without switch, then the relevant Do not.)
  • A pair of machines works as you expect, while there is no other pair of machines, I'm thinking about some discrepancy with Duplex autogagocation. Unusual for Half-Duplex Giga but your switch or NIC is probably causing it. Any discrepancy between a search of a half-duplex setting anywhere, or specifically about the host and port state switch may be possible.

Comments