Fixar processo em um núcleo de processador

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

[ Hits: 10.368 ]

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

Criando pacotes RPM com o rpmbuild

MS Internet Explorer no Linux (IEs4Linux)

Centos5 com repositório yum do pbone

Utilizando o comando rsync

dag.repo para yum no rhel4

Leitura recomendada

Substituir o hotplug pelo udev no Debian

Linux ajudando na manutenção de micros

Reinstalando Linux sem fazer backup ou formatação no KDE

Ignorar determinado pacote na listagem de pacotes órfãos do deborphan

Limpando o cache do seu Linux (de forma real)

  

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