Sistemas operacionais

Definindo afinidade de um processo a um determinado núcleo do CPU no Linux

CPU Affinity é uma propriedade de gerenciamento do sistema que permite direcionar para um ou mais núcleos específicos do processador um determinado processo ou programa manualmente, saiba mais sobre esse mecanismo na matéria.

Veja como atribuir um certo processo a um certo núcleo do processador

Estamos conversando esta semana com alguns amigos do grupo do Diolinux no Facebook e essa questão foi levantada, se seria possível não apenas alterar a prioridade de um determinado processo mas também atribuir um processo a um determinado núcleo do processador.

Basicamente o que você precisa ter para poder realizar uma ação destas é ter um processador multi núcleo sem restrição por marca ou modelo, pode ser tanto Intel quanto AMD, mesmo assim é bom lembrar que quanto mais núcleos o seu processador tiver mais opções você tem.

Eu vou tentar simplificar uma coisa complicada

Normalmente a função de atribuir um processo a um núcleo é atribuída ao sistema operacional, descendo de nível um pouco mais, é função do kernel e sendo mais específico ainda é um processo do Kernel chamado “Scheduler”, é ele que vai definir a afinidade de um processo e atribuí-lo a um núcleo, para entender o que acontece normalmente vamos utilizar um exemplo:

Gimp

Ao abrir o programa de edição de imagens GIMP o sistema vai se encarregar de atribuir o processo do GIMP, quando você abrir outro programa qualquer ele terá momentaneamente uma prioridade mais alta e tomara o lugar do GIMP neste núcleo, mas como o sistema gerencia os processos de um jeito inteligente ele irá jogar o GIMP para outro núcleo, mantendo assim o desempenho dos dois programas.

Caso você atribua o GIMP manualmente a um determinado núcleo, usando o mesmo exemplo acima, quando você abrir um outro programa e este exigir a atenção do núcleo onde o GIMP está é possível que o processo GIMP fique parado até que o processador “tenha tempo de falar com ele de novo”, ou seja, nesta caso não é muito vantajoso.

Por que você faria isso então?

Em primeiro lugar, por que você pode! Em segundo lugar, pode ser interessante para o gerenciamento de energia, você pode utilizar apenas um núcleo para rodar determinados programas e assim fazer a sua bateria durar mais.

No fim das contas acho que esta matéria serve mais para conhecimento do que para utilização, na maioria das vezes a melhor opção é deixar o sistema trabalhar para você.

Como funciona o taskset

Para mandarmos um processo direto para ser executado por um determinado núcleo ou núcleos nós vamos utilizar o taskset, que é um recurso que já vem junto com kernel Linux.

Monitor do Sistema Ubuntu

Se você observar o aplicativo que vem junto com a maioria dos sistemas, no caso do Ubuntu, o Monitor do Sistema onde você pode ver o nome de todos os processos, na aba “Recursos” você consegue ver quantos núcleos o seu processador tem.

Núcleos do Processador

Existem duas formas de utilizar o taskset, abrindo um programa que estava fechado ou modificando um processo que já está em execução, por exemplo:

Para direcionar um processo já aberto para um núcleo do processador no terminal fazemos assim:

taskset -pc 0 2432

 Sendo que:

Azul: É nome do comando usado para setar o processo a um determinado CPU

Laranja: É o parâmetro utilizando para modificar um programa já aberto.

Preto: É o número do núcleo do processador, 0 para o primeiro núcleo, 1 para o segundo, 2 para o terceiro e assim por diante.

Vermelho: O vermelho é o número do PID, se você observar na imagem do monitor do sistema acima onde é possível mostrar os processos na coluna de PIDS, este número utilizado no exemplo é o do GIMP.

Caso você queira abrir um programa já direcionando ele para um determinado núcleo faça assim:

taskset -c 0 gimp

Sendo que o primeiro comando é igual, o “-c” serve para direcionar o processo para um núcleo, “0” é mais uma vez o número do núcleo que você deseja mandar o programa e “gimp” no exemplo, é o programa que eu quero abrir.

Se quiser direcionar o processo para dois núcleos faça assim:

taskset -c 0,1 gimp

Observe o “0,1” isso indica quais são os núcleos que trabalharão com o GIMP (no exemplo), o mesmo pode ser feito para a primeira opção

Basicamente é isso, se você tiver alguma dúvida deixe-a nos comentários logo abaixo.

Diolinux Ofertas - Aproveite os melhores descontos em diversos produtos!