无法避免subprocessinheritance父进程的cpu关联

我想将父进程关联到一个特定的核心。 在下面的代码中,variablescore是用户提供的参数。 接下来,我想创buildNUM_CHILDREN进程,并且每个进程都以循环方式关联到其中一个内核。 subprocess打破了循环,并做了一些更多的工作(未在代码中显示)。

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 1100显示只有一个核心(父亲所关心的核心)正在被利用。 我试图按照这里提到的解决scheme: 由subprocessinheritance的Cpu亲和力

有人可以告诉我怎么能让subprocess关系到正确的核心。

我认为你的方法需要父进程增加子进程的计数器,并且需要为所有进程执行相关代码。

尝试这个:

 /* your call args and return type may vary, just an illustration */ void doSetup() { int child_core = 0; for(int i = 0 i < NUM_CHILDREN; i++) { pid_t pID = fork(); if (pID == 0) { /* child */ break; } else { /* parent only */ child_core = (child_core+1)%6 } } /* all processes */ cpu_set_t mask; CPU_ZERO(&mask); CPU_SET(child_core,&mask); size_t len = sizeof(mask); if (sched_setaffinity(0, len, &mask) < 0) { perror("sched_setaffinity"); } else { /* child process tasks calls here */ } return; } 

在IBM DeveloperWorks的这个链接上还有更多的例子和讨论

希望这可以帮助。