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

10

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

    
por mike 26.06.2009 / 19:11

2 respostas

16

taskset <affinity mask> -p <process>

i.e.

taskset 1 -p 12345

para 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 central + 4+) ou uma máscara de bits em hexadecimal (0x0000000D a 1,3,4, 0x00000001 para apenas o núcleo 1)

taskset geralmente está em um pacote chamado shedutils .

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

taskset <mask> <program> [<arg1>]...[<argN>]
    
por 26.06.2009 / 19:20
1

conjunto de tarefas (util-linux 2.13-pre7) uso: taskset [opções] [máscara | cpu-list] [pid | cmd [args ...]] definir ou obter a afinidade de um processo

-p, --pid opera no pid dado existente   -c, --cpu-list display e especifica o cpus em formato de lista   -h, --help exibe esta ajuda   -v, --versão de versão de saída de versão

O comportamento padrão é executar um novo comando:   taskset 03 sshd -b 1024 Você pode recuperar a máscara de uma tarefa existente:   taskset -p 700 Ou configure:   taskset -p 03 700 O formato de lista usa uma lista separada por vírgulas em vez de uma máscara:   taskset -pc 0,3,7-11 700 Os intervalos no formato de lista podem receber um argumento de passo:   por exemplo. 0-31: 2 é equivalente a máscara 0x55555555

você pode sempre otimizar seu servidor conforme sua necessidade

    
por 26.06.2009 / 19:44