* PER-CPU data
@ 2012-03-30 6:00 Rajasekhar Pulluru
2012-03-30 6:35 ` Dave Hylands
0 siblings, 1 reply; 5+ messages in thread
From: Rajasekhar Pulluru @ 2012-03-30 6:00 UTC (permalink / raw)
To: kernelnewbies
Hi,
I would like to know how per-cpu data are stored internally?
And how are they protected from other cores?
Thanks & Regards,
Rajasekhar
^ permalink raw reply [flat|nested] 5+ messages in thread
* PER-CPU data
2012-03-30 6:00 PER-CPU data Rajasekhar Pulluru
@ 2012-03-30 6:35 ` Dave Hylands
2012-03-30 6:54 ` Srivatsa S. Bhat
2012-03-30 6:54 ` Srivatsa S. Bhat
0 siblings, 2 replies; 5+ messages in thread
From: Dave Hylands @ 2012-03-30 6:35 UTC (permalink / raw)
To: kernelnewbies
Hi Rajasekhar,
On Thu, Mar 29, 2012 at 11:00 PM, Rajasekhar Pulluru
<pullururajasekhar@gmail.com> wrote:
> Hi,
>
> I would like to know how per-cpu data are stored internally?
> And how are they protected from other cores?
I believe that they're just kmalloc'd like other kernel data. At the
kernel level there is no protection, just like all the rest of the
memory accessible to the kernel.
http://lxr.linux.no/#linux+v3.3/include/asm-generic/percpu.h#L8
http://lxr.linux.no/#linux+v3.3/mm/percpu.c
When you declare a per-cpu variable, it goes into a special section,
and what you're really doing is figuring out the offset within a
per_cpu region of memory.
--
Dave Hylands
Shuswap, BC, Canada
http://www.davehylands.com
^ permalink raw reply [flat|nested] 5+ messages in thread
* PER-CPU data
2012-03-30 6:35 ` Dave Hylands
@ 2012-03-30 6:54 ` Srivatsa S. Bhat
2012-04-04 5:10 ` Rajasekhar Pulluru
2012-03-30 6:54 ` Srivatsa S. Bhat
1 sibling, 1 reply; 5+ messages in thread
From: Srivatsa S. Bhat @ 2012-03-30 6:54 UTC (permalink / raw)
To: kernelnewbies
On 03/30/2012 12:05 PM, Dave Hylands wrote:
> Hi Rajasekhar,
>
> On Thu, Mar 29, 2012 at 11:00 PM, Rajasekhar Pulluru
> <pullururajasekhar@gmail.com> wrote:
>> Hi,
>>
>> I would like to know how per-cpu data are stored internally?
>> And how are they protected from other cores?
>
To put it in very simplistic terms, per-cpu data is nothing but having
NR_CPUS copies of the data, like an array, something like:
int data[NR_CPUS];
And accessing this per-cpu data will essentially boil down to finding
out the id of the processor you are running on, and indexing this array
using that, something like:
int val, cpu;
cpu = smp_processor_id();
val = data[cpu];
So you automatically read/write the copy that belongs to your processor.
That's it. However, this is an over-simplified view of per-cpu data,
but you get the general idea...
> I believe that they're just kmalloc'd like other kernel data. At the
> kernel level there is no protection, just like all the rest of the
> memory accessible to the kernel.
> http://lxr.linux.no/#linux+v3.3/include/asm-generic/percpu.h#L8
> http://lxr.linux.no/#linux+v3.3/mm/percpu.c
>
> When you declare a per-cpu variable, it goes into a special section,
> and what you're really doing is figuring out the offset within a
> per_cpu region of memory.
>
Regards,
Srivatsa S. Bhat
^ permalink raw reply [flat|nested] 5+ messages in thread
* PER-CPU data
2012-03-30 6:35 ` Dave Hylands
2012-03-30 6:54 ` Srivatsa S. Bhat
@ 2012-03-30 6:54 ` Srivatsa S. Bhat
1 sibling, 0 replies; 5+ messages in thread
From: Srivatsa S. Bhat @ 2012-03-30 6:54 UTC (permalink / raw)
To: kernelnewbies
On 03/30/2012 12:05 PM, Dave Hylands wrote:
> Hi Rajasekhar,
>
> On Thu, Mar 29, 2012 at 11:00 PM, Rajasekhar Pulluru
> <pullururajasekhar@gmail.com> wrote:
>> Hi,
>>
>> I would like to know how per-cpu data are stored internally?
>> And how are they protected from other cores?
>
To put it in very simplistic terms, per-cpu data is nothing but having
NR_CPUS copies of the data, like an array, something like:
int data[NR_CPUS];
And accessing this per-cpu data will essentially boil down to finding
out the id of the processor you are running on, and indexing this array
using that, something like:
int val, cpu;
cpu = smp_processor_id();
val = data[cpu];
So you automatically read/write the copy that belongs to your processor.
That's it. However, this is an over-simplified view of per-cpu data,
but you get the general idea...
> I believe that they're just kmalloc'd like other kernel data. At the
> kernel level there is no protection, just like all the rest of the
> memory accessible to the kernel.
> http://lxr.linux.no/#linux+v3.3/include/asm-generic/percpu.h#L8
> http://lxr.linux.no/#linux+v3.3/mm/percpu.c
>
> When you declare a per-cpu variable, it goes into a special section,
> and what you're really doing is figuring out the offset within a
> per_cpu region of memory.
>
Regards,
Srivatsa S. Bhat
^ permalink raw reply [flat|nested] 5+ messages in thread
* PER-CPU data
2012-03-30 6:54 ` Srivatsa S. Bhat
@ 2012-04-04 5:10 ` Rajasekhar Pulluru
0 siblings, 0 replies; 5+ messages in thread
From: Rajasekhar Pulluru @ 2012-04-04 5:10 UTC (permalink / raw)
To: kernelnewbies
Hi Srivatsa,
Thanks for the response. I have used per-CPU vars and I know about how
to creating/using per-CPU vars: DECLARE_PER_CPU(type, name) for
creating per-cpu at compile time and use alloc_percpu(type) for
creating them dynamically.
I intended to ask how they are stored internally (.percpu section) and
its protection mechanism if it has any.
Thanks & Regards,
Rajasekhar
On Fri, Mar 30, 2012 at 12:24 PM, Srivatsa S. Bhat
<srivatsa.bhat@linux.vnet.ibm.com> wrote:
> On 03/30/2012 12:05 PM, Dave Hylands wrote:
>
>> Hi Rajasekhar,
>>
>> On Thu, Mar 29, 2012 at 11:00 PM, Rajasekhar Pulluru
>> <pullururajasekhar@gmail.com> wrote:
>>> Hi,
>>>
>>> I would like to know how per-cpu data are stored internally?
>>> And how are they protected from other cores?
>>
>
>
> To put it in very simplistic terms, per-cpu data is nothing but having
> NR_CPUS copies of the data, like an array, something like:
>
> int data[NR_CPUS];
>
> And accessing this per-cpu data will essentially boil down to finding
> out the id of the processor you are running on, and indexing this array
> using that, something like:
>
> int val, cpu;
>
> cpu = smp_processor_id();
> val = data[cpu];
>
> So you automatically read/write the copy that belongs to your processor.
> That's it. However, this is an over-simplified view of per-cpu data,
> but you get the general idea...
>
>> I believe that they're just kmalloc'd like other kernel data. At the
>> kernel level there is no protection, just like all the rest of the
>> memory accessible to the kernel.
>> http://lxr.linux.no/#linux+v3.3/include/asm-generic/percpu.h#L8
>> http://lxr.linux.no/#linux+v3.3/mm/percpu.c
>>
>> When you declare a per-cpu variable, it goes into a special section,
>> and what you're really doing is figuring out the offset within a
>> per_cpu region of memory.
>>
>
>
> Regards,
> Srivatsa S. Bhat
>
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2012-04-04 5:10 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-03-30 6:00 PER-CPU data Rajasekhar Pulluru
2012-03-30 6:35 ` Dave Hylands
2012-03-30 6:54 ` Srivatsa S. Bhat
2012-04-04 5:10 ` Rajasekhar Pulluru
2012-03-30 6:54 ` Srivatsa S. Bhat
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).