Fixar processo em um núcleo de processador

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

[ Hits: 10.299 ]

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

Gerenciando histórico de comandos no GNU/Linux

MS Internet Explorer no Linux (IEs4Linux)

Instalando pacotes utilizando RPM

Atualização do horário de verão automatizada

Man pages em formatos de arquivos digitais

Leitura recomendada

Mikrotik - bug encontrado nas versões 3.4, 3.5, 3.6 e 3.7

Como atualizar o Java (JDK) no Slackware 14.2: superando o erro no sbopkg

Bloqueando alteração de papel de parede

Instalando o htop no Oracle Linux Server 7 a partir do código fonte

Logando make, compilações e atividades em geral

  

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