ASUS P5N-E SLI + linux 2.6.20
January 31st, 2007Nachdem ich mich nun diesen Monat doch entschlossen habe fürchterlich viel Geld fuer neue Hardware auszugeben, und es natuerlich auch ein ‘cutting edge’ nvidia nforce 650i basiertes Board von Asus (Modell P5N-E SLI) mit einem Intel Core 2 Duo E6300, 2G RAM von MDT sowie einer neuen Grafikkarte (7600 GS) sein musste, habe ich die letzten zwei Wochen mit einem extrem unstabilen Rechner und jede menge fluchen verbracht.
Die Kombination aus frisch auf den Markt gekommenen Chipsatz und Dual Core CPU hat mir PCI Routing Probleme unter Linux beschert. Das heisst wenn der Rechner mal nicht eingefroren ist, so haben zumindest die PCI Geräte hin und wieder mal ihren Interrupt verschlampt. Also hat manchmal die Netzwerkkarte einfach ihren Dienst eingestellt, oder der USB Controller… alles sehr scheisse wenn man mit dem Rechner arbeiten will.
Meine erste funktionierende Lösung war ein klein wenig haarsträubend. Ich hab nämlich das IRQ Balancing im Kernel abgeschaltet (das alleine hat schonmal geholfen weil halt die IRQs nicht mehr zwischen den zwei Kernen hin und her bewegt werden, was dann zu acpi timeouts fuehrt auf dem nforce 650i Board) und dann einen eigenen userspace IRQ Balancer zurecht gehackt (ok, ich hab einfach nur den existierenden so erweitert das man IRQs angeben kann die ignoriert werden sollen).
Als ich dann allerdings mit dieser erstaunlicherweise ganz gut funktionierenden Lösung in #kernel auf freenode prahlen wollte (ich hab da einfach mal gefragt ob noch wer anders das Problem hat), hat man mich auf folgenden Eintrag in linux/Documentation/kernel-parameters.txt hingewiesen:
acpi_use_timer_override [HW,ACPI] Use timer override. For some broken Nvidia NF5 boards that require a timer override, but don't have HPET
Tja, so ist das wenn man die Dokumentation nicht genau genug liest, man übersieht zwangsläufig was, und in diesem Falle auch genau das was geholfen hätte.
Lange Rede kurzer Sinn, mit den Optionen:
acpi_use_timer_override pci=assign-busses
läuft mein Rechner nun endlich stabil, auch ohne das ich meine Interrupts von Hand auf meine beiden Kerne verteile.
Update: Leider hatte ich mich zu frueh gefreut… nach circa 24 Stunden uptime ist der Rechner doch nochmal eingefroren, bzw. die Netzwerkkarte hat ihren Interrupt verloren was besonders schlecht kommt wenn man NFS-mounted Homedirs verwendet.
Nun bin also doch wieder zurueck zu meiner urspruenglichen Loesung gewechselt, denn damit laeuft der Rechner wenigstens stabil und die paar Prozentpunkte an Performance die ich verliere weil meine IRQs nicht gebalanced werden kann ich gut verschmerzen.
Also, allen die hier ueber google hinfinden weil sie aehnliche Probleme haben wie ich mit diesem Board: schaltet das IRQ Balancing ab! Das geht via kernel-parameter noirqbalance, oder alternativ koennt ihr auch CONFIG_IRQ_BALANCE=N setzen. Letzteres musste ich sogar machen um per
echo "02" > /proc/irq/x/smp_affinity
die smp_affinity setzen zu koennen, aber das ist nur noetig wenn ihr selber Interrupts einem bestimmten Kern zuordnen wollt.