net socket load balancing

From: Ulrich Windl
Date: Tue Feb 14 2006 - 02:50:27 EST


Occasionally I'm a masochist: Recently I configured PPP dialup over a 2400 baud
modem. That modem has some big advantages: It has separate LEDs for about any
MODEM state (like Rx and Tx). The device being connected to had a web interface
and SSH.

While the web interface was loading a Java applet over https for minutes, I
decided to login in via SSH instead.

Looking at the modem's LEDs I could see that the modem was receiving many long
chunks, while transmitting infrequent short chunks (packet ACKs) periodically.
However the "ssh -v" stalled during key exchange: The device (SSH server) could
not send the data in the socket buffer (for over a minute) before the SSH client
timed out key exchange.

That (and a periodic netstat on the server box) gave me the impression that the
kernel code does not do fair bandwidth sharing between sockets sending to one
specific device (those few bytes in the send queue of the SSH socket just stayed
there). It seems the send queue for one socket is completely flushed before
another socket is considered, regardless of the MTU. While on fast devices this is
hardly ever a problem, it can be for slow devices.

I just wanted to point out that problem, together with a cheap method to

For reference, the embedded device has a 48MHz PPC with Linux 2.6.11, and the
client was Novell/SuSE Linux 10.0 with Linux 2.6.13.

(renowned for not being subscribed to lkml, always asking for a CC:)

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at
Please read the FAQ at