Tuna
| 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