1

特定のタスクの実行が許可されているCPUを印刷しようとしています。

struct task_struct (ここで見つけることができます) の中にcpumask_t cpus_allowedがあり、私が理解していることから、私が探しているものが正確に含まれています。そうですか?

もしそうなら、許可されているCPUの番号を抽出するにはどうすればよいですか?

たとえば、私のコンプには8つの論理コアがあります-したがって、cpus_allowed内のどこかでそれらの数値を見つけることができると期待しています(たとえば、0,2,5)

4

3 に答える 3

1

OK、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

マクロ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 に答える