Re: [MM] Make mm counters per cpu instead of atomic V2

From: KAMEZAWA Hiroyuki
Date: Fri Nov 06 2009 - 14:03:36 EST


Christoph Lameter wrote:
> On Fri, 6 Nov 2009, KAMEZAWA Hiroyuki wrote:
>
>> BTW, can't we have single-thread-mode for this counter ?
>> Usual program's read-side will get much benefit.....
>
> Thanks for the measurements.
>
> A single thread mode would be good. Ideas on how to add that would be
> appreciated.
>

Maybe there are some ways....At brief thought....
==
struct usage_counter {
long rss;
long file;
}


struct mm_struct {
....
atomic_long_t rss; /* only updated when usage_counter is NULL */
atomic_long_t file; /* only updated when usage_counter is NULL */
struct usage_counter *usage; /* percpu counter used when
multi-threaded */
.....
}

And allocate mm->usage only when the first CLONE_THREAD is specified.

if (mm->usage)
access per cpu
else
atomic_long_xxx

and read operation will be

val = atomic_read(mm->rss);
if (mm->usage)
for_each_possible_cpu()....
==
Does "if" seems too costly ?

If this idea is bad, I think moving mm_counter to task_struct from
mm_struct and doing slow-sync is an idea instead of percpu.

for example

struct task_struct {
....
mm_counter_t temp_counter;
....
};

struct mm_struct {
.....
atomic_long_t rss;
atomic_long_t file;
};

And adds temp_counter's value to mm_struct at some good point....before
sleep ?
kswapd and reclaim routine can update mm_struct's counter, directly.
Readers just read mm_struct's counter.

Thanks,
-Kame









--
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/