per-cpu counters (Re: svn commit: r190967 - head/sys/netinet)

Robert Watson rwatson at FreeBSD.org
Sun Apr 12 14:29:39 UTC 2009


On Sun, 12 Apr 2009, Robert Watson wrote:

>> As an example, an approach i was considering is replace the existing 
>> counters with an index in a global_counters[MAXCPU][] array so the counter 
>> update will become something like this:

FYI, one other reason to put it all behind per-subsystem macros is that it 
allows us to easily prototype another statistics implementation, the no-op, on 
a per-subsystem basis.

Robert N M Watson
Computer Laboratory
University of Cambridge

>> 
>> -	pimstat.pims_rcv_registers_wrongiif++;
>> +	global_counters[PCPU_GET(cpuid)]
>> +		[pimstat.pims_rcv_registers_wrongiif]++;
>> 
>> When you allocate an entry you also need to allocate an entry in the 
>> global_counters, but entries have fixed size, and the modules that you 
>> build will not depend on the MAXCPU value.
>> 
>> All of this is still compatible with the macros you are adding, but I 
>> wonder why we should have many PIMSTAT_INC, IPFW_INC, NATD_INC and so on 
>> instead of more generic COUNTER64_INC() or COUNTER32_INC()
>
> I have a project along these lines in progress, and will post the proposal to 
> arch@ once I've finished prototyping it.  In particular, it provides common 
> implementations of "reset" and "report" in order to expose a single userspace 
> version of the structure via sysctl.
>
> The reason to use per-subsystem macros is that there's another dimmension 
> here: virtualization.  Some counters are per-CPU, others are per-VIMAGE, and 
> many are per-CPU-per-VIMAGE.  Since virtualization is a work-in-progress, and 
> they haven't yet virtualized all the counter blocks, I figured it was best to 
> push all the counter updates behind subsystem-specific macros, and then 
> virtualization would touch only the macro definitions, not the implementation 
> in every place.  In the sample implementation you show above, changes have to 
> be made to every instance of the counter when virtualization is 
> added/removed/changed for PIM, making per-CPU changes hard to MFC.
>
> Robert N M Watson
> Computer Laboratory
> University of Cambridge
>


More information about the svn-src-head mailing list