Historique: rtirq
Aperçu de cette version: 47
★ Portail Logiciel > Système > rtirq
rtirq est un utilitaire de configuration temps-réelle pour le noyau RT.
Il s'agit plus précisément d'un script permettant d'automatiser le réglage des priorités temps-réel des threads IRQ pour le noyau RT.
Table des matières
Informations
Site web officiel : http://www.rncbc.org/.Version actuelle : 20240220.
Licence : GNU GPL v2.
Compatible : noyau RT.
Plateforme : Linux.
Développeur : Rui Nuno Capela.
Description
rtirq est un script bash, destiné à être démarré automatiquement lors de l'initialisation du système. Il s'utilise en conjonction avec un noyau RT pour augmenter la priorité temps-réel des threads IRQ, afin d'optimiser la latence des périphériques (cartes-son). le lancement de rtirq est une étape obligatoire lorsque l'on utilise un noyau RT avec jack. Pour comprendre le pourquoi du comment ou pour apprendre à faire la même manipulation "à la main", rendez-vous sur la page gestion des IRQ.Vous allez me dire, alors pourquoi une image de radar en tête de page ? Et bien parce qu'rt-irq permet justement d'éviter le radar en augmentant la priorité/vitesse d'accès aux périphériques : conduisez comme la police et dites au-revoir aux bouchons !
Utilisation
Installation
pré-requis : Un noyau RT est obligatoire pour utiliser rtirq.gentoo : rtirq est présent dans l'overlay pro audio, il vous faudra le démasquer :
Copy to clipboard
~~blue:$~~ echo "sys-process/rtirq ~x86" >> /etc/portage/package.keywords ~~blue:$~~ emerge rtirq
Ubuntu/ debian sid: le paquet à installer est nommé rtirq-init
debian 6 squeeze : voir ici
à la main : Vous trouverez les sources ici : http://www.rncbc.org/jack/.
- téléchargez les sources
- décompressez l'archive
- en super utilisateur
- modifiez les permissions des 2 fichiers rtirq.conf et rtirq.sh pour qu'ils appartiennent à root.
- modifiez les permissions du fichier rtirq.conf pour le rendre accessible en lecture/écriture par root.
renommez le en rtirq et déplacez-le dans le répertoire /etc/sysconfig/ - modifiez les permissions du fichier rtirq.sh pour le rendre accessible en exécution.
renommez-le en rtirq et déplacez-le dans le répertoire /etc/init.d/.
Copy to clipboard
~~blue:$~~ mkdir -p ~/localbuilds/rtirq && cd ~/localbuilds/rtirq ~~blue:$~~ wget ~104~ttp://www.rncbc.org/jack/rtirq-20110314.tar.gz ~~blue:$~~ tar -zxvf rtirq-20110314.tar.gz ~~blue:$~~ cd rtirq-20110314 ~~blue:$~~ su -c "chown root rtirq.conf rtirq.sh" ~~blue:$~~ su -c "cp rtirq.conf /etc/sysconfig/rtirq && chmod 0644 /etc/sysconfig/rtirq" ~~blue:$~~ su -c "cp rtirq.sh /etc/init.d/rtirq && chmod 0755 /etc/init.d/rtirq"
merci à vous de compléter ce paragraphe avec le procédé d'installation de votre distribution
Réglages et tests
Il est important de s'assurer au préalable de l'absence de conflit d'IRQ, et de repérer à quels thread IRQ donner les priorités les plus importantes.
Pour cela, démarrez un terminal et entrez la commande :
Copy to clipboard
~~blue:$~~ cat /proc/interrupts
Chaque ligne correspond à un IRQ, et on peut voir quel thread IRQ est greffé sur quelle IRQ.
Voici un extrait de ce que j'obtiens sur ma machine MAO :
Copy to clipboard
~hs~ CPU0 CPU1 0: 120 0 IO-APIC-edge timer 1: 2 0 IO-APIC-edge i8042 8: 0 0 IO-APIC-edge __rtc0__ 9: 0 0 IO-APIC-fasteoi acpi 16: 9367656 0 IO-APIC-fasteoi uhci_hcd:usb3, __firewire_ohci__ 17: 2 0 IO-APIC-fasteoi ehci_hcd:usb2, uhci_hcd:usb5 18: 0 0 IO-APIC-fasteoi ehci_hcd:usb1, uhci_hcd:usb7 19: 28 0 IO-APIC-fasteoi uhci_hcd:usb6
j'ai mis en gras ce qui m'intéresse dans ma configuration de type MAO :
- rtc est l'horloge interne haute vitesse, très important !
- firewire_ohci est le pilote de ma carte son firewire (nouveau stack juju, voir ffado_configuration)
conflit d'interet :
Oberservons une minute l'IRQ n°16. 2 modules se le partagent : firewire_ohci et uhci_hcd:usb3.
Pour éviter les conflit d'interet, il vaut mieux déconnecter tout disque-dur et autre périphérique haut-débit branché sur le port usb n°3.
Si votre carte son partage l'IRQ d'un périphérique que vous ne pouvez pas déconnecter (comme une carte réseau), limitez son utilisation (désactivation partielle ou totale) ou changez votre carte son de port.
Pour savoir quel périphérique utilise quel port usb, utilisez l'outil lsusb (du paquet usb-utils)
Copy to clipboard
~~blue:$~~ lsusb __Bus 001__ Device 00X: un disque dur (__IRQ 18__) __Bus 002__ Device 00X: une clef wifi (__IRQ 17__) __Bus 003__ Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub (rien) (__IRQ 16__ partagée avec ma carte son) ...
chacun de mes périphérique ont leur IRQ dédiée, conflit évité !
vous aurez peut-être aussi besoin de savoir quels modules sont utiles sur votre machine :
Copy to clipboard
~~blue:$~~ lsmod
ou d'en apprendre plus sur vos ports pci :
Copy to clipboard
~~blue:$~~ lspci
le fichier de configuration :
Maintenant que vous avez repéré vos IRQ et threads IRQ, il faut renseigner rtirq à travers son fichier de configuration.
emplacements possibles :
il vous faudra les droits super utilisateur pour modifier ce fichier. Dedans vous trouverez un tas de bla-bla (un peu comme ici 😉) et quatre lignes importantes contenant :
- RTIRQ_NAME_LIST="..."
liste des threads IRQ qui nous intéressent par ordre de priorité - RTIRQ_PRIO_HIGH="99"
priorité temps-réel maximum pour les threads IRQ - RTIRQ_PRIO_DECR="2"
pas de décrémentation de la priorité - RTIRQ_NON_THREADED=""
services ne devant PAS être threaded, laissez vide !
Dans RTIRQ_NAME_LIST on peut mettre le nom complet du thread IRQ, ou une partie de son nom seulement.
ainsi firewire_ohci peut devenir firewire, uhci_hcd:usb3 se fait petit en usb3 et rtc0 se raccourcit en rtc.
exemples de configuration :
- avec notre exemple ci-dessus (carte son firewire) on obtient :
RTIRQ_NAME_LIST="rtc firewire" - si vous utilisez l'ancien stack firewire (voir ffado_configuration) :
RTIRQ_NAME_LIST="rtc ohci1394" - si votre carte son usb est sur le port n°3 et que vous avez d'autre périphériques moins importants ailleur :
RTIRQ_NAME_LIST="rtc usb3" - si vous changez souvent votre carte son de port usb, et vous voulez donner la priorité à tous les ports, vous pourrez écrire :
RTIRQ_NAME_LIST="rtc ehci_hcd uhci_hcd"
test :
Le test consiste en l'execution du script qui imprimera à l'écran ce qui se passe. Vous devrez avoir les droits super utilisateur pour cela.
Copy to clipboard
~~blue:$~~ su -c "/etc/init.d/rtirq start"
Il vous faudra refaire cette manipulation à chaque modification de la configuration :
Copy to clipboard
~~blue:$~~ su -c "/etc/init.d/rtirq restart"
Lancement automatique
Lorsque vous êtes satisfait des tests effectués, il faut ajouter l'execution du script au démarrage du système (init).Ceci ne fonctionne cependant que pour les périphériques déjà branchés et allumés au démarrage du système. Si vous branchez votre carte son usb après l'étape d'init, il vous faudra redemarrer le service à la main (voir le restart plus haut) ou créer une règle udev personnalisée.
gentoo :
Copy to clipboard
~~blue:$~~ rc-update add rtirq default
Ubuntu : automatiquement ajouté au processus de démarrage lors de l'installation du paquet ??
ou alors :
Copy to clipboard
~~blue:$~~ update-rc.d rtirq defaults
Mandriva :
Copy to clipboard
~~blue:$~~ chkconfig --level 5 rtirq on
(voir aussi "drakxservice")
Redhat/Fedora :
Copy to clipboard
~~blue:$~~ chkconfig --add rtirq
pour les autres : vérifiez dans le manuel.
Copy to clipboard
~~blue:$~~ man chkconfig
Changelog
[+]Liens
★ Portail des tutos
En savoir plus :
- http://alsa.opensrc.org/Rtirq (english)
- http://subversion.ffado.org/wiki/IrqPriorities (english)
[+]