ubuntuusers.de

Interrupt-Prioritäten anschauen

Status: Ungelöst | Ubuntu-Version: Ubuntu 12.04 (Precise Pangolin)
Antworten |

stefanhuglfing

Anmeldungsdatum:
6. Januar 2010

Beiträge: 37

wie finde ich heraus, welche Priorotäten den verschiedenen Interrupts zugeordnet sind? In der Datei proc/interrupts steht:

          CPU0       CPU1       
  0:         43         18   IO-APIC-edge      timer
  1:        916         23   IO-APIC-edge      i8042
  7:          1          0   IO-APIC-edge    
  8:          0          1   IO-APIC-edge      rtc0
  9:       4480        322   IO-APIC-fasteoi   acpi
 12:    1535558        144   IO-APIC-edge      i8042
 16:       6565        740   IO-APIC-fasteoi   ohci_hcd:usb3, ohci_hcd:usb4, pata_atiixp, snd_hda_intel
 17:          0         26   IO-APIC-fasteoi   ehci_hcd:usb1
 18:         10        202   IO-APIC-fasteoi   ohci_hcd:usb5, ohci_hcd:usb6, mmc0, jmb38x_ms:slot0
 19:    1232811         55   IO-APIC-fasteoi   ehci_hcd:usb2, ath9k
 21:          5          2   IO-APIC-fasteoi   yenta
 22:      71193       9356   IO-APIC-fasteoi   ahci
 45:         26         56   PCI-MSI-edge      snd_hda_intel
 46:          0          3   PCI-MSI-edge      eth0
 47:       5074    1352021   PCI-MSI-edge      fglrx[0]@PCI:1:0:0
NMI:        212        224   Non-maskable interrupts
LOC:    1701843    1576825   Local timer interrupts
SPU:          0          0   Spurious interrupts
PMI:        212        224   Performance monitoring interrupts
IWI:          0          0   IRQ work interrupts
RES:    1858412    2100824   Rescheduling interrupts
CAL:        510       1295   Function call interrupts
TLB:      53008      52803   TLB shootdowns
TRM:          0          0   Thermal event interrupts
THR:          0          0   Threshold APIC interrupts
MCE:          0          0   Machine check exceptions
MCP:         18         18   Machine check polls
ERR:          1
MIS:          0

Das ist es wohl nicht.

Kann jemand einen Tipp geben?

TraumFlug

Avatar von TraumFlug

Anmeldungsdatum:
16. Juli 2009

Beiträge: 999

Wohnort: zwischen den ohren

Hm. Ich weiss jetzt nicht, ob es überhaupt die Möglichkeit gibt, in Hardware was zu machen, oder wie Linux das genau handhabt. Es gibt aber einen "Threaded" IRQ Modus (Kernelparameter "threadirqs"), der es ermöglicht den einzelnen Handlern Echtzeitprioritäten zuzuweisen. Dabei gibt es durchaus auch die Möglichkeit, userspaceprozessen/threads höhere Prioritäten zuzuweisen, als bestimmten Interrupten! Interrupthandler werden damit glaube ich auch unterbrechbar durch höhere priorisierte irqs/threads.

In Hardware müsste man den Controller umprogrammieren können, ich weiss dass es früher bei manchen PCs durchaus üblich war, im Bios eine Prioritätsliste bearbeiten zu können. Ich habe das aber grade so erklärt gelesen, dass Linux nach einen anderen Schema funktioniert, wo die Handler bis auf einen kleinen Teil anschliessend "soft" ausgeführt werden. Wäre interessant, mal eine Info zu finden, wie's genau geregelt ist, aber wenn man das gross was drehen könnte, gäbe es wohl den "threadirqs" Modus nicht?

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Das Problem ist, dass Du Dir die Prioritäten der Interrupts nicht statisch vorstellen darfst:

Klar gibt es eine Priorisierung durch den IPC, aber das entscheidende ist doch, wie lange die betreffende Interrupt-Routine weitere Interrupts sperrt (cli / sti). Das ist der entscheidende Faktor.
→ siehe auch "Linux Interrupt Handling".

