Zpět na domů

Linux 7.0 regrese PostgreSQL ARM64

V Linuxu 7.0 regrese v plánovači snižuje výkon PostgreSQL na ARM64 na polovinu díky PREEMPT_LAZY a růstu času v s_lock(). Amazon navrhuje rollback, Zijlstra – rseq v userspace. Řešení se očekává před vydáním.

Dvojnásobný pokles PostgreSQL na Linuxu 7.0: problém s s_lock
Advertisement 728x90

# 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.

Google AdInline article slot

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:

Google AdInline article slot
  • 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:

Google AdInline article slot
  • 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

Advertisement 728x90

Číst dál