O Taskset é para vincular um processo a uma ou mais CPUs; essencialmente especificando onde ele pode ser executado na execução inicial ou durante a execução. Se estiver usando o RHEL / CentOS em equipamentos de servidor modernos, numactl
é recomendado acima de taskset
.
Cpuset / cset é para proteção de CPU e é uma construção de framework em torno de cgroups do Linux. O Cset nunca foi popular em certas distribuições (como o RHEL) porque existem outras ferramentas disponíveis para o gerenciamento de processos.
O primeiro comando abaixo cria uma blindagem que limitaria as tarefas do sistema operacional aos núcleos da CPU 0 e 8. A segunda moveria a sessão atual da shell para a blindagem da CPU especificada, resultando em um isolamento dos processos do sistema e do usuário. p>
# cset shield --cpu 1-7,9-15 --kthread=on
# cset proc --move --pid=$$ --threads --toset=user
Existem outras coisas para verificar e sintonizar antes de percorrer o caminho dos processos de ligação às CPUs; interrupções ( irqbalance
de desativação parcial), configurações de economia de energia, agendador do sistema, elevadores de E / S, política em tempo real ( chrt
).
Veja: Configurações TCP de baixa latência no Ubuntu
Aqui está um exemplo ( convoluted ) de um wrapper de aplicativo que seleciona um core, pára o irqbalance, inicia-o e coloca blacklists no core selecionado, em seguida, 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