Chargement...
 
Skip to main content

2 - Les distributions et les noyaux


IRQ et latency_timer

Salut.

En essayant d'appliquer les conseils de cette page :
Autres optimisations
édition olinuxx 10 aout 2012 : cette info sce trouve maintenant sur la page Tuto Réduire la latence des périphériques PCI)

je suis confronte a deux problemes.

Par defaut l'IRQ de ma carte son est a 22, je desactive l'apic et l'acpi en ajoutant ce qui est en gras dans la ligne suivante dans mon /boot/grub/menu.lst :
kernel /boot/vmlinuz-2.6.24.7-rt13 root=UUID=0a09138a-1fcf-4de1-a639-5b85b25fc7c0 ro noapic nolapic acpi=off

Dans mon BIOS je lui indique que lIRQ du slot PCI1 doit etre a 9.

Voila ce que j'obtiens apres reboot en faisant $ cat /proc/interrupts

[+]

Ma carte son (ICE1712) se retrouve en IRQ5 et en IRQ partage qui plus est. Meme chose si j'indique au BIOS d'attribuer l'IRQ automatiquement. C'est grave docteur?

Pour le latency_timer je fais
Copy to clipboard
# setpci -s 01:06.0 latency_timer=80

et ca fonctionne, mon latency_timer passe a 128. Par contre quand je reboote, il est a nouveau a 32.
C'est normal qu'il faille refaire la commande a chaque reboot, ou il y a un moyen de sauvegarder la manip?

Merci de votre aide, si il y en a une.
France
C'est normal, les commandes que tu passes ont un effet temporaire. Il y a certains outils d'administration (cf. Powertweak) qui utilisent un daemon lancé au boot et un fichier de config pour restaurer ce genre de paramètres. Sinon en fonction de ta distribution il y a peut-être un script qui est lancé au boot après tout les autres et où tu peux ajouter des commandes perso de ce genre.

Note: si tu en as la possibilité essayes de changer de slot ta carte son.
Par contre quand je reboote, il est a nouveau a 32.


Personnellement, je me suis fait un petit script init pour ma gentoo, comme ça le réglage est rétabli à chaque reboot (avec TuxOnIce je reboote rarement, mais bon). Seulement, ces scripts sont très "distribution-dépendants", il faut donc que tu trouves une doc adaptée à ta distribution.

T.
Ok, merci, j'ai installe Powertweak et ca fonctionne. C'est simple a utiliser, je lance powertweakd au demarrage et voila. Ca ne fonctionnait pas en essayant de passer
Copy to clipboard
# setpci -s 01:06.0 latency_timer=80
directement dans le script de demarrage.

Par contre je n'ai toujours pas compris pourquoi quoi que je tente, l'IRQ de la carte son reste soit a 22 avec l'apic, soit a 5 sans l'apic.
Bon, en echangeant la carte son avec la carte ethernet sur les slots PCI et en reglant le slot PCI2 sur 10 dans le BIOS, j'obtiens ca :
Copy to clipboard
$ cat /proc/interrupts CPU0 0: 44272 IO-APIC-edge timer 1: 57 IO-APIC-edge i8042 2: 0 XT-PIC-XT cascade 3: 1 IO-APIC-edge 4: 1 IO-APIC-edge 5: 2 IO-APIC-fasteoi ehci_hcd:usb2, sata_nv 7: 1 IO-APIC-edge parport0 8: 2 IO-APIC-edge rtc 10: 9307 IO-APIC-fasteoi ohci_hcd:usb1, ICE1712 11: 8870 IO-APIC-fasteoi sata_nv, firewire_ohci, eth1 15: 483 IO-APIC-edge ide1 NMI: 0 Non-maskable interrupts LOC: 44091 Local timer interrupts RES: 0 Rescheduling interrupts CAL: 0 function call interrupts TLB: 0 TLB shootdowns TRM: 0 Thermal event interrupts SPU: 0 Spurious interrupts ERR: 1 MIS: 0

Au passage, je viens de tester et ça marche :
Comme nous lançons tous Jack, un moyen simple d'être certain d'avoir un "latency_timer" élevé pour la carte-son est d'aller dans Jack/setup/options à :
"Execute script on Startup", et après "artsshell -q terminate" ajouter "; setpci -s 0x:0x.x latency_timer=ff" où "0x:0x.x" est l'identifiant de la carte-son obtenu par "lspci -v".

La carte-son aura alors la latence max de 248 (pour ff) et sera donc prioritaire sur les autres PCI...
Après 2 heures de tests en multipistes Ardour, aucun Xrun avec 2,67 de latence dans Jack contre 5,33 auparavant et quelques avalanches de xruns.
Sur 64studio amd64.

France
Merci pour cette petite astuce.

@Trinine : est ce que tu pourrais nous partager ton script ? ça m'interresse de voir comment tu as fais vu que je suis aussi sous Gentoo.
PS

Juste un détail, en relisant :
j'ai oublié le "sudo" avant le "setpci"...
@Trinine : est ce que tu pourrais nous partager ton script ? ça m'interresse de voir comment tu as fais vu que je suis aussi sous Gentoo.


OK, voici donc pour les gentoïstes, sachant que ça doit facilement pouvoir s'adapter.
Chez moi (lspci pour avoir ces infos) :
02:0d.0 = firewire
01:00.0 = Carte graphique

1) Le script /etc/init.d/Firewire_Latency :

Copy to clipboard
#!/sbin/runscript # Copyright 1999-2006 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 # $Header: $ #depend() { #} start() { ebegin "Optimisation de la latence Firewire" /usr/sbin/setpci -s 02:0d.0 latency_timer=f8 /usr/sbin/setpci -s 01:00.0 latency_timer=80 eend $? } stop() { ebegin "Réajustement de la latence Firewire à la valeur par défaut" /usr/sbin/setpci -s 02:0d.0 latency_timer=20 /usr/sbin/setpci -s 01:00.0 latency_timer=f8 eend $? } #restart() { # #}


2) Pour l'activer :
Copy to clipboard
# rc-update add Firewire_Latency default


3) Chez moi, un simple "vi /etc/init.d/Mon_nouveau_script" me crée un nouveau document avec le squelette du script init tout prêt 😉 . D'ailleurs, ça marche avec d'autres fichiers "système" (ebuilds par exemple)...

T.