O conjunto de tarefas é para vincular um processo a uma ou mais CPUs; essencialmente especificando onde ele pode ser executado na execução inicial ou enquanto estiver sendo executado. Se estiver usando RHEL / CentOS no equipamento servidor moderna, numactl
é recomendado ao longo taskset
.
Cpuset / cset é para proteção de CPU e é uma estrutura construída em torno de cgroups do Linux. O Cset nunca foi popular em determinadas distribuições (como RHEL) porque existem outras ferramentas disponíveis para o gerenciamento de processos.
O primeiro comando abaixo cria um escudo que limitaria as tarefas do sistema operacional aos núcleos 0 e 8. da CPU. O segundo moveria a sessão atual do shell para o escudo da CPU especificado, resultando em um isolamento dos processos do sistema e do usuário.
# cset shield --cpu 1-7,9-15 --kthread=on
# cset proc --move --pid=$$ --threads --toset=user
Há outras coisas para verificar e ajustar antes de seguir o caminho dos processos de ligação às CPUs; interrupções ( irqbalance
desativação parcial), configurações de economia de energia, agendador do sistema, elevadores de E / S, política em tempo real ( chrt
).
Consulte: Configurações de TCP de baixa latência no Ubuntu
Aqui está um exemplo ( complicado ) de um wrapper de aplicativo que seleciona um núcleo, interrompe o equilíbrio, inicia e lista negra do núcleo selecionado, depois executa ./your_program com SCHED_FIFO e prioridade 99 no núcleo selecionado.
Core=5
CoreMask=`echo "16 o 2 $Core ^ p" | dc`
service irqbalance stop
until [ "`service irqbalance status`" = "irqbalance is stopped" ] ; do sleep 1 ; done
IRQBALANCE_ONESHOT=1 IRQBALANCE_BANNED_CPUS=${CoreMask} irqbalance
sleep 1
until [ "`service irqbalance status`" = "irqbalance is stopped" ] ; do sleep 1 ; done
numactl --physcpubind=${Core} --localalloc chrt -f 99 ./your_program