linux内核,如何循环遍历所有cpu?

Gar*_*att 1 c kernel linux-kernel

我需要遍历每个cpu,这样我就可以从中获取一个per_cpu值,但似乎没有for_each_cpu(i)宏.linux内核版本是2.6.26.5

我想做的事情如下:

for_each_cpu(i)
    per_cpu(vm_event_states, i)
Run Code Online (Sandbox Code Playgroud)

caf*_*caf 7

回到2.6.26内核,for_each_cpu()被调用了for_each_cpu_mask().它定义在cpumask.h,并带有两个参数 - 迭代器和掩码.掩码是一个cpumask_t左值,它定义了要迭代的CPU集.

有三个辅助宏只需要一个迭代器 - 你可能想要使用其中一个:

for_each_possible_cpu(cpu)
for_each_present_cpu(cpu)
for_each_online_cpu(cpu)
Run Code Online (Sandbox Code Playgroud)

for_each_possible_cpu()迭代内核启动时可能存在的所有CPU; for_each_present_cpu()迭代当前存在的所有CPU(在不支持CPU热插拔的系统上,这两个是相同的); 并for_each_online_cpu()迭代当前启用且可供调度程序使用的所有CPU.

请注意,for_each_online_cpu()应在get_online_cpus()/ put_online_cpus()section中使用,以防止在迭代时更改联机CPU映射.

这很可能for_each_possible_cpu()就是你想要的.