En Amazon-ingeniør identificerede en regression specifik for Linux-kernen 7.0, som forventes udgivet den 13. april. En ændring i indstillingerne for opgaveplanlæggeren resulterede i en betydelig reduktion i gennemløbshastighed og responstid, når PostgreSQL blev kørt på ARM64-systemer. Ved brug af kernen 7.0 faldt ydeevnen i pgbench "simple-update"-testen næsten dobbelt, fra 98565 til 50751.
Afmatningen skyldtes ændringen af standard scheduler-preemption-tilstanden fra PREEMPT_NONE til PREEMPT_LAZY på arkitekturer, der understøtter det. Dette forårsagede, at PostgreSQL brugte 55% af sin CPU-tid på at kalde s_lock() i brugerområdet. For at løse dette problem foreslås det at returnere PREEMPT_NONE til standardindstillingen og fjerne linket fra ARCH_NO_PREEMPT-indstillingen.
Peter Zijlstra, forfatteren af de ændringer, der forårsagede regressionen, og vedligeholderen af opgaveplanlæggeren og de låserelaterede kernelsystemer, udtalte, at en rettelse skal implementeres i PostgreSQL-koden. For at afhjælpe ydeevneforringelsen anbefalede han at bruge den nyligt tilføjede "rseq slice" (Restartable Sequences)-udvidelse i PostgreSQL-kernen for at begrænse sandsynligheden for udsættelse af låseholdere.
Det er stadig uklart, hvilken beslutning Linus Torvalds vil træffe, da han holder fast i princippet om, at kernen ikke bør forringe ydeevnen eller forstyrre kompatibiliteten mellem brugerområder. På den ene side er kernel 7.0 i den sidste testfase før udgivelsen, og tilbagerulning af scheduler-indstillingerne kan føre til andre regressioner. På den anden side kan brugerne opleve en halvering af ydeevnen for en af de mest populære databaser.
Kilde: opennet.ru
