Historique: Tuto Réduire la latence des périphériques PCI
Aperçu de cette version: 3
Optimisations du système
---------
AVANT TOUT
• Le portail des débutants
• Le temps réel pour les applications
---------
ENSUITE
• Les disques durs et hdparm
• LE watchdog
• Latence des périphériques PCI
---------
LE NOYAU
• Le noyau
• Le noyau Temps-Réel
• Compiler un noyau 2.6 RT
---------
PLUS LOIN ENCORE
• Interruption matérielle - IRQ : les bases
• Gestion des IRQ
---------
OBJECTIF GÉNÉRAL
• La gestion des priorités
---------
VOIR AUSSI
• Utilisations avancées
Avant-propos : 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.À 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.
Utilisation
En changeant la valeur de latency_timer pour chaque périphérique, vous pouvez changer leurs priorités 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.
Copy to clipboard
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 :
Copy to clipboard
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) :
Copy to clipboard
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)