【发布时间】:2014-06-08 18:38:59
【问题描述】:
我想将父进程关联到特定的核心。在下面的代码中,变量 core 是用户提供的参数。之后,我想创建 NUM_CHILDREN 进程,并且每个进程都以循环方式关联到其中一个核心。子进程跳出循环并做更多工作(代码中未显示)。
int child_core = 0;
CPU_ZERO(&mask);
CPU_SET(core,&mask);
if (sched_setaffinity(0, len, &mask) < 0)
{
perror("sched_setaffinity");
}
for(int i = 0 i < NUM_CHILDREN; i++)
{
pID = fork();
if (pID == 0)
{
/* child */
CPU_ZERO(&mask);
CPU_SET(child_core,&mask);
len = sizeof(mask);
if (sched_setaffinity(0, len, &mask) < 0)
{
perror("sched_setaffinity");
}
break;
}
/*parent does some work*/
child_core = (child_core+1)%6
}
我面临的问题是运行 sar -P ALL 1 100 表明只有一个核心(与父级关联的核心)正在使用。我正在尝试遵循此处提到的解决方案:Cpu affinity inherited by child process
谁能告诉我如何让子进程关联到正确的核心。
【问题讨论】:
标签: c linux parallel-processing fork affinity