在没有sudo的代码中隔离一个cpu?

时间:2012-02-29 12:06:52

标签: linux real-time scheduler

是否可以在代码中从linux调度程序中隔离cpu,并授予用户执行此操作的权限,以便他不必是root用户?

我可以轻松设置进程/线程的cpu亲和性:

// 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);

我现在想将此cpu与系统中的所有其他进程隔离开来。

我知道我可以使用金枪鱼在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

最后,有没有办法授予特定用户权限来隔离cpu(很可能​​会增加/etc/security/limits.conf中的某些限制)?

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

1 个答案:

答案 0 :(得分:0)

您提到的/sys中的文件是由操作系统自动创建和维护的 - 它是虚拟文件系统而不是硬盘上的常规文件,因此您无法自行创建它们。

负责您提到的特定文件的子系统称为“CPU hotplug”,并且描述为here。显然,您需要一个支持此功能的内核,因此要么查看哪些内核可用于您的发行版(此选项可能仅在为高级服务器使用而设置的内核中)或编译您自己的内核并确保“CPU hotplug” (CONFIG_HOTPLUG_CPU = y)已启用。