Запустить процесс на конкретном процессоре в Linux?(нельзя использовать командную строку для указания) - PullRequest
0 голосов
/ 13 февраля 2019

Я пытаюсь запустить процесс на определенном процессоре, который я периодически указываю в моей программе на C на моей машине с Linux.Я не уверен, как указать в моей программе конкретный процессор, на котором должен выполняться процесс.

Я читал о способах сделать это в командной строке, но я не могу найти много о том, как сделать это внутри программы на самом C.

Я знаю, что task_struct в каталоге include/linux/sched.h.После проверки структуры, я вижу несколько полей, касающихся процессора.Но я читаю ( Для доступа к печатной плате процесса в C ), что доступ к информации о задаче / процессе не рекомендуется или вообще не прост.

Я также читаю о "текущем" макросе, но я не уверен, имеет ли это отношение к моей проблеме.

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

Кто-нибудь знает, как мне выполнить эту простую спецификацию?

1 Ответ

0 голосов
/ 13 февраля 2019

Эта вещь, которую вы пытаетесь сделать, называется закреплением нити.

Похоже, что вы хотите sched_setaffinity .Вы можете вызвать его из своего приложения с помощью системного вызова getpid().

   #include <sched.h>

   int sched_setaffinity(pid_t pid, size_t cpusetsize,
                         const cpu_set_t *mask);

   int sched_getaffinity(pid_t pid, size_t cpusetsize,
                         cpu_set_t *mask);
...