Messages in this thread | | | Date | Thu, 15 Sep 2022 13:22:17 +0200 | From | Peter Zijlstra <> | Subject | Re: [PATCH v2 22/59] x86: Put hot per CPU variables into a struct |
| |
On Fri, Sep 02, 2022 at 08:02:46PM +0200, Jann Horn wrote: > On Fri, Sep 2, 2022 at 3:54 PM Peter Zijlstra <peterz@infradead.org> wrote: > > From: Thomas Gleixner <tglx@linutronix.de> > > > > The layout of per-cpu variables is at the mercy of the compiler. This > > can lead to random performance fluctuations from build to build. > > > > Create a structure to hold some of the hottest per-cpu variables, > > starting with current_task. > [...] > > -DECLARE_PER_CPU(struct task_struct *, current_task); > > +struct pcpu_hot { > > + union { > > + struct { > > + struct task_struct *current_task; > > + }; > > + u8 pad[64]; > > + }; > > +}; > > fixed_percpu_data::stack_canary is probably also a fairly hot per-cpu > variable on distro kernels with CONFIG_STACKPROTECTOR_STRONG (which > e.g. Debian enables), so perhaps it'd make sense to reuse > fixed_percpu_data as the struct for hot percpu variables? But I don't > have any numbers to actually back up that idea.
Not a bad idea; but the immediate problem I see with this is that fixed_percpu_data is x86_64 only.
Also; I'm thinking the current stack-protector thing is somewhat of a hack due to GCC limitations (per the comment there) and once that gets cleaned up it can come live in the pcpu_hot thing.
| |