Skip to main content

Historique: Temps-réel pour les processus IRQ

Aperçu de cette version: 68

Image




! Page en cours de germination !
(attention au gazon s'il-vous-plait)


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 temps-réel.

Lorsque vous utilisez un noyau temps-réel, vous devez non seulement configurer la priorité temps-réel de vos applications (voir la page Applis RT), 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 !

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 Applis RT).

Pour cela, la commande grep sur le fichier de configuration de PAM fait notre affaire :
imprimer rtprio
Copy to clipboard
~~blue:#~~ grep rtprio /etc/security/limits.conf @audio - ~~red: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 Applis RT pour localiser le fichier de configuration de PAM.

Vérifiez aussi que vous êtes dans le groupe audio
lister les groupes
Copy to clipboard
~~blue:#~~ 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 des IRQs par des processus que nous appellerons "processus IRQ".

Pour un noyau standard (module CONFIG_PREEMPT_DESKTOP), la priorité des "processus IRQ" est, par défaut, supérieure à celle des autres applications, et elle nous est invisible/intouchable.

Mais avec le patch temps-réel du noyau temps-réel (module CONFIG_PREEMPT_RT), on peut 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 jte 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 lui ...
... 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 :
lister les processus :
Copy to clipboard
~~blue:#~~ 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 :
lister les ~034~processus IRQ~034~
Copy to clipboard
~~blue:#~~ 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 occurences

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.

...to be continued

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



automatiser tout ca


Présentation


Il s'agit "simplement" d'utiliser un script permettant de prioriser des IRQ handlers (pour les utilisateurs du groupe "audio"). Le "programme" se compose de 2 fichiers : un script d'initialisation et un fichier de configuration. Nous rappelons ici que l'utilisation d'un noyau RT (c'est à dire un noyau patché avec le patch RT) est indispensable (usage de threads pour la gestion des IRQ).

Gentoo

Le plus simple est d'utiliser l'overlay "pro audio production applications" (voir page gentoo)
Copy to clipboard
echo "sys-process/rtirq ~x86" >> /etc/portage/package.keywords emerge rtirq rc-update add rtirq default


Ubuntu

Pour les utilisateurs d'Ubuntu, un paquet du doux nom de rtirq-init existe.

Compilation

Si un paquet n'existe pas pour votre distribution, vous pouvez toujours le compiler/installer à la main ! Nous allons voir ceci ici.

L'installation n'est pas trop compliquée ! Vous trouverez l'archive et des instructions (en anglais) ici :
http://lalists.stanford.edu/lau/2005/11/0459.html ou mieux ici : http://www.rncbc.org/jack/ (en bas de page) pour la toute dernière version.

Pour résumer, téléchargez l'archive "rtirq-20050914.tar.gz" et décompressez-là :
Copy to clipboard
wget http://lalists.stanford.edu/lau/2005/11/att-0459/rtirq-20050914.tar.gz tar -zxvf rtirq-20050914.tar.gz


Placez les 2 fichiers au bon endroit et avec les droits corrects (en super utilisateur) :
Copy to clipboard
cp rtirq.sh /etc/init.d/rtirq chmod 0755 /etc/init.d/rtirq cp rtirq.conf /etc/sysconfig/rtirq chmod 0644 /etc/sysconfig/rtirq


Intégrez le script dans votre distribution en tant que script d'initialisation (très variable d'une distribution à l'autre)
Pour Gentoo :
Copy to clipboard
rc-update add rtirq default

Pour Mandriva (voir aussi "drakxservice") :
Copy to clipboard
chkconfig --level 5 rtirq on

Pour Redhat ou Fedora :
Copy to clipboard
chkconfig --add rtirq

Pour Ubuntu :
Copy to clipboard
update-rc.d rtirq defaults


