# Regrese v Linuxu 7.0 zdvojnásobuje čas na s_lock() v PostgreSQL na ARM64
Vývojář Amazonu Salvatore DiPietro při testování PostgreSQL na předvýruchové verzi jádra Linuxu 7.0 odhalil pokles výkonu na systémech ARM64. Test pgbench ve scénáři simple-update ukázal snížení TPS z 98 565 na 50 751 – téměř dvojnásobek. Problém souvisí se změnou režimu preemptivnosti v plánovači úloh: ve výchozím nastavení bylo z PREEMPT_NONE přepnuto na PREEMPT_LAZY pro podporované architektury.
Tato změna způsobila, že PostgreSQL v uživatelském prostoru tráví 55 % času CPU na volání s_lock(). Jádro 7.0 je plánováno pro Ubuntu 26.04 LTS, vydání se očekává v polovině dubna 2026.
Podrobnosti regrese a analýza
Změna v plánovači, kterou přidal Peter Zijlstra, aktivovala PREEMPT_LAZY vázané na ARCH_NO_PREEMPT. Na ARM64 to zesiluje vyhazování úloh, což je kritické pro vysoce zatížené databázové systémy jako PostgreSQL.
Profilování ukázalo:
- Zvýšení času v s_lock() na 55 % celkového CPU.
- Snížení propustnosti a odezvy pod zátěží pgbench.
- Dopad pouze na architektury s podporou LAZY režimu.
Experti upozorňují, že finální fáze testování jádra 7.0 omezuje možnost vrácení bez rizika nových regresí.
Návrhy na opravu
DiPietro navrhuje vrátit PREEMPT_NONE jako výchozí a oddělit ho od ARCH_NO_PREEMPT. Zijlstra, autor patche a maintainer subsystému plánovače, trvá na úpravě PostgreSQL:
- Použít rozšíření rseq slice (Restartable Sequences) z jádra k minimalizaci vyhazování držitelů zámků.
- Optimalizovat zpracování spinlocků v uživatelském kódu.
Rseq slice umožňuje atomicky kontrolovat a aktualizovat stav sekvencí, čímž snižuje pravděpodobnost přerušení kritických sekcí.
Postoj komunity a rozhodnutí Linuse
Experti OpenNET zdůrazňují princip Linuse Torvaldse: jádro nesmí zhoršovat výkon ani narušovat kompatibilitu s userspace. Konflikt mezi vrácením v jádře (riziko pro vydání) a opravou v PostgreSQL (vyžaduje úpravy databázového systému) zůstává otevřený.
Pro middle/senior vývojáře testující PostgreSQL na ARM64:
- Kontrolujte výkon pgbench na jádře 7.0-rc.
- Monitorujte %CPU v s_lock() přes perf.
- Zvažte rseq pro optimalizaci zámků ve svých projektech.
- Sledujte LKML kvůli patchům plánovače.
Co je důležité
- Regrese dvojnásobně snižuje TPS PostgreSQL na ARM64 kvůli PREEMPT_LAZY.
- Zijlstra doporučuje rseq slice v userspace místo vrácení jádra.
- Rozhodnutí je na Torvaldse před vydáním Linuxu 7.0 v dubnu 2026.
- Testujte na rc verzích: perf record -e cycles pro analýzu s_lock().
— Editorial Team
Zatím žádné komentáře.