Wydanie jądra Linux 6.13

Po dwóch miesiącach prac Linus Torvalds zaprezentował wydanie jądra Linux 6.13. Wśród najbardziej zauważalnych zmian znajdują się: tryb leniwego wyganiania w harmonogramie zadań, wsparcie dla atomowych zapisów w XFS i Ext4, mechanizm „multigrain timestamps”, adaptacyjny tryb włączania pollingu w podsystemie sieciowym, możliwość kompilacji z optymalizacjami AutoFDO, wsparcie dla mechanizmu ochrony ARM65 Guarded Control Stack, izolacja maszyn wirtualnych przy pomocy rozszerzenia ARM CCA, oddzielne staki w BPF, usunięcie ReiserFS, sterownik virtual-cpufreq, API netlink net-shaper, tryb montowania tmpfs z uwzględnieniem wielkości liter, wsparcie dla rozszerzeń POSIX w SMB3, sterownik AMD Cache Optimizer.

W nowej wersji przyjęto 14172 poprawek od 2086 programistów, rozmiar łaty to 46 MB (zmiany dotyczyły 15375 plików, dodano 598707 linii kodu, usunięto 406294 linie). W poprzednim wydaniu było 14607 poprawek od 2167 programistów, rozmiar łaty to 37 MB. Około 52% wszystkich zmian wprowadzonych w 6.13 dotyczy sterowników urządzeń, około 13% zmian ma związek z aktualizacją kodu specyficznego dla architektur sprzętowych, 11% dotyczy stosu sieciowego, 4% - systemów plików, a 3% - wewnętrznych podsystemów jądra.

