CPU id是percpu变量,调用smp_processor_id()
可以取出。内核里对它的注释如下:
smp_processor_id() is safe if it's used in a preemption-off critical section, or in a thread that is bound to the current CPU.
所以除非是在绑定在CPU上的线程中使用,否则必须要先关抢占。内核已经封装了带关抢占的API:
#define get_cpu() ({ preempt_disable(); smp_processor_id(); })
#define put_cpu() preempt_enable()
典型用法:
int cpuid = get_cpu();
// Do something
() put_cpu