我正在尝试打印允许在其上运行特定任务的CPU 。
在struct task_struct(可以在此处找到)内部有cpumask_t cpus_allowed,据我所知,它包含我正在寻找的内容。那正确吗 ?
如果是这样,我如何提取允许的 CPU 编号?
例如,我的 comp 有 8 个逻辑核心 - 所以我希望在cpus_allowed的某个地方我可以找到这些数字(例如 - 0、2、5)
我正在尝试打印允许在其上运行特定任务的CPU 。
在struct task_struct(可以在此处找到)内部有cpumask_t cpus_allowed,据我所知,它包含我正在寻找的内容。那正确吗 ?
如果是这样,我如何提取允许的 CPU 编号?
例如,我的 comp 有 8 个逻辑核心 - 所以我希望在cpus_allowed的某个地方我可以找到这些数字(例如 - 0、2、5)
好的,我在内核中找到了一个函数,它完全符合我在cpumask.h cpumask_scnprintf中所需要的功能:
/**
* cpumask_scnprintf - print a cpumask into a string as comma-separated hex
* @buf: the buffer to sprintf into
* @len: the length of the buffer
* @srcp: the cpumask to print
*
* If len is zero, returns zero. Otherwise returns the length of the
* (nul-terminated) @buf string.
*/
static inline int cpumask_scnprintf(char *buf, int len,
const struct cpumask *srcp)
{
return bitmap_scnprintf(buf, len, cpumask_bits(srcp), nr_cpumask_bits);
}
宏for_each_cpu
将遍历给定掩码允许的所有 CPU:
// Assume `mask` is given.
int cpu;
for_each_cpu(cpu, mask)
{
printk("Allowed CPU: %d\n", cpu);
}