Ubuntu 12.04: irqpoll führt zu ruckelndem System

John Reese

Lt. Commander
🎅Rätsel-Elite ’24
Registriert
März 2008
Beiträge
1.366
Hey,

ich habe schon seit ner halben Ewigkeit ein nervtötendes Problem mit meinem HTPC:
Ich bekomme nach ungefähr 2 Tagen Laufzeit (sagt nix dazu, ist ne HTPC-/NAS-Kombination) folgendes in der Syslog:
Code:
Oct 14 23:11:38 htpc kernel: [294586.647616] irq 19: nobody cared (try booting with the "irqpoll" option)
Oct 14 23:11:38 htpc kernel: [294586.647621] Pid: 3319, comm: cc1plus Not tainted 3.6.1-030601-generic #201210071322
Oct 14 23:11:38 htpc kernel: [294586.647623] Call Trace:
Oct 14 23:11:38 htpc kernel: [294586.647624]  <IRQ>  [<ffffffff810e94ad>] __report_bad_irq+0x3d/0xe0
Oct 14 23:11:38 htpc kernel: [294586.647634]  [<ffffffff810e9735>] note_interrupt+0x135/0x190
Oct 14 23:11:38 htpc kernel: [294586.647637]  [<ffffffff810e6f99>] handle_irq_event_percpu+0xa9/0x210
Oct 14 23:11:38 htpc kernel: [294586.647641]  [<ffffffff810aea24>] ? clockevents_program_event+0x74/0x100
Oct 14 23:11:38 htpc kernel: [294586.647643]  [<ffffffff810e714e>] handle_irq_event+0x4e/0x80
Oct 14 23:11:38 htpc kernel: [294586.647645]  [<ffffffff810ea2c4>] handle_fasteoi_irq+0x64/0x120
Oct 14 23:11:38 htpc kernel: [294586.647649]  [<ffffffff810161c2>] handle_irq+0x22/0x40
Oct 14 23:11:38 htpc kernel: [294586.647652]  [<ffffffff816a908a>] do_IRQ+0x5a/0xe0
Oct 14 23:11:38 htpc kernel: [294586.647655]  [<ffffffff8169f2ea>] common_interrupt+0x6a/0x6a
Oct 14 23:11:38 htpc kernel: [294586.647656]  <EOI>
Oct 14 23:11:38 htpc kernel: [294586.647658] handlers:
Oct 14 23:11:38 htpc kernel: [294586.647666] [<ffffffffa01a9f20>] interrupt_hw [saa7146]
Oct 14 23:11:38 htpc kernel: [294586.647668] Disabling IRQ #19
Oct 14 23:11:39 htpc kernel: [294586.929009] saa7146: saa7146 (0) saa7146_i2c_writeout [irq]: timed out waiting for end of xfer
Danach funktioniert meine TV-Karte nicht mehr und ich muss rebooten.
Boote ich mit der irqpoll-Option, so wird das System nach dem Boot und weitere 10 Sekunden unbenutzbar, weil es sehr langsam ist (Maus ruckelt, etc.).

Was kann ich da machen?
Kernel ist der Mainline Kernel 3.6.1, tritt auch mit "normalem" Ubuntu Kernel auf.

Danke.
 
Schwer zu sagen, was genau das Problem ist. Scheinbar passiert ein Interrupt, aber es gibt keinen Handle dafür. Ich würde deswegen vermuten, dass das Problem der Treiber ist. Dann wäre die Lösung die Installation einer neueren Linux Version (und beten). Wie das genau geht, findet man auf ubuntuusers.de. (Das ist übrigens auch ein kompetenterer Ort für Fragen zu Ubuntu und Linux im Allgemeinen).
 
Das ist der Treiber vom Kernel (ist dabei) - ich kann aber auch den Treiber von LinuxTV.org nehmen :D Danke, ich teste den mal.
 
Der Mailine Kernel Unterstütz zusammen mit den aktuellen Software nicht alle Funktionen im Kernel 3.6.1
Den Kernel also so auf dne Aktuellen Stand zu halten und auf Mainline zu setzten wäre der Falsche weg.
Der aktuelle Kernel im Ubuntu wäre z.B: der 3.2.0-31 generic und nicht mainline. Viele machen den Fehler und denken das wenn man den aktuellsten Kernel hat auch die geringsten Probleme damit hat. Das man gerade erst recht damit probleme kriegen kann ,ist mitunter an dienem Problem gut zu sehen.

