我有8个CPU正在ARM的big.LITTLE架构上实现。 0-3作为小型CPU,4-7作为大型CPU。
我正在尝试使用以下代码设置正在执行的程序的CPU关联性:
// Set CPU affinity to multiple cores
void set_multiple_CPU_affinity(int *cpu_nums, size_t n, pid_t pid){
cpu_set_t mask;
CPU_ZERO(&mask);
for(int i = 0; i < n; i++)
{
CPU_SET(cpu_nums[i], &mask);
}
if (sched_setaffinity(pid, sizeof(mask), &mask) == -1) {
printf("[!] Error in sched_setaffinity");
perror("sched_setaffinity");
}
else {
print_CPU_affinity(pid); // Code to print out CPU affinity set to
}
}
int main(int argc, char** argv)
{
int controlled_CPU_affinity[] = {4, 5, 6, 7};
size_t n = sizeof(controlled_CPU_affinity) / sizeof(controlled_CPU_affinity[0]);
set_multiple_CPU_affinity(controlled_CPU_affinity, n, 0);
// More code here
}
我的问题如下:
当我继续使用系统跟踪(任务监视器)进行检查时,我看到程序的CPU亲缘关系改为改为CPU 3 无论是否设置与某些CPU的关联性。我该如何强迫 在程序完成执行之前将被设置为核心的亲和力?