Główne nowości w jądrze 6.13:

  • Podsystem dyskowy, wejście/wyjście i systemy plików
    • Dodano mechanizm „multigrain timestamps”, który umożliwia uzyskiwanie informacji o czasie zmiany lub dostępu do plików z dokładnością przekraczającą milisekundę, bez negatywnego wpływu na wydajność. Wzrost dokładności znaczników prowadzi do dodatkowych kosztów związanych ze zwiększoną intensywnością zapisu metadanych na dysk, dlatego w proponowanej implementacji dokładniejsze znaczniki są tworzone nie dla wszystkich plików, lecz tylko dla tych, dla których procesy żądają takich znaczników za pomocą wywołania getattr().
    • Dodano wsparcie dla atomowych operacji zapisu, w ramach których zapis danych przekraczających rozmiar sektora jest realizowany atomowo na urządzeniach pamięci masowej, które taką możliwość udostępniają. Na chwilę obecną atomowy zapis zrealizowano dla XFS, Ext4 w trybie O_DIRECT (Direct I/O) oraz md RAID 0/1/10.
    • Proponowany jest nowy mechanizm liczenia referencji do plików, który zapewnia wzrost wydajności o 3-5% w obciążeniach roboczych z więcej niż 255 wątkami.
    • Usunięto implementację systemu plików ReiserFS, który dwa lata temu został uznany za przestarzały.
    • Dodano parametru sysctl „fs.dentry-negative” do ustalania w VFS polityki usuwania rekordów „dentry” (wewnętrzna reprezentacja elementów katalogów) po usunięciu powiązanych z nimi plików. W przypadku niektórych rodzajów obciążenia lepiej jest pozostawiać takie zapisy o usuniętych plikach, a dla innych — je usuwać, dlatego w jądrze udostępniono możliwość wyboru (domyślnie „dentry” nie są automatycznie usuwane).
    • Do wywołania systemowego statmount() dodano flagę STATMOUNT_OPT_ARRAY do zwracania listy opcji systemu plików w postaci tablicy ciągów zakończonych znakiem null, które nie wykorzystują sekwencji ucieczki „\000”. Dodano obsługę zwracania podtypu FS (fs_subtype, do określenia użycia FUSE), opcji bezpiecznego montowania oraz źródłowego superbloku (sb_source).
    • W OverlayFS dodano możliwość określania warstw za pomocą deskryptorów plików, a nie nazw ścieżek plików.
    • Do systemu plików tmpfs dodano opcję montowania „casefold” do pracy bez uwzględniania wielkości liter oraz opcję „strict_encoding” do blokowania tworzenia plików z nazwami zawierającymi niepoprawne znaki UTF-8.
    • Proponowany jest nowy zestaw wywołań systemowych do zarządzania rozszerzonymi atrybutami plików: setxattrat(), getxattrat(), listxattrat() oraz removexattrat(). W przeciwieństwie do wywołań systemowych setxattr(), getxattr(), listxattr() oraz removexattr() nowe wersje wymagają podania deskryptora pliku katalogu, wobec którego przeprowadzane jest wyszukiwanie ścieżki pliku.
    • W Btrfs dodano operację ioctl BTRFS_IOC_SUBVOL_SYNC_WAIT, która obejmuje oczekiwanie na zakończenie czyszczenia podwolumenów, co pozwala na wykonanie polecenia „btrfs subvolume sync” przez użytkownika nieprivilegowanego, który nie ma dostępu do ioctl SEARCH_TREE (przydatne w aplikacjach tworzących kopie zapasowe, które oczyszczają podwolumeny). Dodano operację ioctl ENCODED_READ do odczytu za pomocą io_uring zakodowanych danych, na przykład do bezpośredniego odczytu skompresowanych rozszerzeń bez dekompresji. Kontynuowano prace nad przejściem na wykorzystanie zbiorów stron pamięci (page folios). Zredukowano występowanie konkurencyjnych blokad („lock contention”) podczas wyszukiwania osadzonych odwołań oraz podczas przeszukiwania buforów rozszerzeń. Zwiększono efektywność kompresji mapy rozszerzeń.
    • W systemie plików EROFS (Rozszerzalny System Plików Tylko do Odczytu), przeznaczonym do używania na partycjach dostępnych w trybie tylko do odczytu, wdrożono możliwość użycia w wywołaniu systemowym lseek() opcji SEEK_HOLE i SEEK_DATA.
    • W F2FS dodano wsparcie dla aliasowania urządzeń, które pozwala tymczasowo zarezerwować obszar w F2FS do użycia części bloku urządzenia w innym systemie plików. Po zakończeniu zewnętrznej operacji zarezerwowany obszar można zwrócić do F2FS. Na przykład, można stworzyć system plików za pomocą polecenia «mkfs.f2fs -c /dev/vdc@vdc.file /dev/vdb», po czym zawartość urządzenia /dev/vdc zostanie zarezerwowana i odbita w pliku vdc.file, a partycję /dev/vdc można wykorzystać według własnych potrzeb, na przykład sformatować pod inny system plików. Aby zwrócić zarezerwowaną zawartość, wystarczy usunąć plik vdc.file.
    • W XFS włączono wsparcie dla kwot dla urządzeń realtime. Dodano wsparcie dla katalogu z metadanymi, w którym umieszczane są wszystkie inode z metadanymi.
    • W mechanizmie FUSE wprowadzono możliwość dynamicznej zmiany maksymalnej liczby stron (FUSE_MAX_MAX_PAGES) z wykorzystaniem «sysctl fs.fuse.max_pages_limit». W operacji biorą udział foliany stron pamięci.
    • W SMB wprowadzono wsparcie dla rozszerzeń POSIX dla SMB3, koniecznych do przechowywania specjalnych typów plików, takich jak fifo, pliki urządzeń i linki symboliczne. Dodano możliwość montowania partycji z alternatywnym hasłem, stosowanym przy rotacji haseł. Dodano nową opcję montowania «cifs.upcall» do określania przestrzeni nazw. Zapewniono rozpoznawanie plików symbolicznych i blokowych urządzeń stworzonych w Windows NFS Server. Dodano wsparcie dla linków symbolicznych w stylu WSL (Windows Subsystem for Linux).
    • Systemy plików UBIFS, ADFS, BEFS, HFS, HFSPLUS, HPFS, JFS i ECRYPTFS zostały przestawione na użycie nowego API montowania partycji.
    • Systemy plików ECRYPTFS, UFS i NILFS2 zostały przestawione na użycie foliantów stron pamięci.
  • Pamięć i usługi systemowe
    • W planie schedulera zaimplementowano model leniwej preempcji zadań (PREEMPT_LAZY), który odpowiada modelowi pełnej preempcji dla zadań czasu rzeczywistego (RR/FIFO/DEADLINE), ale opóźnia preempcję zwykłych zadań (SCHED_NORMAL) do momentu po tik. To opóźnienie prowadzi do zmniejszenia przypadków preempcji posiadaczy blokad, co pozwala na zbliżenie wydajności do konfiguracji wykorzystujących model dobrowolnej preempcji. Dzięki temu nowy model umożliwia zachowanie możliwości pełnej preempcji w odniesieniu do zadań czasu rzeczywistego, minimalizując jednocześnie spadki wydajności dla zwykłych zadań. Dodatkowo nowy model upraszcza logikę operacji preempcji zadań w jądrze, eliminując z procesu planowania obsługę znajdującą się w innych komponentach jądra (poza schedulerem zadań).
    • Podczas kompilacji za pomocą kompilatora Clang dodano możliwość korzystania z optymalizacji.

      Ź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