Zurück zur Startseite

Linux 7.0 Regression PostgreSQL ARM64

In Linux 7.0 halbiert Scheduler-Regression die PostgreSQL-Leistung auf ARM64 durch PREEMPT_LAZY und längere Zeit in s_lock(). Amazon schlägt Rollback vor, Zijlstra – rseq im Userspace. Lösung vor Release erwartet.

PostgreSQL-Leistungseinbruch um das Zweifache auf Linux 7.0: s_lock-Problem
Advertisement 728x90

Regression in Linux 7.0 verdoppelt Zeitaufwand für s_lock() in PostgreSQL auf ARM64

Der Amazon-Entwickler Salvatore DiPietro entdeckte einen Leistungsabfall auf ARM64-Systemen, als er PostgreSQL auf der Pre-Release-Version des Linux-Kernels 7.0 testete. Der pgbench-Test im simple-update-Szenario zeigte einen TPS-Abfall von 98.565 auf 50.751 – nahezu halbiert. Das Problem rührt von einer Änderung im Preemptionsmodus des Task-Schedulers her: Der Standardwert wurde für unterstützte Architekturen von PREEMPT_NONE auf PREEMPT_LAZY umgestellt.

Diese Änderung führte dazu, dass PostgreSQL im Benutzerraum 55 % der CPU-Zeit für s_lock()-Aufrufe aufwandte. Kernel 7.0 ist für Ubuntu 26.04 LTS vorgesehen, dessen Release Mitte April 2026 erwartet wird.

Details zur Regression und Analyse

Die Scheduler-Änderung, vorgenommen von Peter Zijlstra, aktivierte PREEMPT_LAZY, das mit ARCH_NO_PREEMPT verknüpft ist. Auf ARM64 steigert dies die Task-Preemption erheblich, was für hochbelastete DBMS wie PostgreSQL kritisch ist.

Google AdInline article slot

Das Profiling ergab:

  • Zeit in s_lock() schwoll auf 55 % der Gesamt-CPU an.
  • Reduzierter Durchsatz und Reaktionsfähigkeit unter pgbench-Last.
  • Betroffen sind nur Architekturen mit LAZY-Modus-Unterstützung.

Experten weisen darauf hin, dass die abschließende Testphase für Kernel 7.0 eine Rücksetzung erschwert, ohne neue Regressionsrisiken einzugehen.

Vorgeschlagene Lösungen

DiPietro schlägt vor, standardmäßig zu PREEMPT_NONE zurückzukehren und es von ARCH_NO_PREEMPT zu entkoppeln. Zijlstra, Autor des Patches und Maintainer des Scheduler-Subsystems, besteht darauf, PostgreSQL zu optimieren:

Google AdInline article slot
  • Die Kernel-Erweiterung rseq slice (Restartable Sequences) nutzen, um Preemption von Lock-Haltern zu minimieren.
  • Spinlock-Behandlung im Benutzerraum-Code optimieren.

rseq slice ermöglicht atomare Überprüfung und Aktualisierung von Sequenzzuständen und verringert das Risiko, kritische Abschnitte zu unterbrechen.

Position der Community und Linus’ Entscheidung

OpenNET-Experten betonen das Prinzip von Linus Torvalds: Der Kernel darf weder die Leistung verschlechtern noch die Kompatibilität zum Benutzerraum brechen. Der Konflikt zwischen Kernel-Rücksetzung (Release-Risiko) und PostgreSQL-Fix (erfordert DBMS-Anpassungen) ist noch ungelöst.

Für Mid- und Senior-Entwickler, die PostgreSQL auf ARM64 testen:

Google AdInline article slot
  • Benchmarken Sie die pgbench-Leistung auf Kernel 7.0-rc.
  • Überwachen Sie %CPU in s_lock() via perf.
  • Ziehen Sie rseq für Lock-Optimierung in Ihren Projekten in Betracht.
  • Beobachten Sie LKML nach Scheduler-Patches.

Wichtige Punkte

  • Regression halbiert PostgreSQL-TPS auf ARM64 durch PREEMPT_LAZY.
  • Zijlstra empfiehlt rseq slice im Benutzerraum statt Kernel-Rücksetzung.
  • Torvalds entscheidet vor Linux-7.0-Release im April 2026.
  • rc-Versionen testen: perf record -e cycles für s_lock()-Analyse.

— Editorial Team

Advertisement 728x90

Weiterlesen