Jądro
Po dwóch miesiącach rozwoju, Linus Torvalds ujawnił wydanie nowego jądra Linuksa w wersji 5.10, wersja, która przybywa ze statusem oddziału z długim okresem wsparcia, którego aktualizacje będą publikowane przez co najmniej dwa lata.
Godne uwagi zmiany obejmują ta nowa wersja zawiera kompatybilność z mechanizmem ochrony MemTag do systemów ARM64, opcja montażu „nosymfollow”, znaczące optymalizacje Ext4, Poprawka XFS 2038, nowe wywołanie systemowe process_madvise, ulepszona obsługa AMD SEV poprzez szyfrowanie rejestru procesora, możliwość wstrzymywania programów BPF.
Nowa wersja otrzymał 17470 poprawek od 2062 programistów, Rozmiar łatki: 64 MB (zmiany dotyczyły 15101 plików, dodano 891932 linii kodu, usunięto 619716 linii). Około 42% wszystkich zmiany wprowadzone w 5.10 dotyczą sterowników urządzeńokoło 16% zmian jest związanych z aktualizacją określonego kodu dla architektur sprzętowych, 13% dotyczy stosu sieciowego, 3% dotyczy systemów plików, a 3% wewnętrzne podsystemy jądra.
Główne nowe funkcje Linuksa 5.10
Spośród głównych zmian, które zachodzą, możemy stwierdzić, że dla ext4 dodano tryb szybkich potwierdzeń (fast_commit), który znacznie zmniejsza opóźnienia w wielu operacjach na plikach z powodu szybszego opróżniania metadanych na dysk podczas wykonywania wywołania fsync (). W normalnych okolicznościach uruchomienie fsync () synchronizuje nadmiarowy zestaw metadanych. W trybie fast_commit tylko metadane wymagane do odzyskania systemu plików w przypadku awarii są przesyłane do rejestru, przyspieszając wywołania fsync () i poprawiając wydajność operacji, które aktywnie manipulują metadanymi.
Chociaż na Btrfs zawiera ważne optymalizacje wydajności związane z operacjami fsync (). Zmniejszenie rywalizacji o log mutex spowodowało 4% wzrost wydajności i 14% redukcję opóźnień podczas uruchamiania testu porównawczego dbench z 32 klientami. Eliminacja dodatkowych zatwierdzeń dla łączy i zmian nazw zwiększyła przepustowość o 6% i zmniejszyła opóźnienia o 30%. Ograniczenie fsync do oczekiwania tylko na przepisanie zwiększyło wydajność o 10-40%.
Ponadto, Implementacja Btrfs bezpośredniego wejścia / wyjścia (direct io) została przeniesiona do frameworka iomap.
XFS dodaje zmiany metadanych i-węzłów, aby rozwiązać problemy z przepełnieniem typu danych 32-bitowy time_t w 2038 roku. Podobne zmiany, które przesunęły przepełnienie licznika czasu do roku 2468, zostały dodane do kodu obliczającego czas przydziału dysku. Format XFS V4 jest przestarzały, użytkownik powinien zaktualizować FS do formatu V5, ale jest wystarczająco dużo czasu na aktualizację, ponieważ obsługa V4 pozostanie do 2030 r. XFS zmienił również rozmiar wejścia i-węzła btree, co pozwala na więcej kontroli nadmiarowości i krótsze czasy montowania.
W podsystemie FUSE zaimplementowano obsługę operacji DAX w celu bezpośredniego dostępu do systemu plików, z pominięciem pamięci podręcznej stron bez urządzenia blokującego na poziomie aplikacji, które jest używane w celu uniknięcia podwójnej pamięci podręcznej virtiofs organizacja wspólnego dostępu do systemów gości , katalogi i pliki. Virtiofs dodaje również obsługę oddzielnego montowania partycji z różnymi punktami montowania w systemie hosta.
System plików F2FS dodaje nowy tryb czyszczenia pamięci ATGC (Age Threshold Garbage Collection), ulepszona obsługa strefowych urządzeń NVMe i szybsza dekompresja skompresowanych danych.
W F2FS i Ext4 sposób pracy z nazwami plików został przeprojektowany bez uwzględnienia wielkich liter; postanowiono ujednolicić implementację nazw plików bez uwzględniania wielkości liter, przenosząc powiązany kod do wspólnej biblioteki.
Kolejna ważna zmiana dotyczy asynchroniczny interfejs we / wy io_uring, który dodaje możliwość tworzenia pierścieni z ograniczeniami które można bezpiecznie udostępnić niezaufanym procesom. Ta funkcja umożliwia aplikacji podstawowej selektywne ograniczanie dostępu tylko do jej deskryptorów pojedynczych plików do wykorzystania w aplikacjach innych firm za pośrednictwem io_uring, a do wywołania systemowego pidfd_open () dodano flagę PIDFD_NONBLOCK, aby utworzyć nieblokujący deskryptor pliku (analogicznie do O_NONBLOCK dla pidfd).