Re: [Patch][RFC] Disabling per-tgid stats on task exit in taskstats

Andrew Morton
2006-07-01T03:52:28Z

On Fri, 30 Jun 2006 23:37:10 -0400
Shailabh Nagar <nagar@watson.ibm.com> wrote:

> >Set aside the implementation details and ask "what is a good design"?
> >
> >A kernel-wide constant, whether determined at build-time or by a /proc poke
> >isn't a nice design.
> >
> >Can we permit userspace to send in a netlink message describing a cpumask?
> >That's back-compatible.
> >
> >
> Yes, that should be doable. And passing in a cpumask is much better
> since we no longer
> have to maintain mappings.
>
> So the strawman is:
> Listener bind()s to genetlink using its real pid.
> Sends a separate "registration" message with cpumask to listen to.
> Kernel stores (real) pid and cpumask.
> During task exit, kernel goes through each registered listener (small
> list) and decides which
> one needs to get this exit data and calls a genetlink_unicast to each
> one that does need it.
>
> If number of listeners is small, the lookups should be swift enough. If
> it grows large, we
> can consider a fancier lookup (but there I go again, delving into
> implementation too early :-)

We'll need a map.

1024 CPUs, 1024 listeners, 1000 exits/sec/CPU and we're up to a million
operations per second per CPU. Meltdown.

But it's a pretty simple map. A per-cpu array of pointers to the head of a
linked list. One lock for each CPU's list.