Das irqpoll istn ichts anderes als ein Verfahren zur Steuerung des Zugriffs auf Peripheriegeräte, bei dem der Rechner in festgelegten zeitlichen Abständen die Schnittstellen abfragt. Wird dies Synchron an einem IRQ mehrmals gemacht kann es passieren das sich eine Hardware dazu aufhängt. Man kann mit der Möglichkeit bei der betreffenden Hardware den IRQ ( sofern angegeben in der Konfig) umändern . Dazu sollte man auch wissen wer alles den gleichen IRQ benutzt und welcher Treiber drauf zugreift. Oft reicht es auch die Abfragezeiten zu verändern um so ein Überschneiden zu verhindern. Auch hier muss man bei den Treibern Nachsehen wo wie und was man da machen kann. Auch kann man den Kernel auf eine ältere Version zurücksetzten oder gleich komplett neu Kompilieren ( sofern man das kann) und diese Probleme gleich aus dem Weg schaffen.
 
Zuletzt bearbeitet:
Das Problem liegt an Sandy Bridge und dass PCI dort nicht nativ unterstützt wird, also deine TV Karte (saa7146, Philips Chipsatz) Probleme macht.

Du könntest IRQ Polling im Kernelmodul beim Boot aktivieren doch das wird dein System insgesamt verlangsamen (fällt bei genug Power evtl. nicht auf), da musst du googlen oder am besten im Forum deiner Distro fragen wie du das am einfachsten einstellst, vermutlich in der modprobe.conf.

Hier das hilft dir evtl. weiter http://ubuntuforums.org/showthread.php?t=1676491&page=2
 
Zuletzt bearbeitet:
Danke für eure schnellen und kompetenten Antworten :)

Ich habe jetzt auch mal den linuxtv.org Treiber ausprobiert, aber auch der bringt keine Besserung mit sich. Daher werde ich quasi "downgraden" auf den normalen Ubuntu Kernel und mal sehen, ob irqpoll dort ohne ruckeln läuft.
Ergänzung ()

Mhh.. Problem ist jetzt nur: Laut wikipedia ist der Kernel 3.2.12 der aktuellste "normale" Ubuntu Kernel - in meiner Paketverwaltung finde ich den aber nicht. Für das Metapaket "linux-generic" wird mir der Kernel 3.5.0.17.17 angeboten.

Was nun?
 
Ich will ja nicht den Mainline Kernel :D
Das ist ja einer aus dem Mainline Archiv.
 
Der aktuellste Kernel der auch genutzt wird wird Automatisch durch


Code:
sudo apt-get update
sudo apt-get upgrade

Installiert. alternativ reicht auch aus :

Code:
sudo apt-get dist-upgrade

Bei den ersten beiden Befehlen wird die Datenbank zuerst aktualisiert ( Update) dann die Aktualisierungen aus den Quellen umgesetzt (Upgrade)

Beim Letzten Befehl wird geprüft welcher Akuelle Kernel vorhanden ist und dieser eignesetzt ( Informationen werden aus den Pakequellen genommen) .
 
Ich weiß, was apt-get update, etc. macht - und nein, der wird nicht automatisch installiert.
Wenn man ihn deinstalliert hat, dann muss man ihn manuell nachinstallieren, und jetzt ist ja eh 12.10 draußen, daher werde ich demnächst mal komplett formatieren und alles neuinstallieren :D
 
DHMH schrieb:
Ich weiß, was apt-get update, etc. macht - und nein, der wird nicht automatisch installiert.
Wenn man ihn deinstalliert hat, dann muss man ihn manuell nachinstallieren, und jetzt ist ja eh 12.10 draußen, daher werde ich demnächst mal komplett formatieren und alles neuinstallieren :D

