Re: [PATCH v3 0/2] Move x86_cpu_to_apicid to the __read_mostly section

Ingo Molnar
2012-05-21T09:06:46Z

* Vlad Zolotarov <vlad@scalemp.com> wrote:

> Pls., consider applying this patch series.
> It contains the following changes:
> - Adds two new macros DEFINE_EARLY_PER_CPU_READ_MOSTLY() and
> DECLARE_EARLY_PER_CPU_READ_MOSTLY().
> - Adds "read-mostly" qualifier to the following variables in smp.h:
> - cpu_sibling_map
> - cpu_core_map
> - cpu_llc_shared_map
> - cpu_llc_id
> - cpu_number
> - x86_cpu_to_apicid
> - x86_bios_cpu_apicid
> - x86_cpu_to_logical_apicid
>
> As long as all the variables above are only written during the
> initialization, this change is meant to prevent the false
> sharing and improve the performance on large multiprocessor
> systems.

Mind explaining why it helps performance? Are these percpu
variables also accessed from other CPUs, increasing the cost of
false sharing of cache-lines?

Or is the problem that the 'cache line' size is 4096 bytes on
vSMP, making even singular cache misses expensive and you'd like
to move these next to each other?

So it would be nice to see some before/after PMU stats
demonstrating the improvement. (perf works on vSMP, right?)

Thanks,

Ingo