29.3. Configuration du temps de réponse du noyau

Par défaut, Red Hat Enterprise Linux 9 utilise un noyau "tickless", qui n'interrompt pas les processeurs en veille afin de réduire la consommation d'énergie et de permettre aux nouveaux processeurs de tirer parti des états de sommeil profond.

Red Hat Enterprise Linux 9 propose également une option tickless dynamique, qui est utile pour les charges de travail sensibles à la latence, telles que l'informatique à haute performance ou l'informatique en temps réel. Par défaut, l'option tickless dynamique est désactivée. Red Hat recommande d'utiliser le profil cpu-partitioning TuneD pour activer l'option tickless dynamique pour les noyaux spécifiés comme isolated_cores.

Cette procédure décrit comment activer manuellement et de manière persistante le comportement dynamique sans tic-tac.

Procédure

  1. Pour activer le comportement dynamique sans tic-tac dans certains cœurs, spécifiez ces cœurs sur la ligne de commande du noyau avec le paramètre nohz_full. Sur un système à 16 cœurs, activez l'option de noyau nohz_full=1-15:

    # grubby --update-kernel=ALL --args="nohz_full=1-15"

    Cela permet un comportement dynamique sans tic-tac sur les cœurs 1 à 15, en déplaçant tout le chronométrage vers le seul cœur non spécifié (cœur 0).

  2. Lorsque le système démarre, déplacez manuellement les threads rcu vers le cœur non sensible à la latence, en l'occurrence le cœur 0:

    # for i in `pgrep rcu[^c]` ; do taskset -pc 0 $i ; done
  3. Facultatif : Utilisez le paramètre isolcpus sur la ligne de commande du noyau pour isoler certains cœurs des tâches de l'espace utilisateur.
  4. Facultatif : Définissez l'affinité du CPU pour les threads du noyau write-back bdi-flush sur le noyau de gestion :

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

Verification steps

  • Une fois le système redémarré, vérifiez si dynticks est activé :

    # journalctl -xe | grep dynticks
    Mar 15 18:34:54 rhel-server kernel: NO_HZ: Full dynticks CPUs: 1-15.
  • Vérifiez que la configuration dynamique sans tic-tac fonctionne correctement :

    # perf stat -C 1 -e irq_vectors:local_timer_entry taskset -c 1 sleep 3

    Cette commande mesure les tics de l'unité centrale 1 tout en demandant à l'unité centrale 1 de dormir pendant 3 secondes.

  • La configuration par défaut de la minuterie du noyau affiche environ 3100 tics sur un processeur normal :

    # perf stat -C 0 -e irq_vectors:local_timer_entry taskset -c 0 sleep 3
    
     Performance counter stats for 'CPU(s) 0':
    
                 3,107      irq_vectors:local_timer_entry
    
           3.001342790 seconds time elapsed
  • Avec le noyau dynamique sans tic-tac configuré, vous devriez voir environ 4 tics à la place :

    # perf stat -C 1 -e irq_vectors:local_timer_entry taskset -c 1 sleep 3
    
     Performance counter stats for 'CPU(s) 1':
    
                     4      irq_vectors:local_timer_entry
    
           3.001544078 seconds time elapsed