我使用isolcpus内核参数来限制Linux调度程序用于放置进程的CPU。
cat /proc/cmdline BOOT_IMAGE=/boot/vmlinuz-4.2.0-18-generic.efi.signed root=UUID=78e5b46f-6c1c-4e8f-b921-8c091c98209b ro isolcpus=4−23,28−47
从我所读到的,这应该放置所有进程没有显式指定的cpuset或类似的cpus不在isolcpus列表中。
但是,这些进程在任意CPU上运行,所谓的隔离CPU仍然被使用。 这里是一个部分,如果输出的ps -F ax:
UID PID PPID C SZ RSS PSR STIME TTY STAT TIME CMD message+ 1185 1 0 10712 3804 11 20:36 ? Ss 0:00 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation root 1208 1 0 4411 5364 20 20:36 ? S<L 0:00 /usr/bin/atop -a -w /var/log/atop/atop_20151114 600 root 1214 1 0 7135 3008 2 20:36 ? Ss 0:00 /lib/systemd/systemd-logind daemon 1221 1 0 4795 1912 42 20:36 ? Ss 0:00 /usr/sbin/atd -f
正如你可以在PSR栏中看到的那样,使用CPU 11,20和42,而不是这种情况。
在所有情况下,我已经使用上述结果尝试了以下Ubuntu版本:
任何想法可能是什么问题?
更新
在没有NUMA(Core i7)的虚拟机中运行Ubuntu时,Isolcpus可以正常工作。 但是,它仍然不能在具有NUMA(2x Xeon E3 v3 2690)的服务器上运行。