След два месеца разработка, Линус Торвалдс представи релиза на ядрото Linux 6.7. Сред най-забележимите промени са: интеграцията на файловата система Bcachefs, прекратяване на поддръжката на архитектурата Itanium, възможността за работа на Nouveau с фърмуери GSP-R, поддръжка на TLS криптиране в NVMe-TCP, възможността за използване на изключения в BPF, поддръжка на futex в io_uring, оптимизация на производителността на планировчика fq (Fair Queuing), поддръжка на разширението TCP-AO (TCP Authentication Option) и възможността за ограничаващи мрежови връзки в механизма за защита Landlock, добавено управление на достъпа до user namespace и io_uring чрез AppArmor.
В новата версия са приети 18405 поправки от 2066 разработчици, размерът на пача е 72 MB (промените засягат 13467 файла, добавени са 906147 реда код, изтрити са 341048 реда). В предишното издание имаше 15291 поправка от 2058 разработчици, размерът на пача бе 39 MB. Около 45% от всички предложени в 6.7 промени са свързани с драйвери на устройства, около 14% от промените са свързани с обновление на код, специфичен за хардуерни архитектури, 13% са свързани с мрежовия стек, 5% — с файлови системи и 3% — с вътрешните подсистеми на ядрото.
Основните нововъведения в ядрото 6.7:
- Дисковата подсистема, вход/изход и файловите системи
- В състава на ядрото е приет кодът на файловата система Bcachefs, където е направен опит за постигане на ниво производителност, надеждност и мащабируемост, характерно за XFS, в съчетание с елементи на разширена функционалност, налична в Btrfs и ZFS. Например, Bcachefs поддържа възможности като включването на няколко устройства в дял, многослойни разпределения на носители (долният слой с често използвани данни на базата на бързи SSD, а горният слой с по-малко търсени данни от твърди дискове), репликация (RAID 1/10), кеширане, прозрачно компресиране на данни (режими LZ4, gzip и ZSTD), моментни снимки (snapshots), проверка на целостта с контролни суми, възможност за съхранение на кодове за корекция на грешки на Рийд—Соломон (RAID 5/6), съхранение на информация в криптиран вид (използват се ChaCha20 и Poly1305). По производителност Bcachefs изпреварва Btrfs и други файлови системи на базата на механизма за Copy-on-Write, и демонстрира скорост на работа, близка до Ext4 и XFS.
- В файловата система Btrfs е внедрен опростен режим на квоти, който позволява постигането на по-висока производителност чрез проследяване на екстентите само в подразделението, в което са създадени, което значително опростява изчисленията и повишава производителността, но не позволява отчитането на екстентите, съвместно използвани в няколко подразделения.
- В Btrfs е добавена нова структура от данни «stripe tree», подходяща за логическо картографиране на екстентите в ситуации, когато физическото мапиране не съвпада на различни устройства. Структурата в момента е внедрена в реализации на RAID0 и RAID1 за зонализирани блочни устройства. В бъдеще планират да използват тази структура и в RAID на по-високи нива, което ще реши редица съществуващи проблеми в текущата реализация.
- В файловата система Ceph е реализирана поддръжка на мапиране на идентификатори на потребители на примонтирани файлови системи, използваща се за съпоставяне на файлове на определен потребител на примонтирен чужд дял с друг потребител в текущата система.
- В efivarfs е добавена възможността за указване на uid и gid при монтиране, за да се предостави възможност за промяна на променливите UEFI от процеси, стартирани без root права.
- В exFAT са добавени ioctl-викания за четене и промяна на атрибутите на файловата система. Добавена е обработка на каталози с нулев размер.
- В F2FS е реализирана възможност за използване на блокове с размер 16K.
- Механизмът за автоматично монтиране autofs е прехвърлен на използване на новия API за монтиране на дялове.
- В OverlayFS са предложени опции за монтиране «lowerdir+» и «datadir+». Добавена е поддръжка на вложено монтиране на OverlayFS с xattrs.
- В XFS е проведена оптимизация на натоварването на CPU в кода за разпределение на блокове в реално време. Осигурена е възможност за едновременно изпълнение на операции за четене и FICLONE.
- Кодът на EXT2 е прехвърлен на използването на фолианти на страници памет (page folios).
- Памет и системни услуги
- Поддръжката на ia64 архитектурата, използвана в Intel Itanium процесорите, е прекратена, след като продажбите им бяха напълно спрени през 2021 година. Процесорите Itanium бяха представени от Intel през 2001 година, но ia64 архитектурата не успя да устои на конкуренцията с AMD64, главно поради по-високата производителност на AMD64 и по-гладкия преход от 32-битови x86 процесори. В резултат на това интересите на Intel се насочиха към x86-64 процесорите, а Itanium остана с HP Integrity, за които приемането на поръчки беше спряно преди три години. сървъри Кодът за поддръжка на ia64 е премахнат от ядрото, основно заради дълъг период на липса на поддръжка за тази платформа. Линус Торвалдс е изразил готовност да върне поддръжката на ia64 в ядрото, но само ако се намери поддържащ, който да демонстрира качествена поддръжка на платформата извън основното ядро поне за една година.
- Добавен е команден параметър в ядрото „ia32_emulation“, който позволява да се включва и изключва поддръжката за емулация на 32-битов режим в ядра, компилирани за x86-64 архитектурата по време на зареждане. От практическа гледна точка новият параметър позволява създаването на ядра с поддръжка за съвместимост с 32-битови приложения, но по подразбиране този режим е изключен, за да се намали векторът на атака върху ядрото, тъй като API-то за осигуряване на съвместимост е по-малко тествано в сравнение с основните интерфейси на ядрото.
- Продължава трансферът на промени от клона Rust-for-Linux, свързани с използването на Rust като втори език за разработка на драйвери и модули в ядрото (Rust поддръжката не е активна по подразбиране и не води до включването на Rust в основните зависимости на ядрото). В новата версия е направен преход към използването на Rust 1.73 и е предложен набор от обвързвания за работа с работни опашки (workqueues).
- Предоставена е възможността за използване на механизма binfmt_misc за добавяне на поддръжка на нови формати на изпълними файлове (например, за стартиране на компилирани приложения на Java или Python) в отделни непривилегировани пространства от имена (namespace).
- В cgroup-контролера cpuset, позволяващ управлението на използването на ядра на CPU по време на изпълнението на задача, е осигурено разделение на локално и отдалечено секциониране (remote partition), които се различават по това дали родителският cgroup е валидна коренова секция или не. В cpuset също така са добавени нови настройки „cpuset.cpus.exclusive“ и „cpuset.cpus.excluisve.effective“ за ексклузивно привързване към CPU.
- В подсистемата BPF е реализирана поддръжка на изключения, които се обработват като неотложен изход от BPF-програмата с възможност за безопасно развиване на стека. Освен това, в BPF-програмите е разрешено използването на указатели kptr в привързването към CPU.
- В подсистемата io_uring е добавена поддръжка на операции с futex, както и са реализирани нови операции: IORING_OP_WAITID (асинхронна версия на waitid), SOCKET_URING_OP_GETSOCKOPT (вариант на getsockopt) и SOCKET_URING_OP_SETSOCKOPT (вариант на setsockopt) и IORING_OP_READ_MULTISHOT (многократни операции за четене, които не спират, докато има данни или буферът не е запълнен).
- Добавена е реализация на леки еднопосочни FIFO-опашки, които изискват спин-блокировка само за изтриване от опашката в контекста на процеса и които не се нуждаят от спин-блокировка за атомарно добавяне към опашката в какъвто и да е контекст.
- Добавен е кръгов буфер „objpool“ с мащабируема реализация на високопроизводителна опашка за разпределение и връщане на обекти.
- Добавена е начална част от промените за реализиране на нов API futex2, който предлага по-висока производителност на NUMA-системи, поддържа размери, различни от 32 бита, и може да се използва вместо мултиплексирания системен повик futex().
- За архитектури ARM32 и S390x е добавена поддръжка на актуалния набор (cpuv4) от инструкции BPF.
- За архитектурата RISC-V е реализирана възможността за използване на режима за проверка Shadow-Call Stack, наличен в Clang 17, предназначен за защита от презаписване на адреса на връщане от функция при препълване на буфера в стека. Същността на защитата е запазването на адреса на връщане в отделен „сенчест“ стек след предаването на контрола на функцията и извличането на този адрес преди изхода от функцията.
- В механизма за сливане на идентични страници с памет (KSM: Kernel Samepage Merging) е добавен нов интелигентен режим за сканиране на страниците с памет, който следи за неуспешно сканираните страници и намалява интензивността на повторното им сканиране. За активиране на новия режим е добавена настройка /sys/kernel/mm/ksm/smart_scan.
- Добавена е нова команда ioctl PAGEMAP_SCAN, която при използване с userfaultfd(), позволява да се определят записите в определен диапазон от паметта. Новата функция може, например, да се използва в системи за запазване и възстановяване на състоянието на процеси CRIU или в игри античит-системи.
- В системата за изграждане при наличен компилатор Clang по подразбиране е активирано създаването на примери за използване на подсистемата perf, написани като BPF-програми.
- Старият слой videobuf, използван за управление на фреймбуферите в медиаподсистемата, е премахнат и над 10 години е заменен с нова реализация, наречена videobuf2.
- Виртуализация и сигурност
- В подсистемата fscrypt е добавена функция за шифроване на данни с блокове, по-малки от размера на блока в файловата система. Подобно нещо може да се наложи за задействане на хардуерни механизми за шифроване, поддържащи само малки блокове (например контролери UFS, които поддържат само блок с размер 4096, могат да се използват с ФС с размер на блока 16K).
- В подсистемата „iommufd“, която позволява управление на таблиците с памет за вход/изход IOMMU (I/O Memory-Management Unit) чрез файлови дескриптори от потребителското пространство, е добавено проследяване на все още не изчистените от кеша данни (dirty) за операции с DMA, което е необходимо за определяне на паметта с неизчистени данни при миграцията на процеси.
- В механизма Landlock, който позволява ограничаване на взаимодействието на група процеси с външната среда, е добавена поддръжка за определяне на правила за управление на достъпа до TCP сокети. Например, може да се създаде правило, разрешаващо само достъп до мрежовия порт 443 за установяване на HTTPS връзки.
- В подсистемата AppArmor е добавена възможност за управление на достъпа до механизма io_uring и създаване на пространства от имена на идентификатори на потребителите (user namespaces), което позволяваSelective разрешаване на достъпа до тези функции само за определени процеси.
- Добавен е API за атестация виртуални машини за потвърждаване на целостта на процесите при тяхното зареждане.
- На системите LoongArch е реализирана поддръжка на виртуализация с използване на хипервизор KVM.
- При използването на хипервизор KVM на системите RISC-V се е появила поддръжка на разширението Smstateen, което блокира достъпа на виртуалната машина до регистрите на CPU, които явно не се поддържат от хипервизора. Добавена е и поддръжка за използване в гостуващите системи на разширението Zicond, което позволява изпълнението на някои условни цели операции.
- В гостуващите системи, работещи под управлението на KVM, базирани на архитектура x86, е разрешено използването на до 4096 виртуални CPU.
- Мрежова подсистема
- В драйвера NVMe-TCP (NVMe над TCP), който позволяват достъп до NVMe устройства през мрежата (NVM Express over Fabrics), с използване на протокол TCP, е добавена поддръжка на шифроване на канала за предаване на данни с използване на TLS (използване на KTLS и фонов процес в потребителското пространство tlshd за установяване на връзката).
- Извършена е оптимизация на производителността на планирания пакет fq (Fair Queuing), която е позволила увеличение на пропускателната способност с 5% при високи натоварвания в теста tcp_rr (TCP Request/Response) и с 13% при неограничен поток от UDP пакети.
- В протокола TCP е добавена опционална възможност за използване на временни печати (TCP TS) с микро-секундна прецизност (RFC 7323), което позволява по-точно оценяване на забавянията и създаването на по-напреднали модули за управление на претоварването. За активиране може да се използва командата «ip route add 10/8 … features tcp_usec_ts».
- В TCP стека е добавена поддръжка на разширението TCP-AO (TCP Authentication Option, RFC 5925), което позволява верифицирането на TCP заглавките по MAC кодове (Message Authentication Code), с използване на по-съвременни алгоритми HMAC-SHA1 и CMAC-AES-128 вместо предишната опция TCP-MD5, базирана на остарелия алгоритъм MD5.
- Добавен е нов тип виртуални мрежови устройства «netkit», логиката на предаване на данни в които се задава с помощта на BPF програма.
- В KSMBD, работещ на ядрото като реализиране на SMB-сървър, е добавена поддръжка на преобразуване на имена на файлове, съдържащи сурогатни двойки съставни символи.
- В NFS е подобрена реализацията на потоковете с RPC-сервизни услуги. Добавена е поддръжка за делегиране на запис (за NFSv4.1+). В NFSD е добавена поддръжка на netlink обработчик rpc_status. Подобрена е поддръжката на клиенти NFSv4.x при повторно експортиране в knfsd.
- Оборудване
- В модула на ядрото Nouveau е добавена начална поддръжка за фърмуера GSP-RM, който се използва в графичните процесори NVIDIA RTX 20+ за прехвърляне на операции по инициализацията и управлението на GPU на отделен микроконтролер GSP (GPU System Processor). Поддръжката на GSP-RM позволява на драйвера Nouveau да работи чрез достъп до фърмуера, вместо чрез директно програмиране на операциите за взаимодействие с хардуера, което значително опростява добавянето на поддръжка на нови GPU NVIDIA чрез използване на вече готови извиквания за инициализация и управление на енергопотреблението.
- В драйвера AMDGPU е реализирана поддръжка за GC 11.5, NBIO 7.11, SMU 14, SMU 13.0 OD, DCN 3.5, VPE 6.1 и DML2. Подобрена е поддръжката на безшевно зареждане (без мигане при превключване на видео режим).
- В драйвера i915 е реализирана поддръжка на чиповете Intel Meteor Lake и е добавена начална реализация на Intel LunarLake (Xe 2).
- Добавена е поддръжка за асиметрични канали за предаване, добавени в спецификациите на USB4 v2 (120/40G).
- Добавена е поддръжка за ARM SoC: Qualcomm Snapdragon 720G (използва се в смартфони Xiaomi), AMD Pensando Elba, Renesas, R8A779F4 (R-Car S4-8), USRobotics USR8200 (използва се в рутери и NAS).
- Добавена е поддръжка за смартфона Fairphone 5 и ARM платформи Orange Pi 5, QuartzPro64, Turing RK1, Variscite MX6, BigTreeTech CB1, Freescale LX2162, Google Spherion, Google Hayato, Genio 1200 EVK, RK3566 Powkiddy RGB30.
- Добавена е поддръжка за RISC-V платформи Milk-V Pioneer и Milk-V Duo.
- Добавена е поддръжка за звуковите интерфейси на лаптопи HUAWEI, които се доставят с CPU AMD. Добавена е поддръжка за допълнителни говорители, инсталирани на лаптопи Dell Oasis 13/14/16. Добавена е поддръжка за вградени говорители ASUS K6500ZC. Добавена е поддръжка за индикатор за изключен звук на лаптопи HP 255 G8 и G10. Добавена е поддръжка за звукови драйвери acp6.3. Добавена е поддръжка за професионални интерфейси за запис на звук Focusrite Clarett+ 2Pre и 4Pre.
По време на същото време, латиноамериканският Фонд за свободен софтуер разработи версия на напълно свободно ядро 6.7 — Linux-libre 6.7-gnu, премахнато от елементи на прошивки и драйвери, които съдържат несвободни компоненти или участъци от код, чиято употреба е ограничена от производителя. В изданието 6.7 е обновен кодът за почистване на блобовете в различни драйвери и подсистеми, напр. в драйверите amdgpu, nouveau, adreno, mwifiex, mt7988, ath11k, avs и btqca. Премахнат е кодът за почистване на драйверите localtalk и rtl8192u поради тяхното изключване от състава на ядрото. Премахнати са излишните компоненти за почистване на драйверите xhci-pci, rtl8xxxu и rtw8822b, които преди това са били добавени по грешка. Проведена е чистка на имената на блобовете в dts-файловете за архитектура Aarch64. Премахнати са блобовете в новите драйвери mt7925, tps6598x, aw87390 и aw88399.
Източник: opennet.ru
