Re: Unix sockets via TCP on localhost: is TCP slower?

From: Eric Dumazet
Date: Fri Nov 14 2008 - 03:55:03 EST


Olaf van der Spek a Ãcrit :
On Fri, Nov 14, 2008 at 1:19 AM, J.R. Mauro <jrm8005@xxxxxxxxx> wrote:
On Wed, Nov 12, 2008 at 6:20 PM, Olaf van der Spek <olafvdspek@xxxxxxxxx> wrote:
Hi,

Quite often in discussions, I see people claiming Unix sockets are
faster then TCP sockets on a connection that stays inside localhost.
Unix domain sockets should be faster because they're not subject to
windowing, ACKs, flow control, encapsulation, etc. etc.

Why would you use windowing, ACKs, flow control and encapsulation on localhost?

I expected the kernel to copy data directly from user-space of the
sending process to a kernel buffer of the receiving process, much like
UNIX sockets.


localhost uses a standard network device, and whole network stack
is used, no 'special kludges'. You can add iptables rules, you
can do trafic shaping, trafic sniffing (tcpdump), limiting
memory used by all sockets (controlling memory pressure on the
machine)

Doing what you suggest would slow down AF_INET stack.

You probably can expect AF_UNIX to be faster, since this one is really special and use shortcuts.

Then, you probably can use shared memory instead of AF_UNIX, or
pipes (and splice()), or ...

Then you probably can use threads and do zero-copy ;)

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/