Sheaves w jądrze Linux 6.18 – nowa era alokacji pamięci

Linux to system, który nieustannie ewoluuje – czasem w sposób spektakularny, a czasem w miejscach, których przeciętny użytkownik nigdy nie zobaczy. Jedną z takich zmian, która może znacząco wpłynąć na wydajność systemu, jest wprowadzenie mechanizmu Sheaves w jądrze Linux 6.18 . Brzmi tajemniczo? Zanurzmy się w techniczne szczegóły i odkryjmy, dlaczego to rozwiązanie może być przełomowe. 🐧

Co to są „Sheaves”?

„Sheaves” (z ang. „snopy”) to nowa warstwa cache’owania w alokatorze pamięci SLUB – jednym z mechanizmów zarządzania pamięcią w jądrze Linux. W skrócie, chodzi o optymalizację alokacji obiektów w pamięci dla każdego CPU z osobna, zamiast korzystania z współdzielonych struktur, które mogą powodować blokady i spowolnienia.

Technicznie rzecz ujmując:

  • Sheaves to opcja opt-in dla cache’ów pamięci, która tworzy tablicową warstwę cache per CPU.
  • Każdy rdzeń procesora otrzymuje swój własny „snop” obiektów gotowych do alokacji i zwolnienia.
  • Dzięki temu zmniejsza się potrzeba synchronizacji między rdzeniami – co przekłada się na mniej blokad (locks) i większą wydajność2.

Różnice względem poprzednich rozwiązań

Przed Sheaves, SLUB korzystał z tzw. partial slabs – struktur współdzielonych między rdzeniami, które wymagały synchronizacji przy alokacji i zwalnianiu obiektów. To działało dobrze… do czasu.

W systemach z wieloma rdzeniami (np. serwery, stacje robocze), współdzielenie tych struktur prowadziło do:

  • zawężeń wydajności (CPU czekały na dostęp do zasobów),
  • częstych operacji atomowych, które są kosztowne czasowo,
  • spadków wydajności w intensywnych scenariuszach, np. przy pracy z VMA (Virtual Memory Areas) czy drzewami maple.

Sheaves eliminują te problemy, oferując:

  • alokację bez operacji atomowych dzięki local_trylock(),
  • lepsze wsparcie dla kfree_rcu() – obiekty są grupowane i zwalniane hurtowo, co poprawia efektywność,
  • kompatybilność z NUMA, slub_debug i innymi funkcjami SLUB.

Jak debugować zjawiska i zachowania kernela Linuxa ze SLUB?

SLABDBG – rozszerzenie do otwartego debuggera DBG

(gdb) slab list
name                    objs inuse slabs size obj_size objs_per_slab pages_per_slab
ext4_groupinfo_4k         28    28     1  144      144            28              1
ip6_dst_cache             10     1     1  384      384            10              1
UDPLITEv6                  0     0     0 1088     1072            -1             -1
UDPv6                     15     0     1 1088     1072            15              4
tw_sock_TCPv6              0     0     0  272      264            -1             -1
request_sock_TCPv6         0     0     0  328      320            -1             -1
TCPv6                      0     0     0 2048     2032            -1             -1
nf_conntrack_1             0     0     0  320      312            -1             -1
ashmem_area_cache         13     3     1  312      312            13              1
---Type <return> to continue, or q <return> to quit---q

SALT – bardziej narzędzie do szukania podatności, ale również ciekawe!

> salt help
Possible commands:

filter -- manage filtering features by adding with one of the following arguments
       enable -- enable filtering. Only information about filtered processes will be displayed
       disable -- disable filtering. Information about all processes will be displayed.
       status -- display current filtering parameters
       add process/cache <arg>-- add one or more filtering conditions
       remove process/cache <arg>-- remove one or more filtering conditions
       set -- specify complex filtering rules. The supported syntax is "salt filter set (cache1 or cache2) and (process1 or process2)".
       Some variations might be accepted. Checking with "salt filter status" is recommended. For simpler rules use "salt filter add".


record -- manage recording features by adding with one of the following arguments
       on -- enable recording. Information about filtered processes will be added to the history
       off -- disable recording.
       show -- display the recorded history
       clear -- delete the recorded history

trace <proc name> -- reset all filters and configure filtering for a specific process

walk -- navigate all active caches and print relevant information

walk_html -- navigate all active caches and generate relevant information in html format

walk_json -- navigate all active caches and generate relevant information in json format

help -- display this message

Benchmarki mówią same za siebie

W testach mikrobenchmarkowych w jądrze:

  • Przy alokacji i zwalnianiu 100 obiektów, Sheaves dają wzrost wydajności o 31% (bez memcg) i ~25% (z memcg).
  • Nawet przy małych partiach (1–10 obiektów), zyski wynoszą 11–17%.

To nie są kosmetyczne zmiany – to realne przyspieszenie działania systemu w krytycznych obszarach!

Ciekawostka: skąd nazwa „Sheaves”?

Nazwa „Sheaf” została zaproponowana przez Matthew Wilcox, jako alternatywa dla historycznego terminu „magazine” używanego w SLAB. Aby uniknąć skojarzeń z klasycznym podejściem Bonwicka, wybrano bardziej świeże i obrazowe określenie – „snop” obiektów. Co więcej, cache współdzielony dla węzła NUMA nazwano… „barn” (stodoła). Tak, kernel może być poetycki. Oto źródłowy materiał na ten temat.

Dlaczego to ważne dla użytkownika?

Choć Sheaves to zmiana głęboko techniczna, jej wpływ może być odczuwalny wszędzie:

  • Szybsze działanie systemu w środowiskach wielordzeniowych,
  • Lepsza skalowalność dla kontenerów i maszyn wirtualnych,
  • Mniejsze zużycie CPU przy intensywnych operacjach pamięciowych.

To kolejny krok w kierunku uczynienia Linuksa jeszcze bardziej wydajnym i gotowym na przyszłość.

Podsumowanie

Sheaves to nie tylko nowa funkcja – to przemyślana ewolucja mechanizmu SLUB, która rozwiązuje realne problemy wydajnościowe. Jeśli interesujesz się jądrem Linuksa, to warto śledzić rozwój tej funkcji – szczególnie że może stać się domyślnym rozwiązaniem w przyszłych wersjach.

A jeśli jesteś fanem Linuksa – pamiętaj, że nawet „snopy” mogą zrobić różnicę w Twoim systemie Linux 🐧.

TUX - maskotka systemu Linux

About the author

Autor "BIELI" to zapalony entuzjasta otwartego oprogramowania, który dzieli się swoją pasją na blogu poznajlinuxa.pl. Jego wpisy są skarbnicą wiedzy na temat Linuxa, programowania oraz najnowszych trendów w świecie technologii. Autor "BIELI" wierzy w siłę społeczności Open Source i zawsze stara się inspirować swoich czytelników do eksplorowania i eksperymentowania z kodem.