Re: RFC: remove __read_mostly

From: Andi Kleen
Date: Thu Dec 13 2007 - 18:06:21 EST


Harvey Harrison <harvey.harrison@xxxxxxxxx> writes:

> On Thu, 2007-12-13 at 14:32 -0800, David Miller wrote:
>> From: Adrian Bunk <bunk@xxxxxxxxxx>
>> Date: Thu, 13 Dec 2007 23:20:44 +0100
>>
>> > My question is:
>> > Is there anywhere in the kernel a case where __read_mostly brings a
>> > measurable improvement or can it be removed?
>>
>> Yes, on SMP when read-mostly objects share cache lines
>> with other objects which are frequently written to.
>>
>> That is the whole reason we created __read_mostly
>
> I'm curious if anyone has been looking into replacing the __read_mostly
> approach with Mathieu's immediate values patchset. Wouldn't they solve
> the cacheline sharing as well

Yes it would in most cases. This means the writing case is much
more expensive with them, so if there is anything which is still
relatively frequently written (just not "mostly") it would be
probably not a good idea. It should be only done for settings
that practically never change.

The other problem is that you have to change all accesses to the new
accessor macros which is potentially a lot. Also you have to add
sync calls for the writing case, which means that sysctl etc. setup
will be more complicated because you need "strategy" functions now.

Also for things that are not that critical the uglification in
the source is likely not worth it.

I would suggest to only do it after looking at oprofile cache miss
profiles.

> (perhaps more eficiently even with trading
> some icache for dcache)?

It should be more efficient because there will be less dcache misses.
icache is typically already prefetched by the CPU. This is especially
useful for the kernel because it often runs cache cold because user
space used all the cache.

-Andi
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/