W jądrze Linux 7.0 wykryto regresję, która dwukrotnie obniża wydajność PostgreSQL

Inżynier z firmy Amazon zidentyfikował regresję specyficzną dla jądra Linux 7.0, którego wydanie przewidziano na 13 kwietnia. Zmiana ustawień planera zadań spowodowała znaczne obniżenie przepustowości i responsywności podczas pracy z bazą danych PostgreSQL na systemach z architekturą ARM64. Podczas korzystania z jądra 7.0 wyniki wydajności w teście pgbench 'simple-update' spadły niemal dwukrotnie — z 98565 do 50751.

Spowolnienie jest spowodowane zmianą trybu preempcji w domyślnym planerze z PREEMPT_NONE na PREEMPT_LAZY na architekturach obsługujących ten tryb, co sprawiło, że w użytkowym przestrzeni PostgreSQL zaczęło spędzać 55% czasu CPU na wywołaniu s_lock(). Aby rozwiązać problem, zaproponowano powrót do domyślnego trybu PREEMPT_NONE i usunięcie jego związku z ustawieniem ARCH_NO_PREEMPT.

Peter Zijlstra, autor zmian, które spowodowały regresję, i główny dostawca planera zadań oraz związanych z blokadami podsystemów jądra, stwierdził, że poprawki należy wprowadzić w kodzie PostgreSQL. Aby wyeliminować spadek wydajności, zalecił wykorzystanie w PostgreSQL niedawno dodanego do jądra rozszerzenia 'rseq slice' (Restartowalne Sekwencje) w celu ograniczenia prawdopodobieństwa preempcji posiadacza blokady.

Na razie nie wiadomo, jakie rozwiązanie przyjmie Linus Torvalds, który przestrzega zasady, że jądro nie powinno pogarszać wydajności i łamać zgodności z przestrzenią użytkownika. Z jednej strony jądro 7.0 znajduje się na ostatnim etapie testów przed wydaniem i przywrócenie ustawień planera może prowadzić do innych regresji, z drugiej strony użytkownicy mogą napotkać dwukrotny spadek wydajności jednej z najpopularniejszych baz danych.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster