On Mon, 7 Jul 2008, Robert Watson wrote:
rwatson 2008-07-07 10:56:55 UTC
FreeBSD src repository
Modified files:
sys/netinet udp_usrreq.c
Log:
SVN rev 180344 on 2008-07-07 10:56:55Z by rwatson
First step towards parallel transmit in UDP: if neither a specific
source or a specific destination address is requested as part of a send
on a UDP socket, read lock the inpcb rather than write lock it. This
will allow fully parallel transmit down to the IP layer when sending
simultaneously from multiple threads on a connected UDP socket.
Parallel transmit for more complex cases, such as when sendto(2) is
invoked with an address and there's already a local binding, will
follow.
This change doesn't help the particularly interesting applications, such as
named, etc, as they usually call sendto() with an address rather than
connect() the UDP socket, but upcoming changes should address that. Once you
get to the IP layer, the routing code shows up as a massive source of
contention, and it would be great if someone wanted to work on improving
concurrency for routing lookups. Re-introducing the route cache for inpcbs
would also help the connect() case, but not the sendto() case, but is still a
good idea as it would help TCP a *lot*. Once you get below the IP layer,
contention on device driver transmit locks appears to be the next major
locking-related performance issue. The UDP changes I'm in the throes of
merging have lead to significant performance improvements for UDP
applications, such as named and memcached, and hopefully can be MFC'd for 7.1
or 7.2.
Robert N M Watson
Computer Laboratory
University of Cambridge
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/cvs-all
To unsubscribe, send any mail to "[EMAIL PROTECTED]"