No linux, a chamada do sistema para definir a afinidade da CPU para um processo é sched_setaffinity
. Depois, há a taskset
ferramenta para fazer isso na linha de comando.
Para que esse programa seja executado em apenas uma CPU, acho que você gostaria de algo como
taskset -c 1 ./myprogram
(defina qualquer número de CPU como argumento para o -c
comutador.)
Isso deve estar próximo o suficiente de um sistema de processador único, desde que seus outros processos não executem muito em comparação com o que você deseja medir ou que sejam programados para outras CPUs. Se você quiser dedicar uma CPU apenas a esse processo único e impedir que outros processos sejam executados nessa CPU, também será necessário definir sua afinidade.
Isso, eu não sei como fazer corretamente. Você precisaria definir a afinidade do processador init
logo no início do processo de inicialização para garantir que ela seja herdada para todos os processos no sistema. Como solução alternativa, você pode usar taskset -c -p 0 $PID
todos os outros processos para forçá-los a executar apenas na CPU # 0.
systemd também temCPUAffinity=
de controlar a afinidade nos arquivos da unidade e há um par de perguntas sobre como definir a afinidade padrão aqui na unix.SE, mas eu não encontrou qualquer com uma solução boa.
Embora o @Kamil Maciorowski tenha comentado e respondido a outra pergunta no superuser.com , a configuração isolcpus=1
na linha de comando do kernel deve "isolar essa CPU dos algoritmos gerais de agendamento", o que é algo que você pode querer.