在Linux内核中使用“sched_setaffinity()”

问题描述 投票:0回答:1

关于sched_setaffinity的很多帖子,但几乎没有在Kernel Space中使用它。

我在内核4.14.79。

我尝试使用User Space方法以下列形式调用sched_setaffinity

cpu_set_t my_set;        
CPU_ZERO(&my_set);       
CPU_SET(7, &my_set);     
sched_setaffinity(0, sizeof(cpu_set_t), &my_set);

但是在尝试编译内核时,我遇到了错误并意识到这种形式在内核空间中不起作用。

我看到sched_affinitysched.h中定义并具有以下形式:

extern long sched_setaffinity(pid_t pid, const struct cpumask *new_mask);

但我对如何正确创建具有正确CPU编号的new_mask参数感到困惑。关于它的文档不是很有帮助。

有人可以展示一个如何在内核空间中使用此函数将进程设置为特定CPU的示例吗?

linux kernel system-calls
1个回答
1
投票

在挖掘内核文件后寻找cpumask出现的地方,我自己找到了答案。

您可以使用以下两个功能:

cpumask_clear(struct cpumask *dstp) //clear the mask you are about to use

cpumask_set_cpu(unsigned int cpu, struct cpumask *dstp) //set the cpu number

所以这就是我用过的东西:

struct cpumask mask;  
cpumask_clear(&mask); 
cpumask_set_cpu(cpuNumber, &mask); 
sched_setaffinity(pid, &mask); 
© www.soinside.com 2019 - 2024. All rights reserved.