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]"

Reply via email to