Я использую параметр ядра isolcpus, чтобы ограничить количество процессоров, которые планировщик Linux должен использовать для размещения процессов.
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 или аналогичными, на процессоре, которые не находятся в списке Isolcpus.
Однако процессы выполняются на произвольных процессорах, якобы изолированные процессоры все еще используются. Вот часть вывода 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, используются процессоры 11, 20 и 42, чего не должно быть.
Я пробовал следующие версии Ubuntu во всех случаях с результатом, описанным выше:
Есть идеи, в чем может быть проблема?
Обновить
Isolcpus действительно работает при запуске Ubuntu на виртуальной машине без NUMA (Core i7). Однако он по-прежнему не работает на сервере с NUMA (2x Xeon E3 v3 2690).