Firma Oracle opublikowała stabilne wersje dystrybucji Oracle Linux 9 oraz jądra Unbreakable Enterprise Kernel 7 (UEK R7), które jest proponowane do wykorzystania w dystrybucji Oracle Linux jako alternatywa dla standardowego pakietu jądra z Red Hat Enterprise Linux. Dystrybucja Oracle Linux 9 oparta jest na bazie pakietów Red Hat Enterprise Linux 9 i jest w pełni binarnie zgodna z nią.
Do pobrania bez ograniczeń dostępne są obrazy ISO o wielkości 8,6 GB i 840 MB, przygotowane dla architektur x86_64 oraz ARM64 (aarch64). Dla Oracle Linux 9 otwarto nieograniczony i bezpłatny dostęp do repozytorium yum z binarnymi aktualizacjami pakietów zawierającymi poprawki błędów (errata) oraz problemy z bezpieczeństwem. Przygotowano również oddzielne, wspierane repozytoria z zestawami pakietów Application Stream oraz CodeReady Builder.
Oprócz pakietu jądra z RHEL (opartego na jądrze 5.14), w Oracle Linux oferowane jest autorskie jądro Unbreakable Enterprise Kernel 7, oparte na jądrze Linux 5.15, zoptymalizowane do współpracy z oprogramowaniem i sprzętem Oracle. Kody źródłowe jądra, w tym podział na osobne poprawki, dostępne są w publicznym repozytorium Git Oracle. Jądro Unbreakable Enterprise Kernel instalowane jest domyślnie, proponowane jako alternatywa dla standardowego pakietu jądra RHEL i oferuje szereg zaawansowanych funkcji, takich jak integracja DTrace i ulepszona obsługa Btrfs. Oprócz dodatkowego jądra pod względem funkcjonalności, wydania Oracle Linux 9 i RHEL 9 są całkowicie tożsame (lista zmian jest dostępna w ogłoszeniu RHEL9).
Kluczowe nowości w jądrze Unbreakable Enterprise Kernel 7:
- Ulepszono wsparcie dla architektury Aarch64. Rozmiar stron pamięci w 64-bitowych systemach ARM został domyślnie zmniejszony z 64 KB do 4 KB, co lepiej odpowiada pojemności pamięci i rodzajom obciążenia typowym dla systemów ARM.
- Kontynuowana jest dostawa systemu dynamicznego debugowania DTrace 2.0, który przeszedł na wykorzystanie podsystemu jądra eBPF. DTrace 2.0 działa na bazie eBPF, podobnie jak istniejące w Linuxie narzędzia do śledzenia.
- Rozszerzone możliwości systemu plików Btrfs. W Btrfs dodano asynchroniczną realizację operacji DISCARD, aby oznaczyć zwolnione bloki, które nie muszą być już fizycznie przechowywane. Asynchroniczna realizacja umożliwia nie czekanie na zakończenie DISCARD przez magazyn i wykonywanie tej operacji w tle. Dodano nowe opcje montowania w celu uproszczenia przywracania danych z uszkodzonych systemów plików: „rescue=ignorebadroots” do montowania pomimo uszkodzeń niektórych drzew korzeniowych (extent, uuid, data reloc, device, csum, free space), „rescue=ignoredatacsums” do wyłączenia weryfikacji sum kontrolnych danych oraz „rescue=all” do jednoczesnego włączenia trybów ‘ignorebadroots’, ‘ignoredatacsums’ i ‘nologreplay’. Wprowadzono znaczne optymalizacje wydajności związane z wykonywaniem operacji fsync(). Dodano wsparcie dla fs-verity (sprawdzanie autentyczności i integralności plików) oraz porównywania identyfikatorów użytkowników.
- W systemie XFS wprowadzono wsparcie dla operacji DAX, które umożliwiają bezpośredni dostęp do systemu plików z pominięciem pamięci podręcznej stron w celu wyeliminowania podwójnego buforowania. Dodano zmiany rozwiązujące problemy z przepełnieniem 32-bitowego typu danych time_t w 2038 roku, w tym propozycje nowych opcji montowania bigtime i inobtcount.
- Wprowadzono ulepszenia w systemie plików OCFS2 (Oracle Cluster File System).
- Dodano system plików ZoneFS, który upraszcza niskopoziomową pracę z zonyzowanymi urządzeniami pamięci masowej. Zonyzowane nośniki to urządzenia na twardych dyskach magnetycznych lub NVMe SSD, których przestrzeń jest podzielona na strefy, składające się z grup bloków lub sektorów, w które można tylko sekwencyjnie dodawać dane, aktualizując całą grupę bloków. System plików ZoneFS łącza każdą strefę w nośniku z osobnym plikiem, który można wykorzystać do przechowywania danych w trybie raw bez manipulacji na poziomie sektorów i bloków, co oznacza, że pozwala aplikacjom korzystać z API plików zamiast bezpośrednio odnosić się do urządzenia blokowego za pomocą ioctl.
- Stabilizowane wsparcie dla protokołu VPN WireGuard.
- Rozszerzono możliwości podsystemu eBPF. Wprowadzono mechanizm CO-RE (Compile Once — Run Everywhere), który rozwiązuje problem przenośności skompilowanych programów eBPF i pozwala na kompilację kodu programów eBPF tylko raz oraz wykorzystanie specjalnego uniwersalnego ładowacza, który dopasowuje ładowany program do bieżącego jądra oraz typów BTF (BPF Type Format). Dodano mechanizm „BPF trampoline”, który pozwala praktycznie zredukować koszty przekazywania wywołań pomiędzy jądrem a programami BPF. Umożliwiono bezpośredni dostęp do funkcjonalności jądra z programów BPF oraz wstrzymywanie przetwarzania handlerów.
- Zintegrowano detektor rozdzielonych blokad („split lock”), które występują podczas dostępu do niewyrównanych danych w pamięci, ponieważ podczas wykonywania atomowej instrukcji dane przekraczają dwie linie pamięci podręcznej CPU. Jądro może na bieżąco wykrywać takie blokady, które prowadzą do znacznego spadku wydajności, oraz generować ostrzeżenia lub wysyłać sygnał SIGBUS do aplikacji, która spowodowała blokadę.
- Zapewniono wsparcie dla Multipath TCP (MPTCP), rozszerzenia protokołu TCP, które umożliwia organizację pracy połączenia TCP z dostawą pakietów jednocześnie przez kilka tras przez różne interfejsy sieciowe przypisane do różnych. adresów IP.
- W planie zadań wdrożono tryb planowania SCHED_CORE, umożliwiający zarządzanie tym, które procesy mogą współbieżnie działać na jednym jądrze CPU. Każdemu procesowi można przypisać identyfikator cookie, określający obszar zaufania pomiędzy procesami (na przykład przynależność do jednego użytkownika lub kontenera). Przy organizowaniu wykonywania kodu, planista może zapewnić współdzielenie jednego jądra CPU tylko dla procesów związanych z jednym właścicielem, co może być używane do blokowania niektórych ataków klasy Spectre poprzez zapobieganie wykonywaniu w jednym wątku SMT (Hyper Threading) zaufanych i nieufnych zadań.
- Dla cgroups zrealizowano kontroler przydziału pamięci slab (kontroler pamięci slab), który wyróżnia się przeniesieniem ewidencji slab z poziomu stron pamięci na poziom obiektów jądra, co umożliwia współdzielenie stron slab w różnych cgroup, zamiast przydzielania odrębnych pamięci podręcznych slab dla każdej cgroup. Proponowane podejście pozwala zwiększyć efektywność wykorzystania slab, a także zmniejszyć rozmiar pamięci używanej dla slab o 30-45%, znacznie redukując całkowite zużycie pamięci przez jądro i ograniczając fragmentację pamięci.
- Zapewniono dostarczenie danych debugowania w formacie CTF (Compact Type Format), który zapewnia kompaktowe przechowywanie informacji o typach C, powiązaniach między funkcjami oraz symbolach debugowych.
- Zakończono dostarczanie modułu DRBD (Distributed Replicated Block Device) oraz urządzenia /dev/raw (do bezpośredniego dostępu do plików należy używać flagi O_DIRECT).
Źródło: opennet.ru
