Eu uso o parâmetro do kernel do isolcpus para restringir as CPUs que o planejador do Linux deve usar para colocar processos.
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
Pelo que eu li, isso deve colocar todos os processos onde não especificados explicitamente pelo cpuset ou similares nos processadores que não estão na lista do isolcpus.
No entanto, os processos executados em CPUs arbitrárias, as CPUs supostamente isoladas ainda são usadas. Aqui está uma parte se a saída de 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
Como você pode ver na coluna PSR, as CPUs 11,20 e 42 são usadas, o que não deve ser o caso.
Já experimentei as seguintes versões do Ubuntu com o resultado descrito acima em todos os casos:
Alguma idéia do que pode ser o problema?
Atualizar
O Isolcpus funciona ao executar o Ubuntu em uma VM sem o NUMA (Core i7). No entanto, ainda não funciona em um servidor com NUMA (2x Xeon E3 v3 2690).