Red Hat Training

A Red Hat training course is available for RHEL 8

20.4. Configurar el tiempo de tic del kernel

Por defecto, Red Hat Enterprise Linux 8 utiliza un kernel sin tics, que no interrumpe las CPUs inactivas para reducir el uso de energía y permitir que los nuevos procesadores aprovechen los estados de sueño profundo.

Red Hat Enterprise Linux 8 también ofrece una opción de tickless dinámico, que es útil para cargas de trabajo sensibles a la latencia, como la computación de alto rendimiento o la computación en tiempo real. Por defecto, la opción de tickless dinámico está deshabilitada. Este procedimiento describe cómo habilitar de forma persistente el comportamiento dinámico sin tics.

Procedimiento

  1. Para habilitar el comportamiento dinámico sin tics en ciertos núcleos, especifique esos núcleos en la línea de comandos del kernel con el parámetro nohz_full. En un sistema de 16 núcleos, añada este parámetro en el archivo /etc/default/grub:

    nohz_full=1-15

    Esto permite un comportamiento dinámico sin tics en los núcleos 1 a 15, trasladando todo el control del tiempo al único núcleo no especificado (núcleo 0).

  2. Para habilitar de forma persistente el comportamiento dinámico "tickless", regenere la configuración de GRUB2 utilizando el archivo por defecto editado. En sistemas con firmware BIOS, ejecute el siguiente comando:

    # grub2-mkconfig -o /etc/grub2.cfg

    En sistemas con firmware UEFI, ejecute el siguiente comando:

    # grub2-mkconfig -o /etc/grub2-efi.cfg
  3. Cuando el sistema arranque, mueva manualmente los hilos de rcu al núcleo no sensible a la latencia, en este caso el núcleo 0:

    # for i in `pgrep rcu[^c]` ; do taskset -pc 0 $i ; done
  4. Opcional: Utilice el parámetro isolcpus en la línea de comandos del kernel para aislar ciertos núcleos de las tareas del espacio del usuario.
  5. Opcional: Establecer la afinidad de la CPU para los hilos del kernel write-back bdi-flush al núcleo de mantenimiento de la casa:

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

Pasos de verificación

  • Una vez reiniciado el sistema, verifique si dynticks está habilitado:

    # grep dynticks var/log/dmesg
    [    0.000000] NO_HZ: Full dynticks CPUs: 2-5,8-11
  • Verifique que la configuración dinámica sin tics funciona correctamente:

    # perf stat -C 1 -e irq_vectors:local_timer_entry taskset -c 1 stress -t 1 -c 1

    Aquí, stress es un programa que gira en la CPU para 1 second.

  • Un posible sustituto de stress es un script que se ejecuta:

    while :; do d=1; done

    La configuración por defecto del temporizador del kernel muestra 1000 ticks en una 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
  • Con el núcleo dinámico sin tics configurado, debería ver 1 tic en su 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