1

我正在尝试打印允许在其上运行特定任务的CPU 。

struct task_struct(可以在此处找到)内部有cpumask_t cpus_allowed,据我所知,它包含我正在寻找的内容。那正确吗 ?

如果是这样,我如何提取允许的 CPU 编号?

例如,我的 comp 有 8 个逻辑核心 - 所以我希望在cpus_allowed的某个地方我可以找到这些数字(例如 - 0、2、5)

4

3 回答 3

1

好的,我在内核中找到了一个函数,它完全符合我在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);
}
于 2016-01-14T22:53:46.337 回答
1

使用cpumask.hcpumask_pr_args()中定义的函数。

用法:

 printk("%*pbl\n", cpumask_pr_args(mask));

有关占位符的信息,请参见此处。%*pbl

于 2019-05-27T13:42:59.587 回答
1

for_each_cpu将遍历给定掩码允许的所有 CPU:

// Assume `mask` is given.
int cpu;
for_each_cpu(cpu, mask)
{
    printk("Allowed CPU: %d\n", cpu);
}
于 2016-01-14T21:53:56.787 回答