Pular para o conteúdo

Fixar processo em um núcleo de processador

Dica publicada em Linux / Avançado
Ricardo Brito do Nascimento rbn_jesus
Hits: 11.046 Categoria: Linux Subcategoria: Avançado
  • Indicar
  • Impressora
  • Denunciar

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:

Java no Ubuntu 11.10

Man pages em formatos de arquivos digitais

SSHFS - Montando sistema de arquivos remotos via SSH (Secure Shell)

dag.repo para yum no rhel4

MS Internet Explorer no Linux (IEs4Linux)

Cinnamon no Ubuntu 12.04

Como criar um pendrive UEFI no Ubuntu

Dual boot Linux Mint 17.2 x Windows 8.1 SL com UEFI descomplicado

Patchs no i3-WM e Dmenu - "Automagicamente" compilando e aplicando

Criando GIFs animadas pelo terminal GNU/Linux

#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

Entre na sua conta para comentar.