A hands-on session with our sample per-CPU demo kernel module will definitely help in using this powerful feature (code here: ch13/2_percpu). Here, we define and use two per-CPU variables:
- A statically allocated and initialized per-CPU integer
- A dynamically allocated per-CPU data structure
As an interesting way to help demo per-CPU variables, let's do this: we shall arrange for our demo kernel module to spawn off a couple of kernel threads. Let's call them thrd_0 and thrd_1. Furthermore, once created, we shall make use of the CPU mask (and API) to affine our thrd_0 kernel thread on CPU 0 and our thrd_1 kernel thread on CPU 1 (hence, they will be scheduled to run on only these cores; of course, we must test this code on a VM with at least two CPU cores).
The following code snippets illustrate how we define and use the per-CPU variables (we leave out the code that creates the kernel...