Historique: Portail Système
Aperçu de cette version: 16
(:arrow_left:) Page précédente : Accès temps réel pour les applications
Page Suivante : Retour section Optimisation Linux 2.6 ➡️
Table des matières
Interruptions matérielles / IRQ
La commande "cat /proc/interrupts" vous donnera la liste des IRQ. Exemple (peu parlant car je n'ai pas lancé la commande de mon PC zic', mais bon ❗#cat /proc/interrupts
CPU0
0: 4345317 IO-APIC-edge timer
1: 11519 IO-APIC-edge i8042
9: 0 IO-APIC-level acpi
12: 131204 IO-APIC-edge i8042
14: 10137 IO-APIC-edge ide0
15: 38094 IO-APIC-edge ide1
16: 9999 IO-APIC-level ehci_hcd:usb1, uhci_hcd:usb2
17: 4536 IO-APIC-level eth0
18: 439677 IO-APIC-level nvidia
19: 24415 IO-APIC-level VIA8233
CPU0
0: 4345317 IO-APIC-edge timer
1: 11519 IO-APIC-edge i8042
9: 0 IO-APIC-level acpi
12: 131204 IO-APIC-edge i8042
14: 10137 IO-APIC-edge ide0
15: 38094 IO-APIC-edge ide1
16: 9999 IO-APIC-level ehci_hcd:usb1, uhci_hcd:usb2
17: 4536 IO-APIC-level eth0
18: 439677 IO-APIC-level nvidia
19: 24415 IO-APIC-level VIA8233
La première colonne indique l'IRQ, la dernière les périphériques correspondants.
IRQ partagées et conflits
Vous veillerez en particulier à ce que la carte son n'ait pas d'IRQ partagée, cela vous évitera craquements et autres désagréments...Pour changer l'IRQ d'un périphérique :
- Pour les cartes ISA : "isapnptools". Voir par exemple ici : http://www.trustonme.net/didactels/119.html
- Certaines cartes (ISA) disposent de "jumpers" permettant cette modification
- Certains BIOS permettent l'attribution d'IIRQ (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)
Choix des IRQ
Le fil suivant nous indique l'ordre de priorité des IRQ sur une machine non-APIC (à vérifier pour les multiproc) :
0, 1, 8, 9, 10, 11, 12, 13, 14, 15, 3, 4, 5, 6, 7 0 : priorité la plus forte 7 : priorité la plus faible
Les IRQ 0, 1, 8 étant réservées au système, l'idéal pour votre carte son sera donc l'IRQ 9, 10 ou 11. Ainsi, si votre carte son est sur l'IRQ 11 par exemple, l'idéal sera également qu'aucun périphérique ne soit sur une IRQ plus prioritaire (9 ou 10).
Liens
- La page de wikipedia
- Le fil suivant (en anglais)
- http://www-128.ibm.com/developerworks/library/l-hw2.html#N10093 (en anglais)
Périphériques PCI et latency_timer
Pour cette partie, vous aurez besoin de la suite d'outils "pci-utils", disponible pour toutes les distributions.
Présentation
Chaque périphérique PCI possède une valeur de "latency_timer" comprise en 0 et 248 cycles d'horloge du bus. Plus cette valeur est grande, plus le matériel gardera le bus longtemps pour lui. Cela augmentera la largeur de bande passante et le débit pour ce périphérique, mais cette "monopolisation" pourra perturber les autres périphériques PCI.
A contrario, une valeur de "latency_timer" faible indiquera au périphérique qu'il doit cesser ses transmissions si un autre composant à besoin du bus : ceci se traduira par une perte de bande passante importante.
Usage
En changeant la valeur de "latency_timer" pour chaque périphérique, vous pouvez changer leur priorité afin de donner, par exemple, l'avantage à votre carte son !
Utilisez tout d'abord la commande "lspci" pour inspecter les latences PCI de vos dispositifs.
lspci - v
Repérez en particulier les lignes correspondant à votre carte son ("Multimedia audio controller"). Si vous voulez que votre carte son soit le dispositif préféré de PCI, augmentez alors sa latence à au moins 128. Ramenez les valeurs de "latency_timer" de tous autres dispositifs PCI à quelque chose comme 64 ou 32 (sauf peut-être la carte graphique, cf remarque ci-dessous).
➡️ Attention : la commande "setpci" utilisée requiert des valeurs exprimées dans le système hexadécimal (alors que "lspci" vous les affiche en décimal ❗. Vous devrez donc convertir au préalable la valeur de latence souhaitée :
| Valeur décimale | Valeur hexadécimale |
| 16 | 10 |
| 32 | 20 |
| 64 | 40 |
| 128 | 80 |
| 248 | F8 |
| etc. |
Exemple avec une carte son à l'adresse suivante (donnée par lspci) :
0000:00:0d.0 Multimedia audio controller: Cirrus Logic CS 4614/22/24
[CrystalClear SoundFusion Audio Accelerator] (rev 01)
Pour définir la latence pci de ce matériel au maximum :
setpci -s 0:0d.0 latency_timer=f8
Pour modifier plusieurs périphériques en même temps (ici, ceux du bus 01 à une valeur de 32 cycles) :
setpci -v -d 01:* latency_timer=20
Remarque importante
➡️ Attention : Ne baissez pas trop la valeur de "latency_timer", sous peine de voir certains périphériques ne plus fonctionner ! (elle ne devrait pas être inférieure à la valeur de MIN_GRANT du périphérique considéré. Consultez le fil suivant pour plus d'infos). Si certains de vos périphériques fonctionnent moins bien, remontez leur valeur de "latency_timer". Votre carte graphique aura par exemple du mal à suivre sur certains jeux si vous abaissez trop sa valeur !Voilà un exemple qui motive le fait qu'on vous conseille tout au long de ce site de monter votre homestudio sur une partition dédiée ...
Liens
Si vous voulez plus d'info :- man lspci
- man setpci
- La page latence ici même !
- La page "Découvrez les ressources de votre machine" du site de LEA.
- http://www.reric.net/linux/pci_latency.html (en anglais)
- http://www-128.ibm.com/developerworks/library/l-hw2.html#N100E6 (en anglais)
rtirq
Présentation
Il s'agit "simplement" d'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.
Un noyau-RT est évidemment conseillé !
Gentoo
Le plus simple est d'utiliser l'overlay "pro audio production applications" (voir page gentoo)echo "sys-process/rtirq ~x86" >> /etc/portage/package.keywords
emerge rtirq
rc-update add rtirq default
emerge rtirq
rc-update add rtirq default
Pour les autres
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
Pour résumer, téléchargez l'archive "rtirq-20050914.tar.gz" et décompressez-là :
wget http://lalists.stanford.edu/lau/2005/11/att-0459/rtirq-20050914.tar.gz
tar -zxvf rtirq-20050914.tar.gz
tar -zxvf rtirq-20050914.tar.gz
Placez les 2 fichiers au bon endroit et avec les droits corrects (en root) :
cp rtirq.sh /etc/init.d/rtirq
chmod 0755 /etc/init.d/rtirq
cp rtirq.conf /etc/sysconfig/rtirq
chmod 0644 /etc/sysconfig/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)
rc-update add rtirq default (pour Gentoo)
chkconfig --level 5 rtirq on (pour Mandriva. Voir aussi "drakxservice")
chkconfig --add rtirq (pour Redhat)
update-rc.d rtirq defaults (pour Ubuntu, à vérifier ❗
man chkconfig (pour les autres ❗
chkconfig --level 5 rtirq on (pour Mandriva. Voir aussi "drakxservice")
chkconfig --add rtirq (pour Redhat)
update-rc.d rtirq defaults (pour Ubuntu, à vérifier ❗
man chkconfig (pour les autres ❗
Le script utilise ensuite les commandes classiques des scripts d'initialisation de votre distribution :
/etc/init.d/rtirq start (pour démarrer)
/etc/init.d/rtirq stop (pour arrêter)
/etc/init.d/rtirq status (devinez ❗
/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).
Il paraît plus prudent de s'assurer au préalable de l'absence de conflit d'IRQ, en utilisant la commande
cat /proc/interrupts
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
Das_watchdog (Ze_Chien de garde !)
Présentation
Ce programme n'est pas indispensable, il peut néanmoins s'avérer utile dans certains cas.Optimiser, donner l'accès temps réels pour une application, c'est bien ... sauf en cas de plantage de celle-ci par exemple !
Das_Watchdog est un programme de surveillance générale pour linux qui tourne en arrière-plan pour s'assurer qu'un processus en temps réel ne va pas bloquer la machine.
Il s'inspire du programme "rt_watchdog" (http://tapas.affenbande.org/?page_id=38) en apportant quelques améliorations :
- support des noyaux 2.4 et 2.6
- passage temporaire (et non définitif) en mode "non-temps-réel"
- ouverture d'une fenêtre "pop-up" d'avertissement
Installation
Elle nécessite les dépendances suivantes :
- xmessage (intégré à X11)
- libgtop2
Pour Gentoo, le plus simple est d'utiliser l'overlay "pro audio production applications" (voir page gentoo)
echo "sys-apps/das_watchdog ~x86" >> /etc/portage/package.keywords
emerge das_watchdog
rc-update add das_watchdog default
emerge das_watchdog
rc-update add das_watchdog default
Pour les autres distributions :
Téléchargez et décompressez la dernière version ici : http://ccrma.stanford.edu/~kjetil/src/
tar -zxvf das_watchdog-x.x.x.tar.gz
make
cp das_watchdog /usr/local/sbin/
echo '/usr/local/sbin/das_watchdog >/dev/null &' >>/etc/rc.sysinit
reboot
make
cp das_watchdog /usr/local/sbin/
echo '/usr/local/sbin/das_watchdog >/dev/null &' >>/etc/rc.sysinit
reboot
Il s'agit, comme pour rtirq, d'un script d'initialisation. L'intégration dans votre sytème dépendra donc encore de votre distribution (voir ci-dessus)
Vous aurez peut-être le message suivant après la compilation :
das_watchdog and test_rt compiled. Now testing IRQ priorities... ./das_watchdog --checkirq ERROR! The "softirq-timer/0" process has only got priority 1. It should be 99. Watchdog will probably not work.
Utilisez la commande suivante pour rectifier la priorité de softirq-timer :
chrt -f -p 99 `ps -A |grep softirq-timer/0 |awk '{print $1}'` (pour le 1er processeur)
chrt -f -p 99 `ps -A |grep softirq-timer/1 |awk '{print $1}'` (si vous avez un second processeur)
etc ...
chrt -f -p 99 `ps -A |grep softirq-timer/1 |awk '{print $1}'` (si vous avez un second processeur)
etc ...
Usage
Quand un programme bloque votre machine, "das_watchdog" bascule temporairement (pendant 8 secondes) les processus "temps-réels" en mode "non-temps-réel". Un message d'avertissement s'affiche à l'écran pour vous prévenir.
Pour tester das-watchdog, l'archive vous fourni un programme de test, "test_rt". Compilez-le ("make"), fermez toutes vos tâches importantes en cours et lancez-le : il freeze votre machine et vous devriez donc voir apparaître un message de das_watchdog:
Liens
http://ccrma.stanford.edu/~kjetil/src/http://linux.softpedia.com/get/Multimedia/Audio/Das-Watchdog-10825.shtml
Gestion des priorités
➡️ A venir !L'objectif est d'expliquer comment utiliser les différents outils (qjackctl, rtirq, commande "chrt", etc.) pour obtenir quelque chose du type:
99 System timer IRQ 98 RTC IRQ 95 . Midi threads of softsynths/midi sequencers 85 82 Soundcard IRQ 70 Jackd main loop 60 . Other IRQ handlers (disk, network, USB, GFX) 40
inspiré de http://tapas.affenbande.org/?page_id=40
rt-exec
rt-exec est un utilitaire pour tester les capacités "temps-réel" d'un ordinateur.Pour plus d'infos (installation, utilisation), un fichier "read-me" est disponible ici (en anglais) : ftp://ftp.compro.net/public/rt-exec/README
Les utilisateurs de Gentoo pourront utiliser l'overlay "pro audio production applications" pour l'installer. Pour les autres, le programme peut-être téléchargé ici : ftp://ftp.compro.net/public/rt-exec
Autres optimisations
Pour finir, voici enfin quelques pistes que vous pouvez encore explorer (outre les optimisations de la page Les discs durs et hdparm :
- Méfiez-vous des tâches d'administration automatiques effectuées en arrière plan (cron, messagerie).
- Désactivez les services inutiles. La gestion des services étant très différente d'une distribution à l'autre, consultez la documentation de votre distribution. Certaines proposent des outils graphiques ("drakxservice" sous Mandriva par exemple), pour d'autres, il faudra faire ça "à l'ancienne" (commandes "rc-status" et "rc-update" sous Gentoo, etc). N'oubliez pas enfin que certains services dépendent d'autres services !
- Choisissez un desktop léger pour économiser des ressources.
(:arrow_left:) Page précédente : Accès temps réel pour les applications
Page Suivante : Retour section Optimisation Linux 2.6 ➡️