Red Hat Training

A Red Hat training course is available for RHEL 8

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

  1. 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

    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).

  2. 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

    Em sistemas com firmware UEFI, executar o seguinte comando:

    # grub2-mkconfig -o /etc/grub2-efi.cfg
  3. Quando o sistema inicia, mova manualmente os fios rcu para 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
  4. Opcional: Use o parâmetro isolcpus na linha de comando do kernel para isolar certos núcleos das tarefas de espaço do usuário.
  5. Opcional: Ajuste a afinidade da CPU para os fios do kernel write-back bdi-flush para o núcleo de manutenção da casa:

    echo 1 > /sys/bus/workqueue/devices/writeback/cpumask

Etapas de verificação

  • Quando o sistema for reinicializado, verifique se dynticks está habilitado:

    # grep dynticks var/log/dmesg
    [    0.000000] NO_HZ: Full dynticks CPUs: 2-5,8-11
  • 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

    Aqui, stress é um programa que gira sobre a CPU para 1 second.

  • Um possível substituto para stress é um roteiro que executa:

    while :; do d=1; done

    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
    1000 irq_vectors:local_timer_entry
  • 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
    1 irq_vectors:local_timer_entry