Além da resposta do @ Yves, você realmente pode usar o parâmetro do kernel isolcpus
.
Para desativar a quarta CPU / core (CPU 3) com Debian ou Ubuntu:
Em /etc/default/grub
adicionar isolcpus=3
a GRUB_CMDLINE_LINUX_DEFAULT
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash isolcpus=3"
Executar
sudo update-grub
Reinicialize o servidor.
isolcpus — Isolate CPUs from the kernel scheduler.
Synopsis isolcpus= cpu_number [, cpu_number ,...]
Description Remove the specified CPUs, as defined by the cpu_number values, from the general kernel SMP balancing and scheduler algroithms. The only way to move a process onto or off an "isolated" CPU is via the CPU affinity syscalls. cpu_number begins at 0, so the maximum value is 1 less than the number of CPUs on the system.
This option is the preferred way to isolate CPUs. The alternative, manually setting the CPU mask of all tasks in the system, can cause problems and suboptimal load balancer performance.
Curiosamente, o uso desses parâmetros do kernel pode reservar uma CPU para posteriormente usar a afinidade da CPU em um processo / fixar um processo em uma CPU e, portanto, garantir que não haja mais processos do usuário em execução nessa CPU .
Além disso, também pode tornar o servidor mais estável, garantindo que um processo específico com uma carga muito alta terá suas próprias CPUs para jogar. Eu vi Meru fazendo isso com seus controladores baseados em Linux antes de tomar conhecimento desta configuração.
O comando associado para designar um processo para a quarta CPU (CPU 3) é:
sudo taskset -cp PID
taskset
is used to set or retrieve the CPU affinity of a running process given its PID or to launch a new COMMAND with a given CPU affinity. CPU affinity is a scheduler property that "bonds" a process to a given set of CPUs on the system. The Linux scheduler will honor the given CPU affinity and the process will not run on any other CPUs. Note that the Linux scheduler also supports natural CPU affinity: the scheduler attempts to keep processes on the same CPU as long as practical for performance reasons. Therefore, forcing a specific CPU affinity is useful only in certain applications.
SUMMARY
Existem várias técnicas aplicadas a esta questão:
set isolcpus = 4
no grub e reboot podem desativar a 5ª CPU / CPU 4 permanentemente para processos de terra do usuário;
echo 0 > /sys/devices/system/cpu/cpu4/online
desativa a 5ª CPU / CPU 4, que continuará trabalhando nos processos que já foram atribuídos a ela, mas nenhum novo processo será atribuído à CPU 4;
taskset -c 3 ./MyShell.sh
forçará MyShell.sh
a ser atribuído à 4ª CPU / CPU 3, enquanto a 4ª CPU ainda pode aceitar outros processos de usuário se o isolcpus não o estiver excluindo de fazê-lo.
PS. Curiosamente, meu melhor exemplo de usar o isolcpus
/ taskset
no campo, era um frontend SSL para um site muito ocupado , que ficava instável a cada duas semanas, onde Ansible / ssh
não me deixaria mais remotamente.
Apliquei as técnicas discutidas acima e continuei trabalhando de uma forma muito estável desde então.