man chkconfig (pour les autres ❗

Le script utilise ensuite les commandes classiques des scripts d'initialisation de votre distribution :
Copy to clipboard
/etc/init.d/rtirq start (pour démarrer) /etc/init.d/rtirq stop (pour arrêter) /etc/init.d/rtirq status (devinez !)


La configuration se fait en modifiant le fichier /etc/sysconfig/rtirq ( /etc/conf.d/rtirq sous Gentoo) qui est plutôt bien documenté. Il est important de s'assurer au préalable de l'absence de conflit d'IRQ, en particulier pour les périphériques listés dans "RTIRQ_NAME_LIST", en utilisant la commande cat /proc/interrupts (voir la page IRQ).

Exemples

Pour les utilisateurs de cartes firewire, voir la page suivante, sur le site du projet Freebob : http://freebob.sourceforge.net/index.php/System_Configuration_Hints.
Vous trouverez ici comment régler les priorités afin de favoriser votre carte FireWire : http://freebob.sourceforge.net/index.php/IRQ_Threading_and_Priorities.
Voir aussi : http://alsa.opensrc.org/Rtirq.

En savoir plus



liens :
le sujet de forum lié à cette page : http://www.linuxmao.org/tikiwiki/tiki-view_forum_thread.php?forumId=8&comments_threshold=0&comments_parentId=24403&comments_offset=60&comments_per_page=30&thread_style=commentStyle_plain
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
IRQ Priorities : vue générale et utilisation de chrt http://tapas.affenbande.org/wordpress/?page_id=40
configuration du systeme par linuxmusicians : http://wiki.linuxmusicians.com/doku.php?id=system_configuration#priorities
IRQ Priorities How-To :

  • Note de rédaction (olivier) : Je pense qu'il faut déjà passer par la page IRQ avant de venir sur cette page qui doit parler plus précisément de la gestion des IRQ par rt-irq. (éventuellement même la renommer).

Historique

Information Version
Tue 13 Mar 2018 11:30 olinuxx 116
Afficher
Tue 13 Mar 2018 11:30 olinuxx 115
Afficher
Tue 13 Mar 2018 11:29 olinuxx lien-forum correct + précisions liens-forum 114
Afficher
Tue 13 Mar 2018 11:22 olinuxx 113
Afficher
Tue 13 Mar 2018 11:22 olinuxx titre de la page 112
Afficher
Tue 13 Mar 2018 11:21 olinuxx coquille + mise en page + ponctuation + drapeaux EN et FR + alias 111
Afficher
Tue 13 Mar 2018 11:14 olinuxx coquilles + code 110
Afficher
Tue 13 Mar 2018 11:13 olinuxx mise à jour + cohérence wiki + ponctuation + code 109
Afficher
Tue 13 Mar 2018 11:11 olinuxx mise à jour de la rédaction + code 108
Afficher
Tue 13 Mar 2018 11:10 olinuxx mise à jour de la rédaction + ponctuations 107
Afficher
Tue 13 Mar 2018 11:05 olinuxx cohérence + mise en page 106
Afficher
Thu 19 Jan 2017 17:35 Thieriki 105
Afficher
Fri 06 Nov 2015 14:47 olinuxx Recherche et remplacement en masse 104
Afficher
Fri 05 Sep 2014 17:58 olinuxx Recherche et remplacement en masse 103
Afficher
Wed 03 Sep 2014 10:09 olinuxx Recherche et remplacement en masse 102
Afficher
Wed 03 Sep 2014 10:09 olinuxx Recherche et remplacement en masse 101
Afficher
Wed 03 Sep 2014 10:09 olinuxx Recherche et remplacement en masse 100
Afficher
Wed 06 Nov 2013 08:56 pianolivier wiki_up conversion 99
Afficher
Wed 27 Feb 2013 20:13 utilisateur_anonyme2 98
Afficher
Sun 05 Aug 2012 12:18 olinuxx 97
Afficher
Sun 05 Aug 2012 12:09 olinuxx 96
Afficher
Sun 20 mai 2012 12:52 pianolivier suppression de la page ((IRQ)) + alias 95
Afficher
Sun 20 mai 2012 12:49 pianolivier ajout d'éléments de la page ((IRQ)) 94
Afficher
Sat 19 mai 2012 19:44 pianolivier 93
Afficher
Sat 19 mai 2012 19:27 pianolivier renommage de la page +alias(gestion des IRQ) 92
Afficher
Thu 17 mai 2012 17:34 pianolivier modif lien(s) interne(s) 91
Afficher
Sat 12 mai 2012 17:55 pianolivier 90
Afficher
Sat 12 mai 2012 17:54 pianolivier modif d'un lien interne 89
Afficher
Mon 09 Apr 2012 16:33 pianolivier +BOX 88
Afficher
Wed 21 Mar 2012 19:37 pianolivier fil d'ariane 87
Afficher
Tue 20 Mar 2012 22:00 pianolivier suppression BOX (début de réorga du dossier) 86
Afficher
Sun 11 Mar 2012 14:47 pianolivier 85
Afficher
Sun 11 Mar 2012 14:09 pianolivier 84
Afficher
Sun 11 Mar 2012 14:09 pianolivier mise en page 83
Afficher
Wed 22 Feb 2012 20:09 Dominique Ajout de cgroup dans box 82
Afficher
Wed 01 Feb 2012 18:28 pianolivier +1lien forum 81
Afficher
Sat 24 Sep 2011 21:49 pianolivier déplacement de 2 liens dans ((rtirq)) 80
Afficher
Thu 22 Sep 2011 18:32 pianolivier déplacement de §rtirq sur une page dédiée ((rtirq)) 79
Afficher
Thu 22 Sep 2011 16:55 pianolivier supp alias (rtirq) pour création de page 78
Afficher
Sun 29 mai 2011 14:33 pianolivier +alias (rtirq) 77
Afficher
Sun 06 Mar 2011 13:50 pianolivier lien install debian 76
Afficher
Sun 06 Mar 2011 13:49 pianolivier 75
Afficher
Mon 17 Jan 2011 03:39 olinuxx enlevage du lien "dur" + liens internes + maj/min 74
Afficher
Sun 16 Jan 2011 23:33 pianolivier ajout d'un paragraphe tiré de l'ancienne doc ffado 73
Afficher
Tue 04 Jan 2011 13:25 olinuxx BOX 72
Afficher
Mon 20 Dec 2010 22:08 olinuxx + BOX 71
Afficher
Mon 06 Dec 2010 21:53 olinuxx correction sinon je vais me faire super disputer par pianolivier :P 70
Afficher
Mon 06 Dec 2010 08:57 olinuxx mise en page 69
Afficher
Mon 06 Dec 2010 08:56 olinuxx intégration info + mise en page + rédactiob 68
Afficher
Mon 06 Dec 2010 08:36 olinuxx mise en page 67
Afficher
  • «
  • 1 (en cours)
  • 2