Date: Mon, 18 Aug 2008 09:37:51 -0400 From: Mike Tancsa <mike@sentex.net> To: Robert Watson <rwatson@freebsd.org>, stable@freebsd.org Subject: Re: HEADS UP: inpcb/inpcbinfo rwlocking: coming to a 7-STABLE branch near you Message-ID: <200808181337.m7IDbqSC066670@lava.sentex.ca> In-Reply-To: <alpine.BSF.1.10.0808180913450.881@fledge.watson.org> References: <alpine.BSF.1.10.0808031142550.65130@fledge.watson.org> <alpine.BSF.1.10.0808180913450.881@fledge.watson.org>
next in thread | previous in thread | raw e-mail | index | archive | help
At 04:14 AM 8/18/2008, Robert Watson wrote: >On Sun, 3 Aug 2008, Robert Watson wrote: > >>This is an advance warning that, late next week, I will be merging >>a fairly large set of changes to the IPv4 and IPv6 protocols >>layered over the inpcb/inpcbinfo kernel infrastructure. To be >>specific, this affects TCP, UDP, and raw sockets on both IPv4 and >>IPv6. I will post a further e-mail announcement along with patch >>set and schedule in a day or two once it's prepared. > >FYI: This patch has now been committed to Subversion. I'll keep a >close eye out for difficulties; if you run into issues, please send >me an e-mail (and CC stable@). Hi Robert, I just did a buildworld/kernel in case your commit fixed the routing bugs, but I am still seeing those bogus arp / routing table entries. I narrowed it down to the commits below. I dont think its the intel stuff, as another user reported the same issue using bce nics. date=2008.07.30.18.00.00 and date=2008.07.31.00.00.00 Updating collection src-all/cvs Edit src/sys/conf/files Add delta 1.1243.2.32 2008.07.30.20.35.41 kmacy Checkout src/sys/dev/e1000/LICENSE Checkout src/sys/dev/e1000/README Checkout src/sys/dev/e1000/e1000_80003es2lan.c Checkout src/sys/dev/e1000/e1000_80003es2lan.h Checkout src/sys/dev/e1000/e1000_82540.c Checkout src/sys/dev/e1000/e1000_82541.c Checkout src/sys/dev/e1000/e1000_82541.h Checkout src/sys/dev/e1000/e1000_82542.c Checkout src/sys/dev/e1000/e1000_82543.c Checkout src/sys/dev/e1000/e1000_82543.h Checkout src/sys/dev/e1000/e1000_82571.c Checkout src/sys/dev/e1000/e1000_82571.h Checkout src/sys/dev/e1000/e1000_82575.c Checkout src/sys/dev/e1000/e1000_82575.h Checkout src/sys/dev/e1000/e1000_api.c Checkout src/sys/dev/e1000/e1000_api.h Checkout src/sys/dev/e1000/e1000_defines.h Checkout src/sys/dev/e1000/e1000_hw.h Checkout src/sys/dev/e1000/e1000_ich8lan.c Checkout src/sys/dev/e1000/e1000_ich8lan.h Checkout src/sys/dev/e1000/e1000_mac.c Checkout src/sys/dev/e1000/e1000_mac.h Checkout src/sys/dev/e1000/e1000_manage.c Checkout src/sys/dev/e1000/e1000_manage.h Checkout src/sys/dev/e1000/e1000_nvm.c Checkout src/sys/dev/e1000/e1000_nvm.h Checkout src/sys/dev/e1000/e1000_osdep.c Checkout src/sys/dev/e1000/e1000_osdep.h Checkout src/sys/dev/e1000/e1000_phy.c Checkout src/sys/dev/e1000/e1000_phy.h Checkout src/sys/dev/e1000/e1000_regs.h Checkout src/sys/dev/e1000/if_em.c Checkout src/sys/dev/e1000/if_em.h Checkout src/sys/dev/e1000/if_igb.h Edit src/sys/kern/kern_synch.c Add delta 1.302.2.3 2008.07.30.18.28.09 rwatson Edit src/sys/kern/sys_process.c Add delta 1.145.2.1 2008.07.30.19.49.10 jhb Edit src/sys/netinet/tcp_subr.c Add delta 1.300.2.4 2008.07.30.20.35.41 kmacy Edit src/sys/netinet/tcp_syncache.c Add delta 1.130.2.9 2008.07.30.20.35.41 kmacy Add delta 1.130.2.10 2008.07.30.20.51.20 kmacy Edit src/sys/netinet/tcp_syncache.h Add delta 1.1.2.1 2008.07.30.20.35.41 kmacy Edit src/sys/netinet/tcp_usrreq.c Add delta 1.163.2.4 2008.07.30.20.35.41 kmacy Edit src/sys/netinet/udp_usrreq.c Add delta 1.218.2.1 2008.07.30.21.23.21 bz Edit src/sys/netinet6/ip6_input.c Add delta 1.95.2.1 2008.07.30.21.23.21 bz Edit src/sys/netinet6/ip6_var.h Add delta 1.39.2.2 2008.07.30.21.23.21 bz Edit src/sys/sys/socket.h Add delta 1.95.2.3 2008.07.30.19.35.40 kmacy Edit src/sys/ufs/ufs/ufs_lookup.c Add delta 1.83.2.2 2008.07.30.21.43.42 jhb Edit src/sys/vm/vm_object.c Add delta 1.385.2.2 2008.07.30.21.43.42 jhb Edit src/sys/vm/vm_object.h Add delta 1.114.2.1 2008.07.30.21.43.42 jhb Edit src/sys/vm/vnode_pager.c Add delta 1.236.2.2 2008.07.30.21.43.42 jhb ---Mike >Thanks, > >Robert N M Watson >Computer Laboratory >University of Cambridge > >> >>The thrust of this change is to replace the mutexes protecting the >>inpcb and inpcbinfo data structures with read-write locks >>(rwlocks). These structures represent, respectively, particular >>sockets and the global socket lists for all socket types in IPv4 >>and IPv6 except for SCTP. When you run netstat, inpcbinfo is the >>data structure referencing all connections, and each line in the >>nestat output reflects the contents of a specific inpcb. >> >>In the current stage of this work, the intent is to improve >>performance for datagram-related protocols on SMP systems by >>allowing concurrent acquisition of both global and connection locks >>during receive and transmit. This is possible because, in the >>common case, no connection or global state is modified during >>UDP/raw receive and transmit at the IP layer, so a read lock is >>sufficient to prevent data in those structures from unexpectedly >>changing. For receive, socket layer state is modified, but this is >>separately protected by socket layer locks. On transmit, no state >>is modified at any layer, so in principle we will allow fully >>parallel transmit from multiple threads down to about the routing >>and network interface layers, whereas previously they would bottleneck in UDP. >> >>The applications targeted by this change are threaded UDP server >>applications, such as BIND9, nsd, and UDP-based memcached. Kris >>Kennaway and Paul Saab have done fairly extensive testing with the >>changes and demonstrated significant performance improvements due >>to reduced contention and overhead. Perhaps they can mention some >>of those numbers in a follow-up to this post. >> >>The reason for the heads up is that, while carefully-tested, >>changes of this sort do come with risks. We've carefully >>structured them so as to avoid breaking the ABIs for netstat, etc, >>but it's not impossible that some problems will arise as the >>changes settle. The goal, however, is to see these performance >>improvements in 7.1, and since they've had a bit to shake out in >>8.x and seen some heavy use, I think now is the right time to merge them. >> >>In any case, I will send out e-mail in a couple of days with a >>proposed merge patch and schedule for merging, and perhaps if you >>are in a positition where you might benefit from these >>improvements, or have interesting UDP or raw-socket based >>applications running on 7.x, you could test the candidate patch >>before it's merged, reporting any problems. Unless I receive >>negative feedback, I will plan on merging the changes late in the >>week, and keep a close eye on stable@ for any reports of problems. >> >>Thanks, >> >>Robert N M Watson >>Computer Laboratory >>University of Cambridge >>_______________________________________________ >>freebsd-stable@freebsd.org mailing list >>http://lists.freebsd.org/mailman/listinfo/freebsd-stable >>To unsubscribe, send any mail to "freebsd-stable-unsubscribe@freebsd.org" >_______________________________________________ >freebsd-stable@freebsd.org mailing list >http://lists.freebsd.org/mailman/listinfo/freebsd-stable >To unsubscribe, send any mail to "freebsd-stable-unsubscribe@freebsd.org"
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200808181337.m7IDbqSC066670>