Fixando processo/programa por CPU(s)

Fixando processo/programa por CPU(s)

Fixando um programa para um ou mais núcleos de CPU específicos, pode trazer varios benefícios. Por exemplo, Quando um programa/processo Cpu-bound(carga de trabalho intesivo da cpu), atribuindo um programa para um ou mais núcleos, reduziria erros de cache da CPU.

Outro exemplo é reduzir o consumo de processamento de um programa/processo que tem implementado parelelismo, que dependendo do caso, poderá consumir todos os núcleos.
Neste tutorial, vou descrever como executar um programa ou processo em núcleo(s) de CPU específico(s) no linux.
Para fixar um programa/processo, vou utilizar o taskset, um programa que faz parte do pacote util-linux. No processo de demonstração, vamos assumir que o pid do processo é 17507.
Instalação
Recuperar as informações de afinidade de CPU de um processo
Sintaxe: taskset -p <pid>  # retorno é em hexadecimal.
Neste exemplo, o retorno da afinidade corresponde a 1111 em formato binário, o que significa que o processo pode ser executado em qualquer um dos quatro diferentes núcleos [0-3] (meu pc é um quad-core)
Outra forma de receber o retorno da afinidade de forma mais amigável:
Fixando um processo em um CPU(s) específico(s)
Usando o taskset, você pode fixar um processo em um ou mais CPUS.
Lançando e fixando um processo em um CPU(s) específico(s)
Neste exemplo, irei demonstrar a utilização do taskset fixando o konsole no núcleo 0:
Vamos verificar a afinidade, vamos assumir que o pid do processo lançado seja 17507:
Forma mais amigável:
O taskset permite que um programa específico seja fixado a um ou mais CPUS, isso nao significa que nao exista outros processos que estejam ou serão agendadas nessas CPUS. Se deseja reservar CPUs para um programa em particular,
você pode usar um parâmetro do kernel “isolcpus = <cpu_id>” que lhe permite reservar o núcleo da CPU durante a inicialização. O sistema irá iniciar sem agendar tarefas nos CPUS que estão isolados. Agora sim você pode usar o taskset para atribuir de forma segura os núcleos que foram definidos no “isolcpus“.Que tal reservar alguma(s) CPU(s) na sua plaquinha?
Nos exemplos abaixo, vou reservar o núcleo 0 e 1. Lembre-se isto é um exemplo, tenha cuidado quando for alterar as opções de boot na placa.

– Raspberry PI 2:
Complemente no /boot/cmdline.txt com isolcpus=numero_da_cpu[,numero_da_cpu…] segue um exemplo:

– Odroid-C1:
Complemente no /media/boot/boot.ini com isolcpus=numero_da_cpu[,numero_da_cpu…] na linha que começa com setenv bootargs, segue um exemplo:

Leonardo Lontra
Programador Python/Cython/ShellScript/C/C++/QT/JS e Administrador de Redes.
Apaixonado por visão computacional, em específico Machine Learning/BackgroundSubtractor/Face Recognition e Object Tracking.
Atualmente desenvolvendo trabalhos voltados à contagem de pessoas. Se diverte utilizando suas raspberry’s e odroid’s para detectar rostos e sinalizar quando alguém está prestes a bater à porta para encher o saco.

Related Post