Издание на ядрото Linux 6.6

След два месеца развитие, Линус Торвалдс представи версията на ядрото Linux 6.6. Сред най-забележителните промени: новият планировчик на задачи EEVDF; механизъм на тенекиен стек за защита от експлоити; поддръжка на fs-verity в OverlayFS; реализация на квоти и xattr в tmpfs; подготовка на online fsck в XFS; засилено проследяване на експорта на символи „GPL-only“; поддръжка на мрежови сокети в io_uring; рандомизация на паметта в kmalloc(); обявена за остаряла ReiserFS; в Nouveau са добавени примитиви за Vulkan драйвера NVK.

В новата версия са включени 15291 корекции от 2058 разработчици, размерът на пача е 39 MB (промените засегнаха 14844 файла, добавени са 553359 реда код, премахнати са 284012 реда). В предишното издание имаше 14674 корекции от 2016 разработчици, размерът на пача беше 78 MB. Около 44% от всички представени в 6.6 промени са свързани с драйвери на устройства, приблизително 17% от промените имат отношение към обновяване на код, специфичен за хардуерни архитектури, 11% са свързани с мрежовия стек, 4% - с файловите системи и 3% с вътрешните подсистеми на ядрото.

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

  • Памет и системни услуги
    • Реализиран е нов планировчик на задачи EEVDF (Earliest Eligible Virtual Deadline First), който заменя планировчика CFS (Completely Fair Scheduler), предоставян от ядрото 2.6.23 насам. Новият планировчик при избора на следващия процес за предаване на изпълнението взема предвид процесите, които не са получили достатъчно процесорни ресурси или са получили неоснователно много процесорно време. В първия случай се ускорява предаването на контрола на процеса, а във втория, обратното, се отлага. Старият планировчик CFS използваше хевристика и фини настройки за определяне на процесите, изискващи специално внимание, докато новият планировчик ги следи по-явно и не изисква фини настройки. Предполага се, че EEVDF ще позволи да се намалят забавянията при изпълнението на задачи, при които CFS е имал проблеми с планирането.
    • Внесени са промени в обработката на вътрешните символи на категорията „GPL-only“, насочени към усложняване на използването на проприетарни модули GPL-прослойки за заобикаляне на ограниченията за достъп до подсистеми на ядрото, допускащи достъп само на код под лицензия GPL. В функцията symbol_get() за проприетарни модули е забранено търсенето на символи, означени като GPL-only, а обратно – GPL-модулите няма да могат да намират символи, експортирани от проприетарни модули.
    • Добавени са допълнителни настройки на работните опашки (unbound workqueue) за повишаване на ефективността на повторното използване на кеша на процесора в големи системи с няколко кеша от трето ниво (L3). В ядрото също е включена утилитата tools/workqueue/wq_dump.py за проверка на текущата конфигурация на работните опашки.
    • В подсистемата io_uring е добавена начална поддръжка на операции и команди, специфични за мрежови сокети. Добавен е sysctl io_uring_disabled за деактивиране на io_uring на ниво цялата система. В io_uring също е значително ускорен директният вход/изход (Direct I/O) в асинхронен режим. Увеличаването на пропускната способност и намаляването на закъсненията при изпълнението на операции с вход/изход след направените промени достига 37%.
    • За архитектурата PA-RISC е реализиран JIT-компилатор за BPF.
    • В настройката /sys/devices/system/cpu/smt/control е добавена поддръжка на числови параметри, определящи броя на нишките, достъпни за всяко ядро на CPU (по-рано се поддържаха само стойности „on“ и „off“ за включване и изключване на поддръжката на симетрична многопоточност). Новата функция може да се прилага на някои процесори PowerPC, поддържащи режима за горещо включване на симетричната многопоточност („hotplug SMT“), за селективно включване на SMT на определени ядра по време на работа.
    • Продължава преносът на промени от клон Rust-for-Linux, свързани с използването на езика Rust като втори език за разработка на драйвери и модули на ядрото (поддръжката на Rust не е активна по подразбиране и не води до включване на Rust в задължителните зависимости за компилиране на ядрото). Извършен е преход към използване на версии Rust 1.71.1 и bindgen 0.65.1. Реализиран е типаж 'Zeroable'. Добавени са процедурни макроси 'paste!' и '#[derive(Zeroable)]'. Обезпечена е съвместимост с '#[pin_data]'. Добавени са функции за инициализация '{,pin_}init_array_from_fn()' и метод '{,pin_}chain'. Разширени са възможностите на модула 'types'. В рамките на фреймуърка за unit-тестове kunit е добавена възможност за стартиране на тестове от документацията на Rust.
    • Добавена е подсистема 'eventfs', която позволява значително намаляване на консумацията на памет в системата за трасировка, благодарение на елиминирането на излишни структури, използвани за представяне на точки за трасировка във файловата система. По-рано подобни структури се създаваха за всички точки за трасировка, независимо от използването на трасировка. С помощта на eventfs подобни структури могат да се създават динамично, само когато е необходимо.
    • Разширени са възможностите на утилитата perf.
    • В файл /proc/pid/smaps е добавена информация за диагностика на ефективността на механизма за обединяване на идентични страници памет (KSM, Kernel Samepage Merging).
    • Премахнат е API Frontswap, който позволява да се разположи файл подкачване в памет, която не може да бъде адресирана директно и която не предоставя оперативна информация за наличието на свободно място. Този API се използваше само в zswap, затова е решено да се използва директно тази функция в zswap, освобождавайки се от излишни слоеве.
    • За архитектура RISC-V е добавена поддръжка за достъп до регистри за производителност от потребителското пространство и възможност за разполагане на дъмп на ядрото след срив в областта над 4GB.
    • Добавена е начална поддръжка за инструкции ARM SME (Scalable Matrix Extension).
    • Реализирана е възможност за използване на отладъчни инструменти KDB, KGDB, kcov, KFENCE и KASAN на системи с архитектура LoongArch.
    • Добавена е поддръжка за файлове за тестване на ядрото в системата за непрекъсната интеграция GitLab, която се използва при разработката на графични драйвери.
  • Дисковата подсистема, вход/изход и файловите системи
    • Във файловата система OverlayFS е добавена поддръжка за запазване на хешове fs-verity в разширения атрибут (xattr) overlay.verity, което може да се използва за проверка на целостта и автентичността на файловете в долните слоеве на OverlayFS с помощта на криптографски хешове и ключове. Така OverlayFS вече включва всички промени, необходими на проекта Composefs за работа като надстройка над файловата система OverlayFS и EROFS.
    • В файловата система XFS е извършена подготовка за реализиране на възможността за приложение на утилитата fsck за проверка и корекция на откритите проблеми в онлайн режим, без демонтиране на файловата система. Освен това в XFS е реализирана възможност за използване на големи фолианти (folios) в страницовия кеш и са добавени някои свързани оптимизации, които значително повишават производителността за някои видове натоварване.
    • Във файловата система tmpfs е добавена поддръжка за потребителски разширени атрибути (user xattrs), директен вход/изход и квоти, привързани към потребителя и групата. Структурите за директории са стабилизирани, което реши проблемите с експортиране на tmpfs чрез NFS.
    • В API за управление на монтиране с цел повишаване на сигурността е добавен флаг FSCONFIG_CMD_CREATE_EXCL, който забранява споделянето на суперблок в няколко точки на монтиране (забранява прикрепянето на един дял към няколко точки на монтиране). В утилита mount за включване на този флаг е предложена опция „—exclusive“.
    • В подсистемата VFS е добавена поддръжка за оперативно изменение на параметри като време на достъп и модификация (atime, mtime). По-рано данните за времето се отразяваха с известна закъснение, което пречеше на проследяването на актуалността на данните в кеша в системи, подобни на NFS (поради закъснението при определяне на измененията в файла, системата можеше погрешно да сметне, че данните в кеша са актуални). Новата функция е налична за Btrfs, Ext4, tmpfs и XFS.
    • В Btrfs е обявен за остарял вграден механизъм за проверка на целостта, включван на етапа на компилация с помощта на параметър BTRFS_FS_CHECK_INTEGRITY. Посоченият механизъм е оставен без поддръжка, повече не се тества и създава допълнителна натовареност на CPU и памет. Освен това, в Btrfs е проведена оптимизация на производителността на новия код за проверка на файловата система (scrub).
    • В файловата система Ext4 бяха добавени периодични проверки за обновяване на суперблока и ускорени операции за разпределение на паметта при дописване в края на файла.
    • В подсистемата FUSE бе добавена поддръжка на атрибута btime ("време на създаване"), който определя времето за създаване на inode.
    • Забранено е променянето на права за достъп на символични линкове.
    • Добавен е системен извикване fchmodat2(), което се различава от системния извикване fchmodat() с допълнителен аргумент за указване на флаговете. От флаговете засега се поддържат само AT_SYMLINK_NOFOLLOW и AT_EMPTY_PATH, които позволяват без заобиколни пътища да се реализира в libc-функцията fchmodat() забраната за разименуване на символични линкове и възможността за използване на файлов дескриптор при указване на празен път.
    • В файловата система EROFS (Разширяема само за четене файлова система), предназначена за използване на дялове, достъпни в режим само за четене, бе добавена поддръжка на алгоритъма за компресия Deflate. За ускоряване на търсенето на разширени атрибути бе внедрена вероятностна структура bloom filter.
    • Добавена е настройка CONFIG_BUFFER_HEAD, която позволява компилиране на ядрото без използване на структура buffer_head. При компилиране без buffer_head могат да се използват блочни устройства и някои файлови системи, например xfs, btrfs, cramfs, erofs и squashfs.
    • В драйвера за блочни устройства ublk, който позволява изнасяне на специфичната логика на страната на процеса в потребителското пространство, бе добавена поддръжка на зонирани устройства за съхранение (разделение на зони от блокови групи или сектори, в които е допустимо само последователно добавяне на данни с обновяване на цялата група блокове).
    • Реализацията на файловата система ReiserFS беше преместена от категорията на поддържаните в разреда на остарелите (Obsolete). Прекратяването на поддръжката на ReiserFS е предвидено за 2025 година. Като причина за преминаване на ReiserFS в разреда на остарелите се споменава стагнацията в поддръжката на тази файловата система, нерешената проблема от 2038 година, отсъствието на възможности за осигуряване на устойчивост и желанието за намаляване на разходите за поддръжка на общи за файловите системи изменения, свързани с поддръжката на новия API за монтиране, iomap и фолиантите (folios).
    • В NFS-сервера е реализиран механизъм за делегиране на операции по запис за NFSv4, който повишава ефективността на кеширането на записи на файлове за намаляване на трафика. Включена е поддръжка на операцията READ_PLUS, определена в NFS 4.2.
    • В файловата система Ceph е добавена поддръжка на fscrypt.
  • Виртуализация и сигурност
    • Добавена е реализация на механизма Shadow Stack, който позволява блокиране на работата на много експлоити, използвайки апаратните възможности на процесорите Intel за защита от презаписване на адреса за връщане от функция в случай на пренапълване на буфера в стека. Същността на защитата е, че след предаване на управлението на функцията, адреса за връщане се запазва от процесора не само в обикновен стек, но и в отделен 'сенчест' стек, който не може да бъде променен директно. Преди изхода от функцията адреса за връщане се извлича от сенчестия стек и се сверява с адреса за връщане от основния стек. Невъзможността на адресите води до генериране на изключение, блокирайки ситуации, в които експлоитът е успял да презапише адреса в основния стек. Аппаратният сенчест стек се поддържа само в 64-битови версии, а в 32-битови версии се прилага софтуерна емуляция.
    • Добавена е поддръжка за компилатор Clang със включен режим за защита CFI (Control Flow Integrity), блокиращ нарушения на нормалния ред на изпълнение (control flow) в резултат на използването на експлоити, които изменят съ храняемите в паметта указатели на функции.
    • За архитектурата RISC-V е включена рандомизация на разположението на ядрото в паметта при зареждане.
    • В системния повик seccomp() е добавен флаг SECCOMP_USER_NOTIF_FD_SYNC_WAKE_UP, позволяващ обработка на събития от наблюдаваните процеси в синхронен режим за по-ефективна работа на планировчика на задачи.
    • В функцията kmalloc() е осигурена рандомизация на slab-кешовете, усложняваща експлоатацията на уязвимости в ядрото.
    • От опциите, свързани с включването на системата за принудителен контрол на достъпа SELinux, е премахнато упомяването на Агенцията за национална сигурност на САЩ. Тъй като проектът вече 20 години се развива под крилото на общността и се поддържа от независими мейнтейъри, е решено да се премине на използването на името 'SELinux' вместо 'NSA SELinux' в коментарите и документацията в Kconfig (например, пояснението към параметъра за сборка SECURITY_SELINUX е променено от 'NSA SELinux Support' на 'SELinux Support').
    • В системния повик userfaultfd() е добавена операция UFFDIO_POISON, позволяваща обозначаване на страници памет като 'отровени' (poisoned), което може да бъде използвано за преместване на повредени страници памет при миграция виртуални машини от една система на друга.
    • В под sistèmата VFIO е добавен нов симв ​​олен интерфейс (/dev/vfio/devices/vfioX) за управление на устройства VFIO, позволяващ на потребителя директно да отвори файл с устройството, без да се обръща към остарелия групов интерфейс /dev/vfio/$groupID.
    • В сървър NFS е прекратил поддръжката на остарели типове криптиране Kerberos, използващи алгоритмите DES и 3DES.
    • При стартиране в среда на хипервизор Hyper-V е добавена поддръжка на гостуващи системи, защитени с технологии AMD SEV-SNP (Secure Nested Paging) и Intel TDX (Trusted Domain Extensions).
    • При сборка на ядрото в режим „W=1“ в компилатора по подразбиране са включени предупреждения „-Wformat-overflow“, „-Wformat-truncation“, „-Wstringop-overflow“ и „-Wrestrict“. За всички сборки е включено предупреждение „-Wenum-conversion“.
  • Мрежова подсистема
    • Реализацията на семейството адреси AF_XDP (eXpress Data Path) е разширена с възможността за работа с пакети, съхранявани в няколко буфера (например в един буфер може да се намира заглавка на пакета, а в друг данни, или в последователност от няколко буфера могат да бъдат разположени големи jumbo-кадри Ethernet). Програмите, използващи сокети AF_XDP, сега могат да приемат и предават пакети веднага от няколко буфера.
    • В под системата BPF е добавена поддръжка за дефрагментация на пакети IPv4 и IPv6, както и възможността за филтриране на фрагментирани пакети.
    • В BPF е добавен нов обработчик update_socket_protocol, позволяващ на BPF-програмите да променят запитания протокол за нови сокети. Например, BPF програма може прозрачно да замени протокола TCP с MPTCP (multipath TCP) за оптимизиране на трафика на приложението. В BPF също е добавена поддръжка за управление на маршрутизацията на пакети през различни потоци в MPTCP.
    • Отстранен е признакът на експериментално разработване от модула ksmbd, предлагащ функционираща на ниво ядро реализация на файлов сървър на базата на протокола SMB3. Добавена е поддръжка за комбиниране на операции по четене (запитвания "read compound").
  • Оборудване
    • В DRM-подсистемата (Direct Rendering Manager) са направени промени, необходими за ефективната работа на отворения драйвер NVK с реализацията на графичния API Vulkan за видеокарти NVIDIA. Първоначално DRM-драйверът Nouveau беше проектиран за реализация на OpenGL, поради което му липсват примитивите, необходими за ефективната работа на Vulkan-драйверите, например поддръжката на синхронизирани обекти и управлението на виртуалното адресно пространство.
    • В драйвера AMDGPU е реализирана поддръжка на SDMA 6.1.0, HDP 6.1, SMUIO 14.0, PSP 14.0, IH 6.1 и GFX 9.4.3. Пренаписан е кодът за зареждане на фърмуери PSP (Platform Security Processor). Разширена е поддръжката на технологията за адаптивна синхронизация FreeSync (добавена поддръжка на Freesync Panel Replay V2).
    • В драйвера i915 продължава реализирането на поддръжка на чиповете Intel Meteor Lake. Подобрена е поддръжката на технологията за защита от копиране HDCP (High-bandwidth Digital Content Protection). Пренаписан е кодът за взаимодействие с дисплея.
    • От Kconfig са премахнати опциите за деактивиране на зареждането на микрокода на етапа на компилация — MICROCODE_INTEL и MICROCODE_AMD. Ядрото сега винаги се компилира с код за зареждане на микрокода за системи x86, но фактическото зареждане на микрокода може да бъде деактивирано, като се зададе параметърът на ядрото ‘dis_ucode_ldr’.
    • В звуковата подсистема е добавена възможност за управление на звуковите устройства, свързани чрез подсистемата IIO (Industrial I/O).
    • Добавена е поддръжка на звукови интерфейси Intel LunarLake, Intel ArrowLake и AMD ACP5x, кодеците Cirrus Logic CS42L43, Realtek RT1017 и TI TAS2781, както и усилвателите Cirrus Logic CS35L56 и winic aw88261. Добавена е поддръжка на ASoC AMD Van Gogh.
    • Добавен е драйвер за USB MIDI 2.0 Gadget, емулиращ интерфейса USB MIDI 2.0, свързан с устройството ALSA UMP rawmidi.
    • Добавена е поддръжка на Ethernet контролери Broadcom ASP 2.0 и Marvell 88Q2XXX.
    • Добавена е поддръжка на панели Visionox R66451, TDO TL050HDV35, KD070FHFID015, Inanbo T28CP45TN89 и EDT ET028013DMA, дисплейни контролери Loongson и контролери за сензорни екрани Azoteq IQS7222D/IQS7210A/7211A.
    • Добавена е поддръжка на ARM SoC Qualcomm SM4450 (Snapdragon 4 Gen 2), TI AM62P5, Intel Agilex5, Qualcomm ipq5018, AN400 (Amlogic T7).
    • Добавена е поддръжка на ARM платформи Samsung Galaxy Tab 3 8.0, FriendlyElec NanoPC T6, Amlogic A311D2, Khadas Vim4, Xiaomi SM7125, Facebook Yosemite 4, Orange Pi Zero 3, Radxa ROCK 4SE.

В същото време Латиноамериканският фонд за свободен софтуер е създал вариант на напълно свободно ядро 6.6 — Linux-libre 6.6-gnu, очистено от елементи на фърмуери и драйвери, съдържащи несвободни компоненти или код, чиято употреба е ограничена от производителя. В изданието 6.6 е обновен кодът за почистване на блобовете в различни драйвери и подсистеми, например, в драйверите TI гигабит RU Ethernet, MediaTek 792x wifi, Cirrus Logic cs42l43 mfd, cs35l56 HD-audio и aw88261 SoC. Извършено е почистване на имената на блобовете в dts файловете за архитектура Aarch64. Премахнати са блобове в новите драйвери ivpu, в bluetooth драйверите, в драйвера за сензорни екрани и в кодирача/декодирача Qualcomm Venus V4L2.

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

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