Cette page va décrire les démarches à effectuer pour configurer l'accès temps-réel des applications et du matériel pour un noyau Linux.
Lorsque vous utilisez un noyau temps-réel, vous devez non seulement configurer la priorité temps-réel de vos applications (voir la page Temps-réel pour les applications), mais aussi la priorité de votre carte son et de l'horloge système. Ceci est capital car donner aux applications une priorité supérieure à celle de votre matériel audio peut vous causer bien des problèmes !
Table des matières
Accès temps-réel applications
Démarrez un terminal.
Vérifiez pour commencer que vous avez bien suivi la procédure qui permet de configurer l'accès temps réel pour les applications (voir PAM).
Pour cela, la commande
grep
sur le fichier de configuration de PAM fait notre affaire :grep rtprio /etc/security/limits.conf @audio - rtprio 90
rtprio est la valeur de priorité maximale que vous avez fixée pour les applications audio (les "clients" de JACK)
Si besoin se reporter à la page PAM pour localiser le fichier de configuration de PAM.
Vérifiez aussi que vous êtes dans le groupe audio
groups votre_utilisateur cdrom ... audio ...
Enfin, vérifiez que vous démarrez JACK avec une valeur de priorité de 70 (-P70).
à vérifier
Accès temps-réel IRQ
Pourquoi ?
Vous l'avez compris, brider la priorité des applications à 90 nous laisse un peu de marge pour placer les IRQ nécessaires au dessus. Heureusement pour nous, le noyau Linux peut contrôler l'attribution de la priorité des IRQs par des processus, que nous appellerons "processus IRQ".
Depuis les noyaux 2.6.39, il n'est plus obligatoire d'utiliser un noyau temps-réel pour régler les priorités temps réel des IRQ. Le noyau standard le supporte également en ajoutant l'option "threadirqs" à l'option "GRUB_CMDLINE_LINUX_DEFAULT=" de votre fichier de conf' grub. Et nous pouvons donc modifier la priorité des "processus IRQ" facilement ce qui nous apporte une grande souplesse et c'est tout bon pour nous ! Ceci dit, cette configuration est un passage obligé car : les "processus IRQ" qui nous intéressent ont une priorité faible par défaut (autour de 50), ce qui peut créer des conflits avec les applications audio :
Exemple de discussion entre 2 processus audio : (mauvaise configuration)
- jacques_kit@70 : laiiiiiiiisse passer !
- alsa_driver@50 : attend je...
- jacques_kit@70 : pousse toi ch'te dit je vais louper mon bus !
- alsa_driver@50 : attention !!...
... vous devinez le reste de la scène : jacques_kit@70 pousse alsa_driver@50 dans le fossé...
... en croyant pouvoir "choper son bus", mais sans savoir que...
... bah c'était alsa_driver@50, le conducteur du bus ! .
Résultat de l'expérience : blocage total du réseau de bus, autrement connu sous le nom de x-runs.
voir la priorité des "processus IRQ"
Savoir "quel processus" est réglé sur "quelle priorité" est facile, une simple commande linux de base ps argumentée comme il faut suffit :
ps -eo pid,class,rtprio,cmd
ps imprime des "process snapshot" et dévoile même les processus critiques avec l'option -e
l'option -o nous permet d'avoir des informations de notre choix en plus.
La liste peut être (très) longue en fonction du système utilisé, ajoutons un filtre pour ce qui nous intéresse :
ps -eo pid,class,rtprio,cmd | grep -i IRQ
| grep -i cherche le mot "IRQ" dans le résultat de la commande précédente et affiche les occurrences
ps -eo pid,class,rtprio,cmd | grep -i IRQ [sudo] password for olinuxx: 4 FF 49 [sirq-high/0] 5 FF 49 [sirq-timer/0] 6 FF 49 [sirq-net-tx/0] 7 FF 49 [sirq-net-rx/0] 8 FF 49 [sirq-block/0] 9 FF 49 [sirq-tasklet/0] 10 FF 49 [sirq-sched/0] 11 FF 49 [sirq-hrtimer/0] 12 FF 49 [sirq-rcu/0] 18 FF 49 [sirq-high/1] 19 FF 49 [sirq-timer/1] 20 FF 49 [sirq-net-tx/1] 21 FF 49 [sirq-net-rx/1] 22 FF 49 [sirq-block/1] 23 FF 49 [sirq-tasklet/1] 24 FF 49 [sirq-sched/1] 25 FF 49 [sirq-hrtimer/1] 26 FF 49 [sirq-rcu/1] 206 FF 50 [irq/9-acpi] 549 FF 50 [irq/21-sata_uli] 568 FF 50 [irq/14-pata_ali] 569 FF 50 [irq/15-pata_ali] 655 FF 80 [irq/23-ehci_hcd] 660 FF 80 [irq/17-ohci_hcd] 664 FF 79 [irq/18-ohci_hcd] 668 FF 78 [irq/19-ohci_hcd] 677 FF 75 [irq/1-i8042] 687 FF 50 [irq/8-rtc0] 904 FF 50 [irq/20-eth0] 907 FF 50 [irq/23-ohci1394] 1244 FF 50 [irq/7-parport0] 1362 FF 50 [irq/22-HDA Inte] 1892 FF 50 [irq/17-radeon@p] 10231 TS - grep --color=auto -i IRQ
Voilà enfin la liste qui nous intéresse ! Mais attendez un instant et observez le résultat de votre commande : où est "la carte son" ? et "l'horloge système" ?
La liste que vous voyez est composée dans l'ordre de (pour chaque processus) :
numéro identifiant, classe "temps-réel", priorité "temps-réel" (TS pour standard/SCHED_OTHER et FF pour SCHED_FIFO/temps-réel) et enfin la ligne de commandes invoquée.
...à suivre...
l'horloge système haute résolution : rtc0
les cartes sons, trouver le bon numéro d'irq avec /proc/interrupts
Les nœuds pci, changer les irq ?
modifier les priorités
à écrire
Changer l'IRQ d'un périphérique
à écrire/rédiger
- Pour les cartes ISA :
"isapnptools"(lien mort). Voir par exemple ici : [http://www.trustonme.net/didactels/119.html](lien mort). - Certaines cartes (ISA) disposent de "jumpers" permettant cette modification
- Certains BIOS permettent l'attribution d'IRQ (aux slots PCI par exemple)
- Changez le périphérique de slot PCI si votre carte-mère en possède plusieurs !
- Désactivez/retirez les périphériques inutilisés (réorganisation des IRQ)
- Pour désactiver l'ACPI qui a tendance à se placer sur l'IRQ 9, placer le paramètre "acpi=off" au démarrage (avec Grub ou Lilo)
automatiser tout ça
Il existe un script tout prêt pour automatiser tout ce procédé, voir rtirq.
En savoir plus
- le sujet de forum lié à cette page : [FERMÉ] limits.conf / watchdog
- autre sujet lié avec quelques explications supplémentaires : [CONSEILLÉ] rtirq et qjackd ...
- définition IRQ : http://www.pcmus.com/irq.htm
- le module CONFIG_RT_GROUP_SCHED : http://www.mjmwired.net/kernel/Documentation/scheduler/sched-rt-group.txt
- comprendre la basse latence : Hardware interrupts, schedulers : http://ccrma.stanford.edu/planetccrma/software/understandlowlat.html
- schedulers and policies : http://ccrma.stanford.edu/planetccrma/man/man2/sched_setscheduler.2.html
- priorités IRQ : vue générale et utilisation de chrt http://tapas.affenbande.org/wordpress/?page_id=40
- configuration du systeme chez linuxmusicians : http://wiki.linuxmusicians.com/doku.php?id=system_configuration#priorities
- La page de Wikipédia
- ce fil de discussion
- http://www-128.ibm.com/developerworks/library/l-hw2.html#N10093
- Basse latence chez LinuxAudio.org
[+]