След два месеца разработка Линус Торвалдс представи изданието на ядрото 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), моментни снимки, проверка на целостта по контрольни суми, възможност за съхранение на кодове за корекция на грешки на Рийд—Саломон (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 и е предложен набор от bindings за работа с работни опашки (workqueues).
- Предоставена е възможност за използване на механизма binfmt_misc за добавяне на поддръжка на нови формати на изпълними файлове (например, за стартиране на компилирани приложения на Java или Python) в рамките на отделни непривилегировани пространства на имена (namespace).
- В контролера cpuset на cgroup, позволяващ управлението на ангажирането на ядра 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 (вариант getsockoptand), SOCKET_URING_OP_SETSOCKOPT (вариант setsockopt) и IORING_OP_READ_MULTISHOT (многократни операции за четене, които не спират, докато има данни или буферът не е запълнен).
- Добавена е реализация на леко свързаните FIFO-опашки, които изискват спин-заключване само за изтегляне от опашката в контекста на процеса и оперират без спин-заключване за атомарно добавяне в опашката в произволен контекст.
- Добавен е кръгов буфер „objpool“ с мащабируема реализация на високо производителна опашка за разпределяне и връщане на обекти.
- Добавена е началната част от промените за реализиране на новия API futex2, който отличава по-висока производителност на NUMA-системите, поддържа размери, различни от 32 бита, и може да се използва вместо мултиплексирания системен повик futex().
- За архитектурите ARM32 и S390x е добавена поддръжка на актуалния набор (cpuv4) от инструкции BPF.
- За архитектурата RISC-V е реализирана възможност за използване на наличния в Clang 17 режим за проверка на Shadow-Call Stack, предназначен за защита от презаписване на адреса на връщане от функция в случай на преливане на буфера в стека. Същността на защитата е запазването на адреса на връщане в отделен „сенчест“ стек след предаване на управлението на функцията и извличането му преди изхода от функцията.
- В механизма за сливане на идентични страници памет (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), което позволява селективно разрешаване на достъп до тези функции само за определени процеси.
- Добавен е API за атестация на виртуални машини за потвърдява целостта на процесите след тяхното зареждане.
- В системите LoongArch е реализирана поддръжка на виртуализация с използване на хипервизор KVM.
- При използване на хипервизора KVM в системите RISC-V е налична поддръжка на разширението Smstateen, което блокира достъпа на виртуалната машина до регистрите на CPU, които хипервизорът явно не поддържа. Също така е добавена поддръжка за използването на разширението Zicond в хост системите, което позволява извършването на някои условни операции с цели числа.
- В хост системите под управлението на KVM, базирани на архитектура x86, е разрешено използването на до 4096 виртуални CPU.
- Мрежовата подсистема
- В драйвера NVMe-TCP (NVMe over 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, който се използва в GPU 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.
С concurrently латинoамериканският Фонд за свобода на софтуера издаде версия на напълно свободното ядро 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
