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:
Nenhum comentário:
Postar um comentário