Die Thread-Priorisierung ist wieder ein anderes Kapitel ...
Aber: was hast Du genau vor, zu welchem Zweck brauchst Du die Prioritäten ?

LG,

track

stefanhuglfing

(Themenstarter)

Anmeldungsdatum:
6. Januar 2010

Beiträge: 37

Wenn ich eine MIDI-Klaviertastatur verwende, egal ob eine virtuelle (z.B. virtual keyboard ftp://ftp.suse.com/pub/people/tiwai/vkeybd/ ) oder ein echtes ePiano, kämpfe ich mit einer hohen Latenzzeit: Der Ton erklingt erst kurze Zeit nachdem ich die Taste gedrückt habe. Es sind zwar nur Sekundenbruchteile aber es ist doch so lang, dass man nicht mehr ordentlich spielen kann.

Nun habe ich hier

http://wiki.ubuntuusers.de/Tonstudio/Konfiguration#Optionale-Anpassungen-bei-Problemen

und hier

http://wiki.ubuntuusers.de/schedutils#chrt

gelesen, dass man bei Verwendung eines Echtzeitkernels (und für den Zweck verwende ich Ubuntu-Studio) mit chrt die Interrupt-Prioritäten verändern kann. Vor dem Verändern möchte ich Sie mir aber anschauen.

(Das Buch, das du (track) angegeben hast ist, denke ich, für Treiber-Programmierer, aber trotzdem interessant für mich.)

TraumFlug

Avatar von TraumFlug

Anmeldungsdatum:
16. Juli 2009

Beiträge: 999

Wohnort: zwischen den ohren

Für solche Zwecke gibt es sinnvolle Standardeinstellungen/-komponenten in Ubuntu. Etwa den "lowlatency"-Kernel, der auf tasking auf 1000 statt 250 hz betreibt (wohl vor allem für MIDI sinnvoll). Die "rtirq-init" Komponente wurde mit ihm bei mir (normales xubuntu) gleich mitinstalliert, und macht eigentlich einen ganz guten Job: die "threadirqs" Option ist im lowlat Kernel standardmässig an, und rtirq setzt darauf für die irq Threads schonmal mit chrt automatisch Prioritäten, die man aber noch nachbearbeiten kann. Ich würde mich aber wundern, wenn das in ubustudio nicht eh schon alles standardmässig an ist...

Ich vermute aber eher, deine Soundausgabe ist nicht auf niedrige Latenz konfiguriert, also das Problem liegt bei der Klangerzeugung. Welchen Synthesizer benutzt du, läuft der über Jack, ist Jack richtig konfiguriert in Sachen Latenz?

Die rtprio-Werte (chrt modifiziert) der softirqthreads kannst du jedenfalls mit:

ps -eo cmd,rtprio --sort=-rtprio

bzw

ps -eo cmd,rtprio --sort=-rtprio | grep irq

ansehen.

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

stefanhuglfing schrieb:

Wenn ich eine MIDI-Klaviertastatur verwende, ... kämpfe ich mit einer hohen Latenzzeit: Der Ton erklingt erst kurze Zeit nachdem ich die Taste gedrückt habe. Es sind zwar nur Sekundenbruchteile aber es ist doch so lang, dass man nicht mehr ordentlich spielen kann.

Nun habe ich hier

http://wiki.ubuntuusers.de/Tonstudio/Konfiguration#Optionale-Anpassungen-bei-Problemen

und hier

http://wiki.ubuntuusers.de/schedutils#chrt

gelesen, dass man bei Verwendung eines Echtzeitkernels (und für den Zweck verwende ich Ubuntu-Studio) mit chrt die Interrupt-Prioritäten verändern kann. Vor dem Verändern möchte ich Sie mir aber anschauen.

Ein Echtzeit-Kernel, mitsamt den dazu nötigen Umstellungen, ist hier in der Tat der einzig sinnvolle Ausweg.
Das Problem sind nämlich überhaupt nicht die Interrupts, sondern die Latenz, durch das Umschalten der Tasks ! 😉

track

Antworten |