À medida que os processadores multi-core se tornam cada vez mais comuns em servidores, laptops ou desktops e até mesmo em dispositivos móveis, cada vez mais aplicativos são otimizados para esse tipo de sistema. No entanto, às vezes pode ser útil vincular um programa ou processo a um ou mais kernels específicos. Vamos ver como fazer ...
Instalar conjunto de tarefas
A ferramenta de conjunto de tarefas faz parte do pacote "util-linux". A maioria das distribuições do Linux vem com o pacote pré-instalado por padrão. Caso o conjunto de tarefas não esteja disponível, é possível instalá-lo da seguinte forma:
En Debian / Ubuntu e derivados:
sudo apt-get install util-linux
En Fedora e derivados:
sudo yum instalar util-linux
Ver a afinidade de CPU de um processo em execução
Para recuperar informações de afinidade de CPU para um processo, use o seguinte formato:
conjunto de tarefas -p PID
Por exemplo, para verificar a afinidade da CPU de um processo com PID 2915:
conjunto de tarefas -p 2915
Retorna o resultado:
máscara de afinidade atual do pid 2915: ff
O conjunto de tarefas retorna a afinidade da CPU atual em um formato de bitmask hexadecimal. No exemplo, a afinidade (representada em uma máscara de bits hexadecimal) corresponde a "11111111" em formato binário, o que significa que o processo pode ser executado em qualquer um dos oito núcleos de CPU diferentes (0 a 7).
O bit mais baixo em uma máscara de bit hexadecimal corresponde ao ID do núcleo 0, o segundo bit mais baixo da direita para o ID do núcleo 1, o terceiro bit mais baixo para o ID do núcleo 2 e assim por diante. Portanto, por exemplo, uma afinidade de CPU "0x11" representa os núcleos ID 0 e 4.
O conjunto de tarefas pode exibir a afinidade da CPU como uma lista de processadores em vez de uma máscara de bits, o que é muito mais fácil de ler. Para usar este formato, você deve executar o conjunto de tarefas com a opção "-c". Por exemplo:
conjunto de tarefas -cp 2915
Retorna o resultado:
lista de afinidade atual do pid 2915: 0-7
Força um processo a rodar em um kernel específico
Usando o conjunto de tarefas, um processo em execução pode ser atribuído a um núcleo de CPU específico. Para fazer isso, você deve usar o seguinte formato:
taskset -p COREMASK PID taskset -cp CORE-LIST PID
Por exemplo, para atribuir um processo aos núcleos 0 e 4, você executaria:
conjunto de tarefas -p 0x11 9030
O que o resultado retorna:
Máscara de afinidade atual do pid 9030: ff pid 9030's nova máscara de afinidade: 11
De forma equivalente, você pode executar:
conjunto de tarefas -cp 0,4 9030
Com a opção "-c", você pode especificar uma lista de IDs de kernel numéricos, separados por vírgulas, ou pode até incluir intervalos (por exemplo, 0,2,5,6-10).
Inicie um programa usando um kernel específico
O conjunto de tarefas também permite lançar um novo programa usando vários kernels específicos. Para fazer isso, ele deve ser usado no seguinte formato:
Conjunto de tarefas COREMASK EXECUTÁVEL
Por exemplo, para iniciar o programa VLC na CPU core ID 0, use o seguinte comando:
conjunto de tarefas -c 0 vlc
Dedique um kernel apenas a um programa particular
Embora o conjunto de tarefas permita atribuir um programa a um kernel específico, isso não significa que não haja outros programas ou processos que façam uso dele. Para evitar isso e dedicar um kernel inteiro a um programa particular, você deve usar o parâmetro de kernel "isolcpus", que permite reservar um kernel durante a inicialização.
Para fazer isso, você deve adicionar o parâmetro "isolcpus =" na linha do kernel no GRUB. Por exemplo, para reservar os núcleos de ID 0 e 1, adicione "isolcpus = 0,1".
Feito isso, o agendador do Linux não atribuirá nenhum processo regular ao kernel reservado, a menos que seja especificamente atribuído com o conjunto de tarefas.
fonte: xmodule & páginas do manual do conjunto de tarefas.
Bom post :).
Boa postagem, mas sem o espírito de trolling ...
Qual é a utilidade de atribuir um programa a um kernel específico ??
Quero dizer; Se você tem um computador com 12 núcleos, o lógico seria um determinado programa ser executado usando esses 12 núcleos e não limitá-lo, pois assim obteremos o melhor desempenho possível.
O que vejo é útil é a opção que nos permite não atribuir nenhum processo a um determinado kernel, deixando seu uso exclusivo para um determinado programa.
Faz sentido o que você mencionou, ao deixar o planejador usar todos os núcleos, os recursos ficam mais equilibrados, mas às vezes é necessário um núcleo de dedicação exclusiva, como rodar uma máquina virtual com uma tarefa específica, o desempenho dessa máquina melhora substancialmente quando não há mais processos em execução no kernel atribuído.
atte
jvk85321
Exato! Obrigado, jvk! 🙂
Mas quando você está criando a máquina virtual, ele pede para você escolher a quantidade de CPU atribuída ... de que adianta escolher esse valor se no final o sistema operacional omite isso e execute em todas as CPUs ... Pois aí o exemplo não é dos melhores ...
Para fazer o Flash funcionar no Windows 8.1 x64, AMD e Firefox, foi recomendado escolher que o Flash rodasse apenas em uma CPU, porém não funcionou para mim. Também seria conveniente se eles o adicionassem (se já não estiver lá) aos gerenciadores de tarefas do DE diferente, ou pelo menos do KDE.
ah, não tinha entendido o fim do comentário ... Mas para isso, todos os processos da CPU rodando a máquina virtual teriam que ser banidos. Ou atribua-os a outras CPUs. Comentário interessante e muito bom.
Usado para criar supercomputadores geniais
Está entendido.
Obrigado pelo esclarecimento.
Ao reservar um kernel para um programa específico, o que acontece com os threads de execução? No caso de você fazer isso com um kernel com HT, ele reserva 2 threads de execução para o programa.
Este comando pode não parecer muito útil em computadores com vários núcleos, mas para aqueles de nós que possuem um Dual Core, é bastante prático. Por exemplo, eu tenho um jogo que quando eu o abro usa todos os núcleos do processador e se eu também tenho outros programas que precisam da CPU (como alguns buscam com grep em arquivos grandes) então o sistema fica lento. A solução é tão simples quanto limitar o jogo para usar apenas um dos núcleos.
Eu também concordo se, eles realmente deveriam integrar isso aos gerenciadores de tarefas (aqueles que eu tentei até agora no Gentoo, eu acho que nenhum tem), especialmente quando no Windows é algo que existe desde o XP (clique com o botão direito em um processo> "Definir afinidade ...") mas há algum tempo encontrei o seguinte script que transforma o conjunto de tarefas em algo um pouco mais intuitivo (publicado originalmente clique aqui e até mesmo alguns casos em que é necessário gerenciar o uso dos núcleos são mostrados):
#!/bin/bash
read -p 'Ingrese el ID del proceso en cuestión: ' ID
read -p 'Ingrese la lista de procesadores separados por comas: ' P
echo 'Su ID es '$ID' y los procesadores son '$P
sudo taskset -p -c $P $ID
read -p 'Listo, presione enter para finalizar' P
Com algumas modificações, pode-se indicar o nome do processo no lugar do PID (ou que aceita ambos e que decide quando aquele parâmetro é uma coisa ou outra).
não há interface gráfica para o conjunto de tarefas para novos usuários gostariam