20.4. Configurando o tempo de tick kernel
Por default, o Red Hat Enterprise Linux 8 usa um kernel sem tickless, que não interrompe CPUs ociosas a fim de reduzir o uso de energia e permitir que novos processadores tirem vantagem dos estados de sono profundo.
O Red Hat Enterprise Linux 8 também oferece uma opção dinâmica sem tickless, que é útil para cargas de trabalho sensíveis à latência, tais como computação de alto desempenho ou computação em tempo real. Por default, a opção dinâmica sem tickless está desativada. Este procedimento descreve como ativar de forma persistente o comportamento dinâmico sem tickless.
Procedimento
Para permitir um comportamento dinâmico sem tickless em certos núcleos, especifique esses núcleos na linha de comando do kernel com o parâmetro
nohz_full. Em um sistema de 16 núcleos, anexar este parâmetro no arquivo/etc/default/grub:nohz_full=1-15
nohz_full=1-15Copy to Clipboard Copied! Toggle word wrap Toggle overflow Isto permite um comportamento dinâmico sem cócegas nos núcleos 1 a 15, movendo-se todo o tempo para o único núcleo não especificado (núcleo 0).
Para ativar persistentemente o comportamento dinâmico sem cócegas, regenerar a configuração do GRUB2 usando o arquivo padrão editado. Em sistemas com firmware BIOS, executar o seguinte comando:
grub2-mkconfig -o /etc/grub2.cfg
# grub2-mkconfig -o /etc/grub2.cfgCopy to Clipboard Copied! Toggle word wrap Toggle overflow Em sistemas com firmware UEFI, executar o seguinte comando:
grub2-mkconfig -o /etc/grub2-efi.cfg
# grub2-mkconfig -o /etc/grub2-efi.cfgCopy to Clipboard Copied! Toggle word wrap Toggle overflow Quando o sistema inicia, mova manualmente os fios
rcupara o núcleo não sensível à latência, neste caso, o núcleo 0:for i in `pgrep rcu[^c]` ; do taskset -pc 0 $i ; done
# for i in `pgrep rcu[^c]` ; do taskset -pc 0 $i ; doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
Opcional: Use o parâmetro
isolcpusna linha de comando do kernel para isolar certos núcleos das tarefas de espaço do usuário. Opcional: Ajuste a afinidade da CPU para os fios do kernel
write-back bdi-flushpara o núcleo de manutenção da casa:echo 1 > /sys/bus/workqueue/devices/writeback/cpumask
echo 1 > /sys/bus/workqueue/devices/writeback/cpumaskCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Etapas de verificação
Quando o sistema for reinicializado, verifique se
dynticksestá habilitado:grep dynticks var/log/dmesg
# grep dynticks var/log/dmesg [ 0.000000] NO_HZ: Full dynticks CPUs: 2-5,8-11Copy to Clipboard Copied! Toggle word wrap Toggle overflow Verificar se a configuração dinâmica sem tickless está funcionando corretamente:
perf stat -C 1 -e irq_vectors:local_timer_entry taskset -c 1 stress -t 1 -c 1
# perf stat -C 1 -e irq_vectors:local_timer_entry taskset -c 1 stress -t 1 -c 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow Aqui,
stressé um programa que gira sobre a CPU para1 second.Um possível substituto para
stressé um roteiro que executa:while :; do d=1; done
while :; do d=1; doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow A configuração padrão do temporizador do kernel mostra 1000 ticks em uma CPU ocupada:
perf stat -C 1 -e irq_vectors:local_timer_entry taskset -c 1 stress -t 1 -c 1
# perf stat -C 1 -e irq_vectors:local_timer_entry taskset -c 1 stress -t 1 -c 1 1000 irq_vectors:local_timer_entryCopy to Clipboard Copied! Toggle word wrap Toggle overflow Com o núcleo dinâmico sem tickless configurado, você deve ver 1 tick em seu lugar:
perf stat -C 1 -e irq_vectors:local_timer_entry taskset -c 1 stress -t 1 -c 1
# perf stat -C 1 -e irq_vectors:local_timer_entry taskset -c 1 stress -t 1 -c 1 1 irq_vectors:local_timer_entryCopy to Clipboard Copied! Toggle word wrap Toggle overflow
Recursos adicionais
-
Para mais informações, consulte as páginas de homem de
perfecpuset. - Tudo sobre nohz_full kernel parâmetro Red Hat Knowledgebase artigo.
- Como verificar a lista de "isolados" e "nohz_full" Informações da CPU do sysfs? Artigo da Red Hat Knowledgebase.