Der Kernel wird Aktualisiert ,sofern eine Aktualisierung vorliegt und der Kernel der benutzt wird von der Versionsnummer die in den Aktualisierungen vorhanden ist sich Unterscheidet. Ich nutze z.B. Linux Mint. Eine art besseres Ubuntu . Dort hab ich Testweise einen Mainline Kernel Installiert und mit apt-get dist-upgrade getestet und siehe da der Kernel wurde auf den Aktuellen generic Downgeradet. In vielen Handbüchern wird erwähnt das mit dist-upgrade auch der Kernel mit Aktualisiert wird sofern eine Aktualisierung vorliegt. Wenn du immer noch Zweifel hast dann Beschaff dir ruhig mal Literatur zum Nachlesen :

Galileo Computing
Autoren: Johannes Plötner & Steffen Wendzel
Titel : Linux das Distributionsunabhängige Handbuch
ISBN : 978-3-8362-1090-4
Preis: 39,90

Auszug aus Seite 355 :

dist-upgrade

Einen etwas schlaueren Upgrade Mechanismus setzt apt-get dist-upgrade ein. Hier wird nämlich Versucht , mit Abhängigkeiten korrekt umzugehen, die sich durch neue Paketversionen ändern. So können z.B. nicht mehr benötigte Pakete gelöscht oder in der aktualisierten Version neu hinzugrkommene Abhängigkeiten durch neu zu Installierende Pakete gelöst werden

zitatende-

Dies Schließt auch den Kernel mit ein. Ubuntu macht es nicht anders und setzt diesen Befehl in seiner Aktualisierungsverwaltung ebenfalls mit ein. Wenn Änderungen z.B. auch an Quellen vorgenommen werden wird das durch ein zusätzliches Paket das Installiert wird gelöst. Die Quellen werden darüber dann aktualisiert und die aktuellen Versionen dann zum atualisieren des Systemens verwendet.

Fakt ist nutzt man einen Mainline (manuell Installierten) Kernel setzt apt-get dist-upgrade diesen Kernel auf den runter der aktuell in den Quellen verwendet wird.
Selbst bei einem Ubuntu 10.10 wird das gemacht ( an verschiedenen Systemen getestet).
 
Nein, tut apt-get dist upgrade nicht - zumindest nicht bei mir. :P
Ergänzung ()

So, ich habe jetzt Ubuntu 12.10 drauf, und damit Kernel 3.5.0-17 :D
Ich werde berichten, ob's immer noch Probleme gibt.
 
Zeig mal die /proc/interrupts _bevor_ es zu dem Bug kommt, um zu sehen, ob noch andere Geräte an dem fraglichen Interrupt mit dran hängen.

Hast du mal die Kernelmeldungen vom Boot komplett durchsucht, ob irgendwo was "komisches" zum Thema Interrupts auftaucht?

Außerdem kann man im BIOS oft an der IRQ-Verarbeitung durch das Board was ändern. Hier hat es z.B. jemandem geholfen, im BIOS Message Signaled Interrupts (MSI) zu aktivieren und via Option für den Treiber das Problemgerät zu zwingen, diese MSI auch tatsächlich zu nutzen.

BTW: Es ist richtig, bei solchen Bugs zuerst mit einem aktuellen, nicht von einer Distri gepatchten Kernel zu spielen, wie du es ganz oben mit 3.6.1 gemacht hast.
 
Zuletzt bearbeitet:
Ich weiß, dass es zu sehr vielen Interrupts kommt:
(Das ist sie von jetzt)
Code:
root@htpc:/proc# cat interrupts
           CPU0       CPU1
  0:         44          0   IO-APIC-edge      timer
  1:          3          0   IO-APIC-edge      i8042
  8:          1          0   IO-APIC-edge      rtc0
  9:          0          0   IO-APIC-fasteoi   acpi
 12:          4          0   IO-APIC-edge      i8042
 16:          0          0   IO-APIC-fasteoi   pata_via
 19:       1005    8335668   IO-APIC-fasteoi   saa7146 (0)
 23:        432      50468   IO-APIC-fasteoi   ehci_hcd:usb1, ehci_hcd:usb2
 41:      18435     135098   PCI-MSI-edge      ahci
 42:       4752       5405   PCI-MSI-edge      xhci_hcd
 43:          0          0   PCI-MSI-edge      xhci_hcd
 44:          0          0   PCI-MSI-edge      xhci_hcd
 45:    4979812          0   PCI-MSI-edge      eth0
 46:         13          0   PCI-MSI-edge      mei
 47:     414752          0   PCI-MSI-edge      i915
 48:       3127          0   PCI-MSI-edge      snd_hda_intel
