I am interested in multicore programming at the kernel level. I expect this affects many areas and is probably different for each architecture. What are some must read sections of the kernel? If I wanted to compare and contrast code for an Intel I7 and an ARM Cortex-A9 MPCore where would I find the differences?

  • 1
    It would be hard for you if you cannot read the linux source code... Oct 9, 2012 at 21:54
  • I'll cobble together a prototype answer. It won't affect the bounty or accepting an answer, so if you care about points, there are a lot available: the bounty, answer acceptance, and upvotes from me and others. I think I understand what I read in the source code, and perhaps that is best, stickiest way to learn what I want. However, there are many true experts on Stack Exchange and if I had one in the next cubical or office, I would ask that person the same question. You may be an expert too, and I certainly appreciate your earlier answer, but I am looking for more detail. Oct 9, 2012 at 23:50
  • Also, I hope this question is of use to the community. It seems like we have a multicore future, so learning more about them probably has value to many Stack Exchange Programmer participants. Oct 9, 2012 at 23:52

3 Answers 3


There is nothing special about Multicore Programming in Linux. You have to understand the whole kernel. Instead of asking specific questions, go ahead and download the Linux Source code from kernel.org and go through the README file and the source code structure. (Your question about intel and arm process is answered in README). Start reading the source code along with a good linux kernel book.


To understand the multicore operation support provided by processors and used by operating systems, diving into the code may not be the ideal method. It may be important to first understand what it does to get a framework on which to hang the many pieces that relate to how it does it. Specification deals with the problem domain, code deals with the solution domain, and in most systems there is a design process that does an object oriented or functional decomposition to relate the two.

One way to approach this question is to start with the theory of operation documentation for the architecture of interest, greping for multicore or multiprocessor, two concepts that have close affinity although there are some distinctions related to implementation, particularly on the hardware side. For the Intel architecture I found some interesting information from Volume 2, Part 2: MP Coherence and Synchronization page 2:507 of the Intel® Itanium® Architecture Software Developer’s Manual

From this material, some of the following code becomes much more intelligible.

Certainly there is no substitute for reading the code, but there is also no substitute for reading the vendors manuals, particularly when working with one of the most complex devices on the planet.


All programming in the kernel is multi-core programming (in the sense that it has to be capable of running on multiple cores). So there's nothing specific to that which you don't already do for general kernel coding.

Areas of kernel programming relevant to multi-core systems are locking, scheduling, and memory access (NUMA if you're on that type of machine).

Here's a few good places to start:

  • Let's assume I want to read code related to NUMA or CCNUMA. Thanks for the links, I have seen some of these, and the O'Reilly Linux Driver book they look like they will be very useful. Oct 10, 2012 at 0:03

Not the answer you're looking for? Browse other questions tagged or ask your own question.