Принудительная привязка программы к определенному ядру CPU (big.LITTLE) безвозвратно [C] - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть 8 процессоров, реализуемых в архитектуре ARM big.LITTLE.0-3 для маленьких процессоров и 4-7 для больших процессоров.

Я пытаюсь установить сродство к процессору исполняемой программы, используя следующий код:

// 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
}

Мой вопросследующим образом:

Когда я продолжаю проверять, используя системную трассировку (монитор задач), я вижу, что сродство ЦП программы изменяется вместо ЦП 3 независимо от настройки сродства с определенными ЦП.Как я могу принудительно установить привязку к ядру, пока программа не завершит выполнение?

...