Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 4 Mar 2009 15:20:55 -0800
From:      Kip Macy <kmacy@freebsd.org>
To:        John Baldwin <jhb@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:  <3c1674c90903041520o145b0c42uc1dd2d41870432e6@mail.gmail.com>
In-Reply-To: <200903041759.31535.jhb@freebsd.org>
References:  <200903042122.n24LMdO3053650@svn.freebsd.org> <200903041759.31535.jhb@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
Do we have any mechanism for handling sparse cpuids?
If so I can do modulo the number of active cpus and then taking that
value as an index. If not its a bit of an academic observation.

-Kip




On Wed, Mar 4, 2009 at 2:59 PM, John Baldwin <jhb@freebsd.org> wrote:
> On Wednesday 04 March 2009 4:22:39 pm Kip Macy wrote:
>> Author: kmacy
>> Date: Wed Mar =A04 21:22:39 2009
>> New Revision: 189374
>> URL: http://svn.freebsd.org/changeset/base/189374
>>
>> Log:
>> =A0 Use per-cpu callouts for tcp_timer
>> =A0 186694, 187660
>>
>> =A0 186694:
>> =A0 - convert tcp_timer_activate over to using
>> =A0 =A0 per-cpu callouts
>> =A0 - don't acquire the tcbinfo lock exclusively
>> =A0 =A0 in tcp_timer_rexmt unless needed for tcp_drop
>>
>> =A0 187660:
>> =A0 - mp_maxid may not be valid ensure that we
>> =A0 =A0 re-schedule on cpuid less than or equal to
>> =A0 =A0 the current one for tcp callouts
>>
>> Modified:
>> =A0 user/kmacy/HEAD_fast_net_merge/sys/netinet/tcp_timer.c
>>
>> Modified: user/kmacy/HEAD_fast_net_merge/sys/netinet/tcp_timer.c
>>
> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D
>> --- user/kmacy/HEAD_fast_net_merge/sys/netinet/tcp_timer.c =A0 =A0Wed Ma=
r =A04
> 21:04:52 2009 =A0 (r189373)
>> +++ user/kmacy/HEAD_fast_net_merge/sys/netinet/tcp_timer.c =A0 =A0Wed Ma=
r =A04
> 21:22:39 2009 =A0 (r189374)
>> @@ -41,6 +41,7 @@ __FBSDID("$FreeBSD$");
>> =A0#include <sys/mbuf.h>
>> =A0#include <sys/mutex.h>
>> =A0#include <sys/protosw.h>
>> +#include <sys/smp.h>
>> =A0#include <sys/socket.h>
>> =A0#include <sys/socketvar.h>
>> =A0#include <sys/sysctl.h>
>> @@ -118,6 +119,8 @@ int =A0 =A0 =A0 tcp_maxpersistidle;
>> =A0 =A0 =A0 /* max idle time in persist */
>> =A0int =A0tcp_maxidle;
>>
>> +#define =A0 =A0 =A0INP_CPU(inp) =A0 =A0min(curcpu, ((inp)->inp_flowid %=
 mp_maxid))
>
> This is not really safe. =A0CPU ID's may be sparse. =A0The only guarantee=
s you
> have are that 0 is the boot CPU, and that all valid CPU IDs are in the ra=
nge
> [0 .. mp_maxid] (inclusive). =A0Thus, you could have a system that only h=
as
> CPUs 0 and 3 and if you are on CPU 3 and flowid is 5, then this will choo=
se
> min(3, 5 % 3) =3D=3D min(3, 2) =3D=3D 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?3c1674c90903041520o145b0c42uc1dd2d41870432e6>