É possível limitar um processo Linux para que ele possa executar apenas em um núcleo específico em uma máquina específica?

10

Digamos que eu tenho uma caixa quad-core e quatro processos idênticos, cada um com dez threads. É possível, no Linux, dizer que o Processo A só pode ser executado na CPU 0, o Processo B só é executado na CPU 1, etc?

Mike
fonte

Respostas:

16
taskset <affinity mask> -p <process>

ie

taskset 1 -p 12345

definir o processo 12345 para usar apenas processador / núcleo 1

A máscara de bits pode ser uma lista (ou seja, 1,3,4 para usar os núcleos 1 3 e 4 de um sistema com 4 ou mais núcleos) ou uma máscara de bit em hexadecimal (0x0000000D a 1,3,4, 0x00000001 apenas para o núcleo 1)

taskseté geralmente em um pacote chamado shedutils.

Edit: quase esqueci ... Se você deseja definir a afinidade de um novo comando em vez de alterá-lo para um processo existente, use:

taskset <mask> <program> [<arg1>]...[<argN>]
David Spillett
fonte
1

uso do conjunto de tarefas (util-linux 2.13-pre7): conjunto de tarefas [opções] [máscara | lista de CPUs] [pid | cmd [args ...]] define ou obtém a afinidade de um processo

-p, --pid opera na exibição de pid -c, --cpu-list existente e especifica cpus no formato de lista -h, --help exibe essa ajuda -v, - informações sobre a versão de saída da versão

O comportamento padrão é executar um novo comando: conjunto de tarefas 03 sshd -b 1024 Você pode recuperar a máscara de uma tarefa existente: taskset -p 700 Ou configurá-lo: taskset -p 03 700 O formato da lista usa uma lista separada por vírgula em vez de um mask: taskset -pc 0,3,7-11 700 As faixas no formato de lista podem ter um argumento de avanço: por exemplo, 0-31: 2 é equivalente a mascarar 0x55555555

você sempre pode otimizar seu servidor conforme sua necessidade

Rajat
fonte