是否可以在代码中从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
答案 0 :(得分:0)
您提到的/sys
中的文件是由操作系统自动创建和维护的 - 它是虚拟文件系统而不是硬盘上的常规文件,因此您无法自行创建它们。
负责您提到的特定文件的子系统称为“CPU hotplug”,并且描述为here。显然,您需要一个支持此功能的内核,因此要么查看哪些内核可用于您的发行版(此选项可能仅在为高级服务器使用而设置的内核中)或编译您自己的内核并确保“CPU hotplug” (CONFIG_HOTPLUG_CPU = y)已启用。