Релиз на ядрото Linux 6.15

След два месеца разработка, Линус Торвалдс представи версия на ядрото на Linux 6.15. Сред най-забележителните промени са: механизъм за одит в Landlock, режим на фиксиране на паметта, подсистема fwctl, драйвера Nova за GPU NVIDIA, реализиране на хостинг система за хипервизор Hyper-V, поддръжка на зонирани устройства за съхранение в XFS, оптимизация на мрежовата подсистема, scrub проверка в Bcachefs, възможност за контрол над операциите чрез io_uring.

В новата версия са включени 15945 поправки от 2154 разработчици, размерът на пача е 59 МБ (промените засягат 13596 файла, добавени са 739608 реда код, изтрити са 312168 реда). В предишното издание имаше 12115 поправки от 1984 разработчици, размерът на пача беше 39 МБ. Около 41% от всички представени в 6.15 промени са свързани с драйверите на устройствата, около 16% от промените се отнасят до обновление на код, специфичен за хардуерни архитектури, 13% са свързани с мрежовия стек, 5% — с файловите системи и 4% с вътрешните подсистеми на ядрото.

Основните нововъведения в ядрото 6.15 са:

  • Дискова подсистема, вход/изход и файлови системи
    • В механизма fanotify е добавена възможност за проследяване на събития при монтиране и демонтиране.
    • В XFS е добавена поддръжка на зонирани устройства за съхранение (разделение на зони групи от блокове или сектори, в които е разрешено само последователно добавяне на данни с обновление на цялата група блокове). Добавен е флаг rwf_dontcache за деактивиране на кеширането при запис. Реализирана е възможност за атомарен запис на няколко блока данни наведнъж.
    • В Btrfs е реализирана възможност за задаване на отрицателни нива на компресия zstd при монтиране (от -15 до -1, например, „compress=zstd:-5“), което осигурява по-висока скорост на работа с цената на намалена ефективност на компресия. Подобрино е кеширането на файловите пътища (при проведен тест операцията „send“ е ускорена с 30%). Добавена е поддръжка за блокове с размер 2Кб.
    • В EXT4 е повишена производителността при възпроизвеждане на журнала с много голям брой отзивани записи (натоварване, характерно за дялове под ФС Lustre). Реализиран е линейно търсене на записи „dentry“ (вътрешно представяне на елементите на каталог), решаващо проблемите с достъпа до определени файлове в режим без разграничаване на малки и големи букви. Възстановена е работата на опцията за монтиране „errors=remount-ro“. Повишена е устойчивостта при обработка на повреждани файлови системи.
    • В F2FS е реализиран ioctl за получаване на информация за приоритета на операции за входно/изходни данни за зададен файл. Извършена е работа по преминаване на използването на странични фолия на паметта (page folios).
    • В Bcachefs е добавен режим „scrub“, при който се извършва проверка на коректността на прочита на всички данни и метаданни от файловата система. При установяване на грешки се стартира процедура за възстановяване. В Bcachefs също така е добавена поддръжка за работа с файлови системи, размерът на блока на които е по-голям от размера на страницата на паметта. Форматът на дисковите структури Bcachefs е стабилизиран (по-нататъшни промени в формата ще се реализират под формата на опционални добавки).
    • В EROFS е добавена поддръжка за 48-битова адресация на блокове.
    • В подсистемата FUSE са реализирани sysctl default_request_timeout и max_request_timeout за задаване на тайм-аутите за изпълнение на запитвания, което позволява наблюдение на блокирането на компонентите FUSE, работещи в пространството на потребителя. Максималният размер на имена на файлове в FUSE е увеличен до 1024 символа.
    • В системния повик statmount() е добавена възможността за получаване на информация за мапинга на идентификаторите на потребителите на монтираните файлови системи, прилагана за съпоставяне на файлове на определен потребител на монтиран чужд дял с друг потребител в текущата система.
    • Релизирана е възможността за създаване на точка на монтиране с различен мапинг на идентификатора на потребителите, от този на изходния монтиран дял.
    • В API за управление на монтирането са внесени промени, опростяващи сглобяването на сложни йерархии на файлови системи без разкриване на отделни части от файловите системи, които трябва да останат скрити.
    • В подсистемата за работа с блочни устройства е добавена поддръжка на хардуерни устройства за защита на ключовете за криптиране.
    • В файловата система SMB е реализирана опция is_network_name_deleted и е включен по подразбиране режим smb_server_kerberos5.
    • За файловата система OverlayFS е добавена опция за монтиране „override_creds“, при указването на която за достъп до по-ниските нива на хранилището ще се използват идентификационните данни на извикващия потребител, а не на монтиращия. Това изменение, например, позволява при монтиране на OverlayFS да се изисква потребител с пълномощия CAP_SYS_ADMIN, но да се използва файловата система с идентификационни данни без тази привилегия.
    • В exFAT операцията по изтриване на файлове е ускорена. Вместо да изпраща заявки за „отказ“ поотделно за всеки освободен кластер на изтривания файл, драйверът вече групира заявките. В проведен тест времето за изтриване на файл с размер 80 ГБ е намалено от 286 секунди на 1.6 секунди.
    • Всички псевдо-файлови системи, както и файловите системи EXT2, са преминали на използването на новото API за монтиране на дялове.
    • Кодът за поддръжка на файловите системи SYSV (SystemV/386, Xenix и Coherent) е премахнат, след като от 2023 година е обозначен като неподдържан (orphaned).
  • Памет и системни услуги
    • Минималната версия на GCC, необходима за компилиране на ядрото, е повишена до 8.1, а Clang – до 15.0.0.
    • Добавена е подсистемата fwctl (Firmware Control), която предоставя API за безопасно управление на фърмуер и изпълнение на обработващи функции от потребителското пространство. На базата на fwctl са подготвени драйвери за устройства CXL (Compute Express Link), Ethernet адаптери Mellanox ConnectX (mlx5) и сервисни карти AMD/Pensando.
    • Разширени са възможностите на механизма pidfd, което позволява използването на идентификатори, свързани с конкретни процеси и които в отличие от pid не могат да се преопределят. Предоставена е възможност за извличане на данни за състоянието на завършване на процес, идентифициран чрез pidfd, след като родителският процес е получил потвърждение за завършването на дочерния процес (reaped) и ресурсите му са били освободени. В системните повиквания е добавен флаг PIDFD_SELF, с помощта на който процесът може да се позовава на самия себе си.
    • За архитектурата RISC-V е реализирана поддръжка на разширения BFloat16, Zaamo (атоми операции с памет), Zalrsc (Load-Reserved/Store-conditional) и ZBKB (битови операции за криптография).
    • При трасировката е осигурена възможност за запазване на аргументите на извикваните функции и тяхното отразяване в логовете на трасировката.
    • В системата за асинхронен вход/изход io_uring е добавена поддръжка за четене на информация за събития epoll. Използването на io_uring за обработка на събития epoll позволява намаляване на броя на контекстовите превключвания и предоставя възможност за обработка на множество събития epoll наведнъж.
    • В подсистемата eBPF е подобрена проверката на програми с цикли. Добавени са нови инструкции „timed_may_goto“, „load-acquire“ и „store-release“. Предоставена е възможност за промяна на разширени атрибути на файлове от BPF-програми. Добавена е функцията try_alloc_pages(), предназначена за алокация на памет при висока вероятност за неуспешно изпълнение на операцията (по време на изпълнение на BPF-програми в ограничени контексти).

      Реализиран е нов примитив за заключване — rqspinlock (Resilient Queued Spin Lock), който по време на изпълнение разкрива ситуации, водещи до взаимни блокировки. Новият примитив позволява зареждането на BPF-програми, за които проверяващият не е гарантирал правилността на работата с заключвания.

    • Значително е повишена надеждността на алокацията на големи страници памет (huge-page).
    • Значително е ускорено изчислението на контрольни суми CRC64 на системи x86. Между другото, за ускорението са използвани нови векторни инструкции от набора AVX-512. В някои ситуации производителността е нараснала сто пъти.
    • Продължава прехвърлянето на промени от клона Rust-for-Linux, свързани с използването на езика Rust като втори език за разработка на драйвери и модули на ядрото (поддръжката на Rust не е активна по подразбиране и не води до включването на Rust в списъка с задължителни сборни зависимости за ядрото). Предоставена е възможност за използване в кода на ядрото на макроса „#[kunit_tests()]“ за изпълнение на unit-тестове. Добавена е поддръжка за архитектура ARMv7. Реализирани са модули dma и hrtimer с Rust-обвивки за DMA (добавени от Линус, заобикаляйки мейнтейнера, който след това напусна поста си) и високо прецизни таймери. Разширени са модулите ‘list’, ‘str’, ‘sync’, ‘error’ и ‘alloc’. Добавена е поддръжка на новата синтаксис ‘&raw’ (raw_ref_op).
    • В подсистемата perf е реализирана възможността за профилиране на закъснения, използвайки информация от планировчика на задачи.
    • Добавен е параметър на командния ред на ядрото „traceoff_after_boot“, който деактивира трасировката след като ядрото е заредено и е стартиран процесът init. Параметърът може да се използва при диагностициране на проблеми, свързани с зареждането, като гарантира, че натрупаните по време на зареждането данни от трасировката няма да бъдат презаписани.
    • Поддръжката на 32-битови x86 системи с над 8 CPU и 4 GB RAM е прекратена. Такова оборудване отдавна не се произвежда, а системите, изискващи тези ресурси, вече са преминали на 64-битови CPU.
    • Направени са промени в реализацията на POSIX таймери, позволяващи на инструмента CRIU (Checkpoint/Restore in Userspace) да запазва и възстановява идентификаторите на таймерите.
  • Виртуализация и безопасност
    • Добавена е възможност за използване на Linux като коренова среда (Dom0, root partition) за хипервизора Hyper-V (Microsoft Hypervisor). Хост средата отговаря за управлението на хипервизора, стартирането на гостуващи системи, разпределението на ресурси и осигуряването на взаимодействие на виртуални машини с оборудването. Управлението на хипервизора Hyper-V в Linux се извършва чрез устройството /dev/mshv.
    • В модула Landlock, предоставящ средства на непривилегировани програми за ограничаване на достъпа до обекти на ядрото на Linux (файлови иерархии, мрежови сокети, ioctl и др.), е добавен механизъм за одит. Одитът позволява детайлно оценяване на причините за блокадите на достъпа, извършвани при използване на Landlock, както и дава възможност да се разбере кога и каква операция е блокирана, защо е извършена блокадата и кое правило е сработило.
    • Добавена е възможност за реализиране в LSM модулите (Linux Security Modules) обработчици, които контролират достъпите до системата за асинхронен вход/изход io_uring и позволяват блокиране на използването на io_uring за заобикаляне на ограниченията за достъп до системни извиквания. Подобен обработчик е реализиран в LSM модула SELinux.
    • В SELinux е реализирана възможността за прилагане на политики към всякакви типове данни, зареждани от ядрото, включително образи на фърмуер, политики за безопасност и сертификати.
    • Добавен е режим за закрепване (seal) на определени операции за мапинг на памет, извършвани от ядрото в адресното пространство на процеса. Закрепването превръща мапинга в режим само за четене и не позволява изменения в случай на експлоатация на уязвимост. Действието обхваща мапинга vDSO, vsyscall, vvar, sigpage и uprobes. Режимът по подразбиране е изключен, тъй като може да наруши работата на някои приложения. За включване е добавена сборна настройка CONFIG_MSEAL_SYSTEM_MAPPINGS.
  • Мрежовата подсистема
    • Работата по премахването на глобалната блокировка на мрежовия стек RTNL (rtnl_lock) и преобразуването ѝ в блокировки, свързани с отделни пространства на мрежови имена, продължава.
    • Добавена начална възможност за получаване на мрежови пакети чрез io_uring с копиране на съдържанието директно в паметта на програмата в пространството на потребителя без междинно буфериране (zero-copy). В проведените тестове промената позволи справяне с обработката на трафика през 200 гигабитен канал, използвайки едно ядро на CPU.
    • Реализирани са sysctl tcp_rto_max_ms и опцията TCP-сокети TCP_RTO_MAX_MS, чрез които може да се зададе максималното време между опитите за повторна предаване на пакети.
    • В BPF е добавена серия от callback-призиви за получаване на информация за времето от различни места в мрежовия стек, което може да се използва за диагностика на проблеми с мрежовите закъснения.
    • Добавени са оптимизации на производителността на мрежовите операции:
      • Оптимизацията на GRO (Generic Receive Offload), която обединява няколко малки пакета в един голям, вече е активирана при прехвърляне на обработката на пакета на друг CPU (за баланс на натоварването) при използване на подсистемата XDP (eXpress Data Path), която позволява обработка на пакети на ниво на мрежовия драйвер на етапа преди тяхното предаване на мрежовия стек. Приростът в производителността на обработката на TCP потоци благодарение на оптимизацията може да достигне до два пъти.
      • При високо натоварване производителността на функцията connect() е увеличена до два пъти благодарение на замяната на spin-lock с механизма за синхронизация RCU (Read-Copy-Update) при търсене на записи с информация за страните на съединението (изходни и целеви IP адреси и портове). Допълнително е проведена оптимизация на хеширането, която осигурява увеличаване на производителността с още 229%.
      • Ускорена е реализацията на MPTCP (Multipath TCP), разширение на TCP протокола за организиране на доставката на пакети едновременно по няколко маршрута през различни мрежови интерфейси, свързани с различни IP адреси. MPTCP в режим с един поток е ускорен с 29%.
      • В netfilter, при наличие на сокет, е прекратено изпълнението на операции по търсене на маршрути в FIB (Forwarding Information Base). Благодарение на тази оптимизация производителността нарасна с 20%.
      • Производителността на UDP в условия на флуда (flood) е увеличена с 10% благодарение на елиминирането на излишни операции с структурата sk_tsflags при получаване на пакети.
    • Добавен е драйвер с реализация на протокола MCTP-over-USB.
  • Оборудване
    • В състава на ядрото е приета началната реализация на драйвера Nova за GPU NVIDIA, оборудвани с GSP-фирмени версии, използвани от серия NVIDIA GeForce RTX 2000 на базата на микроархитектура Turing. Драйверът е написан на езика Rust. В първия етап е добавена само структурата nova-core, която съдържа около 400 реда код и реализира основно ниво на абстракции над интерфейсите на фирмените версии GSP. В следващия етап в ядрото плануват да включат DRM-драйвера nova-drm (Direct Rendering Manager) за взаимодействие с GPU от пространството на потребителя, а също и VFIO-драйвера с мениджър vGPU, позволяващ използването на виртуални GPU NVIDIA в системи за виртуализация.
    • Продължава работата по drm-драйвера (Direct Rendering Manager) Xe за GPU на базата на архитектурата Intel Xe, която се използва в видео картите от семейството Intel Arc и интегрираната графика, започвайки от процесорите Tiger Lake. Добавена е поддръжка на SVM (Shared Virtual Memory), компонент от фреймворка DRM, управляващ споделената памет, съвместно използвана в CPU и GPU.
    • В драйвера i915 са добавени идентификатори на нови GPU.
    • В драйвера Nouveau е преработен GSP RPC и е интегриран интерфейс drm_slave_encoder.
    • В драйвера AMDGPU е реализирана поддръжка за архитектурата DCN36 (Display Core Next). Добавена е възможност за задаване на свои криви яркост, използвани за корекция на яркостта на дисплея.
    • В драйвера adreno е добавена поддръжка за GPU Qualcomm Adreno 623.
    • Добавена е поддръжка за сензорни панели Apple Touch Bar.
    • Добавена поддръжка на втора версия на разширението eUSB2 (eUSB2V2 — Embedded USB2 Version 2.0), което позволява понижаване на захранващото напрежение (до 1.2 волта) и увеличаване на производителността на USB 2.0. Скоростта на предаване на данни в eUSB2V2 може да достигне 4.8 Гбит в секунда, което е 10 пъти по-бързо от обичайните 480 Мбит в секунда, типични за USB 2.0. eUSB2V2 ще позволи на производителите на лаптопи да комплектоват устройствата си с уеб камери с по-висока разделителна способност, продължавайки да използват шина Embedded USB2 за свързването им.
    • Добавена поддръжка на Ethernet адаптери Intel Killer E5000 (RTL8126).
    • Добавена поддръжка на дисплейни панели Visionox RM692E5, Rockchip w552793dba-v10, kingdisplay-kd110n11-51ie и starry-2082109qfh040022-50e.
    • Добавен драйвер за лаптопи Samsung Galaxy Book.
    • Добавена поддръжка на звукови системи Presonus Studio 1824c, Jabra Evolve 65. Добавена поддръжка на DSP модули AMD ACP 7.x, AWINC WM88166, Everest ES8388, Intel AVS PEAKVOL и GAIN. Подобрена поддръжка на звука на лаптопи ASUS, HP и Lenovo.
    • Добавена поддръжка на ARM платформи, SoC и устройства: Arm Morello, AMD (Xilinx) Versal NET, Google Pixel Pro 6, NetCube Kumquat, MYIR Remi Pi, Huawei Matebook E Go, Milk-V Jupiter ST STM32MP2, Mediatek MT8370, Apple T2, Skov (i.MX8MP), EVK (i.MX95), Rockchip RK35xx, Allwinner A523, 11 платформи Toradex на базата на i.MX6.

По същото време Латиноамериканският Фонд за свободен софтуер създаде вариант на напълно свободното ядро 6.15 — Linux-libre 6.15-gnu, премахнато от елементи на фърмуер и драйвери, съдържащи несвободни компоненти или код, който е ограничен от производителя. В изданието 6.15 е неутрализирано зареждането на блоби в драйверите nova, Qualcomm iris v4l2, Airoha NPU, Tehuti Networks TN40xx 10G ethernet, Realtek 8814A wifi, Apple Silicon SoC touchscreen, Renesas UFS и aw88166 audio. Прекратено е почистването на драйвера Spider 1Gb ethernet, който беше премахнат от състава на ядрото. Премахнати са линкове към тивизирани бинарни файлове. Реализирано е блокиране на зареждането на блоби от код на Rust.

Източник: opennet.ru

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster