* 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: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
* 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
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).