Ein Ingenieur von Amazon identifizierte eine spezifische Regression im Linux-Kernel 7.0, dessen Veröffentlichung für den 13. April erwartet wird. Änderungen an den Planungsparametern führten zu einem erheblichen Rückgang der Durchsatz- und Reaktionszeiten der PostgreSQL-Datenbank auf ARM64-Systemen. Bei Verwendung des Kernels 7.0 sanken die Leistungswerte im pgbench-Test "simple-update" beinahe um die Hälfte — von 98565 auf 50751.
Die Verlangsamung resultiert aus der Änderung des Preemption-Modus im Standard-Scheduler von PREEMPT_NONE zu PREEMPT_LAZY auf Architekturen, die diesen Modus unterstützen, weshalb PostgreSQL im Benutzermodus 55% der CPU-Zeit mit dem Aufruf von s_lock() verbringen musste. Um das Problem zu lösen, wurde vorgeschlagen, den Modus PREEMPT_NONE wieder als Standard festzulegen und dessen Bindung an die ARCH_NO_PREEMPT-Option zu entfernen.
Peter Zijlstra, der Autor der Änderungen, die zu der Regression führten, sowie der Maintainer des Task-Schedulers und der blockierungsbezogenen Subsysteme des Kernels, hat erklärt, dass die Korrektur im PostgreSQL-Code vorgenommen werden muss. Um den Leistungsabfall zu beheben, empfahl er, das kürzlich in den Kernel hinzugefügte Erweiterung „rseq slice“ (Restartable Sequences) in PostgreSQL zu nutzen, um die Wahrscheinlichkeit des Verdrängens des Lock-Halters zu reduzieren.
Es ist noch unklar, welche Entscheidung Linus Torvalds treffen wird, der das Prinzip vertritt, dass der Kernel die Leistung nicht beeinträchtigen und die Kompatibilität mit der Benutzerschnittstelle nicht brechen sollte. Einerseits befindet sich der Kernel 7.0 in der finalen Testphase vor der Veröffentlichung, und eine Rücknahme der Scheduler-Einstellungen könnte zu weiteren Regressionen führen, während andererseits die Benutzer möglicherweise mit einer Verdopplung des Leistungsabfalls einer der beliebtesten DBMS konfrontiert werden können.
Quelle: opennet.ru
