2012-02-29 3 views
1

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

можно легко установить на процессор сродством процесса/потока:

// 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 fail с Permission denied

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

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

Допустимо использовать 'setfacl (1)' для добавления правильной возможности (проверьте 'возможности (7)' для деталей, возможно 'CAP_SYS_NICE',' CAP_SYS_RESOURCE' или 'CAP_SYS_ADMIN') для исполняемого файла? – sarnold

ответ

0

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

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