Ein Ingenieur von Amazon hat eine spezifische Regression im Linux-Kernel 7.0 identifiziert, dessen Veröffentlichung am 13. April erwartet wird. Änderungen an den Einstellungen des Taskplaners führten zu einem erheblichen Rückgang der Bandbreite und Reaktionsfähigkeit beim Einsatz von PostgreSQL auf ARM64-Systemen. Bei der Verwendung des Kernels 7.0 sanken die Leistungswerte im pgbench-Test „simple-update“ fast um die Hälfte — von 98565 auf 50751.
Die Verlangsamung wurde durch die Änderung des Preemption-Modus im Standardplaner von PREEMPT_NONE auf PREEMPT_LAZY auf Architekturen, die diesen Modus unterstützen, verursacht, was dazu führte, dass PostgreSQL im Benutzerspeicher 55 % der CPU-Zeit für den Aufruf von s_lock() benötigte. Um das Problem zu lösen, wurde vorgeschlagen, den PREEMPT_NONE-Modus wieder standardmäßig einzustellen und seine Bindung an die Einstellung ARCH_NO_PREEMPT aufzuheben.
Peter Zijlstra, der Autor der Änderungen, die die Regression verursacht haben, und Maintainer des Taskplaners sowie verwandter Subsysteme des Kernels, erklärte, dass die Korrektur im PostgreSQL-Code vorgenommen werden müsse. Um den Leistungsabfall zu beheben, empfahl er die Verwendung des im Kernel neu hinzugefügten „rseq slice“-Erweiterung (Restartable Sequences) in PostgreSQL, um die Wahrscheinlichkeit der Preemption des Lock-Inhabers zu begrenzen.
Es ist noch unklar, welche Entscheidung Linus Torvalds treffen wird, da er der Regel folgt, dass der Kernel die Leistung nicht beeinträchtigen und die Kompatibilität mit dem Benutzerspeicher nicht brechen sollte. Einerseits befindet sich der Kernel 7.0 in der finalen Testphase vor der Veröffentlichung, und das Zurücksetzen der Einstellungen des Planers könnte zu anderen Regressionen führen, andererseits könnten Benutzer mit einem zweifachen Leistungsabfall einer der beliebtesten Datenbanken konfrontiert werden.
Quelle: opennet.ru
