Tuna

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Domaine Réglage temps réel : affinité CPU, affinité IRQ, priorité des threads
Commande tuna
Contexte RHEL/CentOS (issu du profil MRG Realtime) — paquet tuna
Voir aussi Taskset (affinité CPU, chrt), Nice (priorité classique)

tuna regroupe en un seul outil ce que taskset, chrt et la manipulation manuelle de /proc/irq/*/smp_affinity font séparément : épingler des threads ou des IRQ sur des CPU précis, et changer la politique/priorité d'ordonnancement d'un thread. Il vient du profil temps réel MRG et sert surtout à isoler les CPU dédiés à une charge critique (réseau, audio, trading…) du reste de l'activité système.

Installation

yum install tuna -y

Lister threads et IRQ

tuna --show_threads    # -P : politique, priorité et affinité CPU de chaque thread
tuna --show_irqs       # -q sans argument : affinité CPU de chaque IRQ

Affinité CPU

--cpus (-c) désigne une liste ou une plage de CPU (0,2 ou 1-3), à combiner avec --isolate (-i, éloigne tous les threads de ces CPU) ou --include (-I, autorise à nouveau les threads à y tourner) :

tuna --cpus=0 --isolate     # évacue les threads du CPU 0, qui devient dédié
tuna --cpus=1 --include     # réautorise les threads à s'exécuter sur le CPU 1

Pour épingler un thread ou un processus précis plutôt qu'isoler un CPU entier, voir Taskset.

Affinité des IRQ

Même logique que pour les CPU, mais appliquée aux interruptions matérielles (--irqs/-q) plutôt qu'aux threads :

tuna --irqs=IRQ-LIST --cpus=CPU-LIST --move   # bascule le traitement de ces IRQ sur ces CPU

# exemple : isoler le socket CPU 2 puis y répartir les IRQ réseau, une par CPU du socket
tuna --sockets=2 --isolate --irqs='eth*' --spread

Priorité et politique d'ordonnancement des threads

--priority (-p) fixe la politique d'ordonnancement (OTHER, FIFO, RR, BATCH) et la priorité temps réel (0-99) d'un thread ciblé par --threads (-t, PID ou nom avec joker *) — c'est l'équivalent de chrt (voir Taskset) mais capable de cibler plusieurs threads par motif de nom en une seule commande :

tuna --threads=7861 --priority=RR:40   # politique round-robin, priorité RT 40
tuna --threads=7861 --show_threads     # vérifier le résultat

Combiner plusieurs actions

Les options se chaînent sur une seule ligne de commande, chaque groupe --cpus/--threads s'appliquant au --move qui le suit :

tuna --cpus=0,1 --threads='ssh*' --move --cpus=2,3 --threads='http*' --move

Voir aussi

  • Taskset — affinité CPU par processus avec taskset, priorité temps réel avec chrt
  • Nice — priorité classique (niceness) via nice/renice