Odkryto regresję w jądrze Linux 7.0, która powoduje zmniejszenie wydajności bazy danych PostgreSQL o połowę.

Inżynier Amazona zidentyfikował regresję specyficzną dla jądra Linuksa 7.0, którego premiera planowana jest na 13 kwietnia. Zmiana ustawień harmonogramu zadań spowodowała znaczne obniżenie przepustowości i czasu reakcji podczas uruchamiania PostgreSQL na systemach ARM64. W przypadku jądra 7.0, wydajność w teście „simple-update” w programie pgbench spadła prawie dwukrotnie, z 98 565 do 50 751.

Spowolnienie było spowodowane zmianą domyślnego trybu wywłaszczania harmonogramu z PREEMPT_NONE na PREEMPT_LAZY w architekturach, które go obsługują. Spowodowało to, że PostgreSQL zużywał 55% czasu procesora na wywołanie funkcji s_lock() w przestrzeni użytkownika. Aby rozwiązać ten problem, proponuje się przywrócenie domyślnego trybu PREEMPT_NONE i odłączenie go od ustawienia ARCH_NO_PREEMPT.

Peter Zijlstra, autor zmian, które spowodowały regresję, oraz opiekun podsystemów jądra związanych z harmonogramem zadań i blokadami, stwierdził, że konieczne jest wdrożenie poprawki w kodzie PostgreSQL. Aby zaradzić spadkowi wydajności, zalecił użycie niedawno dodanego rozszerzenia „rseq slice” (Restartable Sequences) w jądrze PostgreSQL, aby ograniczyć prawdopodobieństwo usunięcia blokady.

Nadal nie wiadomo, jaką decyzję podejmie Linus Torvalds, ponieważ wyznaje on zasadę, że jądro nie powinno obniżać wydajności ani naruszać kompatybilności z przestrzenią użytkownika. Z jednej strony jądro 7.0 znajduje się w końcowej fazie testów przed premierą, a wycofanie ustawień harmonogramu mogłoby prowadzić do regresji. Z drugiej strony, użytkownicy mogliby odczuć spadek wydajności jednej z najpopularniejszych baz danych o połowę.

Źródło: opennet.ru

Dodaj komentarz