NMI:          2          2   Non-maskable interrupts
LOC:    7800952    7757295   Local timer interrupts
SPU:          0          0   Spurious interrupts
PMI:          2          2   Performance monitoring interrupts
IWI:          0          0   IRQ work interrupts
RTR:          1          0   APIC ICR read retries
RES:    1659409    1469813   Rescheduling interrupts
CAL:        229        498   Function call interrupts
TLB:     359109     333793   TLB shootdowns
TRM:          0          0   Thermal event interrupts
THR:          0          0   Threshold APIC interrupts
MCE:          0          0   Machine check exceptions
MCP:         22         22   Machine check polls
ERR:          0
MIS:          0
root@htpc:/proc#
 
OK, kein weiteres Gerät an der 19. Hab oben noch was hinzugefügt. Schau dir mal den verlinkten Thread an. Das ist praktisch das gleiche Problem.

Im Output von "lscpi -vv" kannst du jeweils kontrollieren, auf welchen IRQ-Mechanismus die Karte gerade eingestellt ist.
 
Zuletzt bearbeitet:
Danke. Problem ist natürlich, dass ich ein sehr, naja ich nenne es mal "abgespecktes" MB habe... Ich habe das ASUS P8H67-M Pro.

Ich glaube nicht, dass ich in meinem UEFI MSI aktivieren kann.
Außerdem kann ich entweder den Kerneltreiber (also direkt stock Kernel TV Karten Support) oder den freien, von linuxtv.org nutzen. Nur: wo soll ich das einstellen können :(

Hier die Ausgabe von lspci -vv:
Code:
07:00.0 Multimedia controller: Philips Semiconductors SAA7146 (rev 01)
        Subsystem: KNC One Device 0028
        Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
        Status: Cap- 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
        Latency: 32 (3750ns min, 9500ns max)
        Interrupt: pin A routed to IRQ 19
        Region 0: Memory at f7c00000 (32-bit, non-prefetchable) [size=512]
        Kernel driver in use: budget_av
        Kernel modules: budget-av
 
Hat jemand von euch ne, Idee was man da machen kann?
Es regt mich soo dermaßen auf, dass ich da nicht weiterkomme :(
 
Leider ist für deinen SAA7146 ein anderer Treiber als für den saa716x im verlinkten Thread zuständig. Deiner kennt die Option zum Umschalten der Interrupt-Art nicht, da habe ich eben nachgeschaut. Vermutlich kann die Hardware das gar nicht. Also ist dortige Lösung nicht auf deinen Fall übertragbar. :(

Sonst fällt mir auch nichts weiter ein. Kannst wohl nur woanders um Hilfe suchen, wo sich Leute besser mit sowas auskennen als hier.
 
Mhh.. komisch ist nur, dass alles mit irqpoll funktioniert, aber das System ruckelt - lässt sich dagegen abhilfe schaffen?
 
DHMH schrieb:
Hat jemand von euch ne, Idee was man da machen kann?
Es regt mich soo dermaßen auf, dass ich da nicht weiterkomme :(

Glaub ich dir ;)

Code:
...
Subsystem: KNC One Device 0028
...
Kernel driver in use: budget_av

Das da ist dein Problem, ist doch offensichtlich :D
Dein Tuner ist ein MK4 (0028) und den kennt dein Kernel nicht, deswegen lehnt er den Interrupt ab. IRQ-Polling ist da so ziemlich das ungeschickteste, was du tun kannst. Damit sagst du dem Kernel, er soll bei allen verfügbaren "Handlern" anfragen, ob sie mit diesem Request etwas anfangen können. Deswegen geht dein System dabei auch so in die Knie.

Das einzige, was du tun musst, ist entsprechende Modul (budget-av) zu patchen, diff ist im Anhang (evtl. das Verzeichnis noch anpassen, zeigt auf linux als Verzeichnis für die Kernel Quellen).

Gutes Gelingen ;)
 

Anhänge

Zurück
Oben