Fixar processo em um núcleo de processador

Publicado por Ricardo Brito do Nascimento em 26/09/2011

[ Hits: 10.124 ]

Blog: http://brito.blog.incolume.com.br

 


Fixar processo em um núcleo de processador



Talvez você nunca tenha precisado. Mas como fixar um processo de algum aplicativo a um determinado processador, ou núcleo de processador em um determinado hardware?

Sim, há uma luz no fim do túnel, e o Linux traz aplicativos nativos para fazê-lo.

Estou a mencionar o pacote util-linux (debian-like) ou util-linux-ng (redhat-like), são os responsáveis pela maioria dos binários de controle sistema operacional, e já são nativos nas distribuições mais conhecidas, Debian, CentOS, Fedora, Ubuntu, e por aí a fora.

Se por ventura não houver um destes dois pacotes em teu sistema operacional, proceda conforme abaixo:

Debian-like:

sudo aptitude install schedutils

Redhat-like:

sudo yum install util-linux-ng

O comando que gerencia em qual cpu rodará o processo é o taskset, que possui a seguinte sintaxe:

taskset [options] [mask | list ]
[pid | command [arg]...]; sendo:
taskset [mask] [command] [arguments]; ou
taskset [list] [command]; ou
taskset -p [pid]; ou
taskset -p [mask] [pid]


As opções(options) são:
  • -p, --pid; identificador do processo
  • -c, --cpu-list; array de cpu
  • -h, --help
  • -v, --version

As máscaras (mask) são as representações hexadecimais dos processadores físicos, por ser complexo e sujeita a falhas não irei tratá-las, mas segue uma representação de exemplo:

0x00000001 processador #0
0x00000003 processador #0 e #1
0xFFFFFFFF todos os processadores (#0 até #31)

A lista (list) é a representação da cpu por sua posição. Tomemos por base um processador Intel Xeon CPU E5310 @ 1.60GHz; cache 4096 KB; 64b. Este processador possui 8 núcleos, e a sua representação será respectivamente:

#0, #1, #2, #3, #4, #5, #6 e #7

O pid ou comando, referem-se ao aplicativo que deseja-se fixar a respectiva CPU, o pid pode ser localizado com o comando ps, ou em vez de utilizar-se do pid execute o aplicativo diretamente com o taskset.

Para fixar o processo proceda da seguinte forma:

taskset -c 0-2 -p 1507

taskset -c 0,1,2 /etc/init.d/ssh start
  • "-c 0-2" é a lista de CPU 0, 1 e 2;
  • "1507" é o pid do ssh;
  • "-c 0,12" é a lista de CPU 0, 1 e 2;
  • "/etc/init.d/ssh start" é o comando privilegiado;

E uma aplicação Zope/Plone ficaria assim:

taskset -c 0 $ZOPE_INSTANCE/bin/zopectl start

Referências:

man taskset
$ taskset --help


Atualizações desta dica em:
Outras dicas deste autor

Tabela de horário de verão 2007/8

dag.repo para yum no rhel4

Instalando o plugin Java6 da Sun no Ubuntu Linux

Convertendo formato de pacotes com alien

Instalando pacotes utilizando RPM

Leitura recomendada

OpenVZ Web Panel

Como editar arquivos ODF sem um editor com suporte a ODF

Como Habilitar Virtualização Aninhada (Nested) no KVM

Terminal bash com arquivos coloridos

Fazendo cópia de CDs via prompt

  

Comentários
[1] Comentário enviado por removido em 26/09/2011 - 02:31h

Boa dica rapaz !

Sabia ainda não dessa, valeu !

Abraço.

[2] Comentário enviado por julio_hoffimann em 27/09/2011 - 11:18h

Oi Ricardo, ótima dica!

Estou começando a procurar o que não é possível no Linux. :-P

Abraço!

[3] Comentário enviado por removido em 30/09/2011 - 19:34h

Excelente dica, favoritos!



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts