Date: Wed, 4 Mar 2009 17:59:31 -0500 From: John Baldwin <jhb@freebsd.org> To: Kip Macy <kmacy@freebsd.org> Cc: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: Re: svn commit: r189374 - user/kmacy/HEAD_fast_net_merge/sys/netinet Message-ID: <200903041759.31535.jhb@freebsd.org> In-Reply-To: <200903042122.n24LMdO3053650@svn.freebsd.org> References: <200903042122.n24LMdO3053650@svn.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
On Wednesday 04 March 2009 4:22:39 pm Kip Macy wrote: > Author: kmacy > Date: Wed Mar 4 21:22:39 2009 > New Revision: 189374 > URL: http://svn.freebsd.org/changeset/base/189374 > > Log: > Use per-cpu callouts for tcp_timer > 186694, 187660 > > 186694: > - convert tcp_timer_activate over to using > per-cpu callouts > - don't acquire the tcbinfo lock exclusively > in tcp_timer_rexmt unless needed for tcp_drop > > 187660: > - mp_maxid may not be valid ensure that we > re-schedule on cpuid less than or equal to > the current one for tcp callouts > > Modified: > user/kmacy/HEAD_fast_net_merge/sys/netinet/tcp_timer.c > > Modified: user/kmacy/HEAD_fast_net_merge/sys/netinet/tcp_timer.c > ============================================================================== > --- user/kmacy/HEAD_fast_net_merge/sys/netinet/tcp_timer.c Wed Mar 4 21:04:52 2009 (r189373) > +++ user/kmacy/HEAD_fast_net_merge/sys/netinet/tcp_timer.c Wed Mar 4 21:22:39 2009 (r189374) > @@ -41,6 +41,7 @@ __FBSDID("$FreeBSD$"); > #include <sys/mbuf.h> > #include <sys/mutex.h> > #include <sys/protosw.h> > +#include <sys/smp.h> > #include <sys/socket.h> > #include <sys/socketvar.h> > #include <sys/sysctl.h> > @@ -118,6 +119,8 @@ int tcp_maxpersistidle; > /* max idle time in persist */ > int tcp_maxidle; > > +#define INP_CPU(inp) min(curcpu, ((inp)->inp_flowid % mp_maxid)) This is not really safe. CPU ID's may be sparse. The only guarantees you have are that 0 is the boot CPU, and that all valid CPU IDs are in the range [0 .. mp_maxid] (inclusive). Thus, you could have a system that only has CPUs 0 and 3 and if you are on CPU 3 and flowid is 5, then this will choose min(3, 5 % 3) == min(3, 2) == 2 which is an invalid CPU. -- John Baldwin
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200903041759.31535.jhb>