Un ingegnere della Amazon ha rilevato una regressione specifica per il kernel Linux 7.0, il cui rilascio è atteso per il 13 aprile. La modifica delle impostazioni dello scheduler dei processi ha portato a una significativa riduzione della larghezza di banda e della reattività durante l'uso del database PostgreSQL su sistemi con architettura ARM64. Con il kernel 7.0, le prestazioni nel test pgbench "simple-update" sono diminuite di quasi la metà — da 98565 a 50751.
Il rallentamento è causato dalla modifica della modalità di preemption nello scheduler predefinito, da PREEMPT_NONE a PREEMPT_LAZY, sulle architetture che supportano tale modalità, per cui nello spazio utente PostgreSQL trascorre il 55% del tempo CPU a chiamare s_lock(). Per risolvere il problema si propone di ripristinare come predefinita la modalità PREEMPT_NONE e rimuoverne il legame con l'impostazione ARCH_NO_PREEMPT.
Peter Zijlstra, autore delle modifiche che hanno causato la regressione e mantenitore dello scheduler e dei sottosistemi di locking del kernel, ha dichiarato che la correzione deve essere apportata nel codice di PostgreSQL. Per eliminare la caduta delle prestazioni, ha consigliato di utilizzare in PostgreSQL l'estensione recentemente aggiunta al kernel "rseq slice" (Restartable Sequences) per limitare la probabilità di preemption del proprietario del lock.
Non è chiaro quale soluzione adotterà Linus Torvalds, che segue la regola che il kernel non dovrebbe peggiorare le prestazioni e rompere la compatibilità con lo spazio utente. Da un lato, il kernel 7.0 si trova nella fase finale di test prima del rilascio e un rollback delle impostazioni dello scheduler potrebbe portare ad altre regressioni, dall'altro lato, gli utenti potrebbero affrontare una riduzione delle prestazioni di quasi la metà di uno dei database più popolari.
Fonte: opennet.ru
