изолировать процессор в коде без sudo? - PullRequest
1 голос
/ 29 февраля 2012

Можно ли изолировать процессор от планировщика linux в коде и предоставить пользователю права на это, чтобы он не был пользователем root?

Я могу легко установить привязку процессора к процессу / потоку:

// set thread affinity to core 1
cpu_set_t cpu_set;
CPU_ZERO(&cpu_set);
CPU_SET(1, &cpu_set);
sched_setaffinity(tid, sizeof(cpu_set_t), &cpu_set);

Теперь я бы хотел изолировать этот процессор от всех других процессов в системе.

Я знаю, что могу сделать это на Redhat, используя тунца:

sudo tuna --cpus 1 --isolate
sudo tuna --cpus 3 --isolate

Я где-то читал, что можно выделить следующим образом:

sudo echo 0 > /sys/devices/system/cpu/cpu1/online 
sudo echo 1 > /sys/devices/system/cpu/cpu1/isolated
sudo echo 1 > /sys/devices/system/cpu/cpu1/online 

Однако попытки создать файл isolated не удаются с Permission denied

Наконец, есть ли способ предоставить определенному пользователю права на выделение процессора (так же, как можно увеличить определенные пределы в /etc/security/limits.conf)?

username              hard       memlock         unlimited
username              soft       memlock         unlimited
username              -          rtprio          99

1 Ответ

0 голосов
/ 29 февраля 2012

Файлы в /sys, которые вы упоминаете, создаются и поддерживаются автоматически операционной системой - это виртуальная файловая система, а не обычные файлы на жестком диске, поэтому вы не можете создавать их самостоятельно.

Подсистема, отвечающая за конкретные файлы, которые вы упоминаете, называется «горячим подключением процессора» и описана здесь . Очевидно, вам нужно ядро, которое поддерживает эту функциональность, поэтому либо посмотрите, какие ядра доступны для вашего дистрибутива (этот параметр, вероятно, будет только в ядрах, настроенных для расширенного использования сервера), либо скомпилируйте свое собственное и убедитесь, что «CPU hotplug» (CONFIG_HOTPLUG_CPU = y) включен.

...