No linux, a chamada do sistema para definir a afinidade da CPU para um processo é sched_setaffinity
. Depois, há a taskset
tool para fazer isso na linha de comando.
Para que esse único programa seja executado em apenas uma CPU, eu acho que você gostaria de algo como
taskset -c 1 ./myprogram
(defina qualquer número de CPU como argumento para a opção -c
).
Isso deve estar perto o suficiente de um sistema de processador único, contanto que seus outros processos não sejam muito executados em comparação com o que você deseja medir, ou que eles sejam programados para outras CPUs. Se você quiser dedicar uma CPU a esse único processo somente , e evitar que outros processos sejam executados nessa CPU, você também precisará definir sua afinidade.
Isso, eu não sei como fazer corretamente. Você precisaria definir a afinidade do processador de init
bem no início do processo de inicialização para garantir que ele seja herdado em todos os processos do sistema. Como solução alternativa, você pode usar taskset -c -p 0 $PID
para todos os outros processos para forçá-los a executar somente na CPU # 0.
O systemd também tem CPUAffinity=
para controlar a afinidade em arquivos de unidade e há são um par de perguntas sobre a configuração da afinidade padrão aqui no unix.SE, mas não o fiz Não encontre nenhum com uma boa solução.
Embora @Kamil Maciorowski comentou e respondeu a outra pergunta no superuser.com , definindo isolcpus=1
na linha de comando do kernel deve "isolar essa CPU dos algoritmos de agendamento geral", o que é algo você pode querer.