Печать процессора, на котором разрешено запускать задачу?
Я пытаюсь напечатать процессор, на котором разрешено запускать определенную задачу.
Внутри struct task_struct (которую можно найти здесь) есть cpumask_t cpus_allowed, который, насколько я понимаю, содержит именно то, что я ищу. Это правильно?
Если да, то как мне извлечь номера процессоров, которые разрешены?
например, мой комп имеет 8 логических ядер - так что я ожидаю, что где-то внутри cpus_allowed я смогу найти эти числа (например, 0,2,5)
2 ответа
Макрос for_each_cpu
будет перебирать все процессоры, разрешенные данной маской:
// Assume `mask` is given.
int cpu;
for_each_cpu(cpu, mask)
{
printk("Allowed CPU: %d\n", cpu);
}
Оки, поэтому я нашел функцию внутри ядра, которая делает именно то, что мне нужно, в 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);
}