Dizendo ao kernel do Linux * não * para usar certas CPUs

8

Estou tentando executar alguns benchmarks em uma máquina multicore e gostaria de dizer ao kernel do Linux para simplesmente evitar certos núcleos a menos que explicitamente disse para usá-los.

A idéia é que eu poderia separar um punhado de núcleos (a máquina tem 6 núcleos físicos) para benchmarking e usar a máscara cpu para permitir apenas processos de benchmark nos núcleos especificados.

Isso é viável?

    
por Lajos Nagy 09.06.2015 / 21:15

2 respostas

4

Você pode isolar alguns núcleos de cpu do agendamento do kernel usando o parâmetro isolcpus . Adicione este parâmetro ao seu grub.conf e reinicie para entrar em vigor.

    
por 15.06.2015 / 04:32
4

Você deseja alguma afinidade do processador (ou afinidade da CPU ) .

O syscall relevante é sched_setaffinity (2) , mas você deve usá-lo pthread_set_affinity_np (3) se você quiser codificar seus benchmarks para isso.

O comando relacionado é taskset (1) e você pode usá-lo no comandos que você deseja fazer benchmark (ou no seu shell).

Se possível, tome cuidado para que a máquina não seja muito carregada por outras tarefas não relacionadas ao benchmark.

Como alternativa, use um hypervisor como Xen , e inicialize seu Linux como um sistema operacional convidado para aquele hypervisor. Em seguida, configure xen para usar apenas alguns conjuntos restritos de núcleos de CPU (não sei os detalhes exatos, você precisa descobrir). Em distribuições Debian (e relacionadas), você pode instalar pacotes como xen-linux-system-amd64 , xen-hypervisor-amd64 , xen-utils etc (estou usando no Debian / Sid xen-hypervisor-4.5-amd64 , xen-linux-system-4.0.0-1-amd64 , xen-utils-4.5 etc ...) .

Talvez exista alguma forma de configurar (talvez no momento da compilação do kernel, ou passando argumentos específicos para o kernel através do carregador do Grub) seu kernel Linux para restringir o número de núcleos utilizáveis.

Naturalmente, é melhor, quando comparando com algum programa -e.g. em um desktop Linux PC-, tome cuidado para evitar ter muitos processos externos em execução (use ps auxw , pstree -p , top para encontrá-los). Pelo menos, feche e saia da maioria dos aplicativos interativos (navegador como firefox, email, editor, IDEs como o Eclipse) e mantenha apenas um pequeno número de terminais para benchmark. Você pode até mesmo fazer benchmark no modo batch (usando batch ou at para executar os benchmarks) enquanto você não estiver logado (então não tenha sessões de GUI à la Gnome ou KDE ou Xfce , etc ... em execução).

    
por 09.06.2015 / 21:55