След като разработката продължи два месеца, Линус Торвалдс представи релиза на ядрото Linux 5.17. Сред най-забележителните промени са: нова система за управление на производителността за AMD процесори, възможност за рекурсивно картографиране на идентификатори на потребители в файловите системи, поддръжка на преносими компилирани BPF програми, преминаване на генератора на псевдослучайни числа на алгоритъм BLAKE2s, инструментът RTLA за анализ на изпълнение в реално време, нов бекенд fscache за кеширане на мрежови файлови системи, и възможност за прикрепяне на имена към анонимни действия mmap.
Новата версия включва 14203 корекции от 1995 разработчици, размерът на пача е 37 MB (промените са засегнали 11366 файла, добавени са 506043 реда код и са изтрити 250954 реда). Приблизително 44% от всички промени представени в 5.17 са свързани с драйвери на устройства, около 16% от промените са свързани с обновяване на специфичен за апаратни архитектури код, 15% са свързани с мрежовия стек, 4% с файловите системи и 4% с вътрешните подсистеми на ядрото.
Основни нововъведения в ядрото 5.17:
- Дисковата подсистема, вход/изход и файловите системи
- Реализирана е възможността за вложено картографиране на идентификатори на потребители в монтирани файлови системи, използвано за свързване на файлове на определен потребител в монтирано чуждо пространство с друг потребител в текущата система. Добавената възможност позволява рекурсивно използване на картографирането върху файлови системи, за които вече се прилага картографиране.
- Подсистемата fscache е изцяло пренаписана, използвана за организиране на кеширане в локалната файловата система на данни, предавани през мрежови файлови системи. Новата реализация се отличава с значително опростяване на кода и замяна на сложни операции по планиране и проследяване на обектите с по-прости механизми. Поддръжката на новото fscache е реализирана в файловата система CIFS.
- В подсистемата за проследяване на събития в файловите системи fanotify е реализиран нов тип събития FAN_RENAME, който позволява едновременно улавяне на операцията по преименуване на файлове или директории (по-рано за обработка на преименувания се използваха две отделни събития FAN_MOVED_FROM и FAN_MOVED_TO).
- В файловата система Btrfs е извършена оптимизация на операциите по запис и fsync за големи директории, реализирана чрез копиране само на индексни ключове и намаляване на обема на записваните метаданни. Осигурена е поддръжка на индексирование и търсене по размер на записите за свободно пространство, което е позволило да се намалят закъсненията с около 30% и да се съкрати времето за търсене. Разрешено е прекъсване на операциите по дефрагментация. Включена е възможност за добавяне на устройства при изключен баланс между носителите, т.е. при монтиране на файловата система с опция skip_balance.
- Предложен е нов синтаксис за монтиране на файловата система Ceph, който решава съществуващите проблеми, свързани с закрепването по IP адреси. Освен това IP адреса за определяне на сървъра сега може да се използва идентификатор на клъстера (FSID): mount -t ceph user@fsid.fs_name=\/[subdir] mnt -o mon_addr=monip1[:port][\/monip2[:port]]
- Файловата система Ext4 е преминала на нов API за монтиране, който разделя етапите на анализ на опцията за монтиране и настройка на суперблока. Подкрепата за опции за монтиране lazytime и nolazytime, които бяха добавени като временно изменение за опростяване на прехода на util-linux към използването на флаг MS_LAZYTIME, е окончателно прекратена. Добавена е поддръжка за задаване и четене на етикети в файловата система (ioctl FS_IOC_GETFSLABEL и FS_IOC_SETFSLABEL).
- В NFSv4 е добавена поддръжка за работа в файлови системи без да се разделят регистрираните символи в имената на файловете и директориите. В NFSv4.1+ е добавена поддръжка за определяне на агрегатни сесии (trunking).
- Памет и системни услуги
- Добавен е драйвер amd-pstate, осигуряващ динамично управление на честотата за постигане на оптимална производителност. Драйверът поддържа CPU и APU AMD от поколение Zen 2, разработен съвместно с компанията Valve и насочен към повишаване на ефективността на управлението на енергийната консумация. За адаптивна промяна на честотата се използва механизъм CPPC (Collaborative Processor Performance Control), който позволява по-прецизно регулиране на показателите (не е ограничен до три нива на производителност) и по-оперативно реагиране на промените в състоянието в сравнение с предишно използваните P-state драйвери на базата на ACPI (CPUFreq).
- В подсистемата eBPF е предложен обработчик bpf_loop(), който предлага алтернативен начин за организиране на цикли в eBPF програми, по-бърз и по-лесен за проверка от верикатора.
- На ниво ядро е реализиран механизъм CO-RE (Compile Once — Run Everywhere), който позволява компилирането на код на eBPF програми само един път и използването на специален универсален зареждач, адаптиращ заредената програма към текущото ядро и типовете BTF (BPF Type Format).
- Предоставена е възможност за задаване на имена на области от частна анонимна (выделена чрез malloc) памет, което може да улесни дебъгването и оптимизацията на потреблението на памет в приложенията. Имената се задават чрез prctl с флага PR_SET_VMA_ANON_NAME и се показват в /proc/pid/maps и /proc/pid/smaps под формата „[anon:]“.
- В планировчика на задачи е осигурено проследяване и показване в /proc/PID/sched времето, прекарано от процесите в състояние на принудителен покой (forced-idle), прилагано например за намаляване на натоварването при прегряване на процесора.
- Добавен е модул gpio-sim, предназначен за симулация на чипове GPIO за провеждане на тестове.
- В командата „perf ftrace“ е добавена подкоманда „latency“ за генериране на хистограми с информация за закъсненията.
- Добавен е комплект инструменти „RTLA“ за анализ на работа в реално време. Включва такива инструменти като osnoise (определя влиянието на операционната система върху изпълнението на задача) и timerlat (променя закъсненията, свързани с таймера).
- Интегрирана е втора серия пачове с реализация на концепцията за томове страници памет (page folios), които наподобяват комбинирани страници памет (compound pages), но с подобрена семантика и по-ясна организация на работата. Използването на фолиа позволява ускоряване на управлението на паметта в някои подсистеми на ядрото. В предложените пачове е приключен преводът на страничния кеш за използване на фолиа и е добавена начална поддръжка за фолиа в ФС XFS.
- Добавен е режим на компилация „make mod2noconfig“, при който се генерира конфигурация, събираща всички изключени подсистеми под формата на модули на ядрото.
- Повишени са изискванията към версията на LLVM/Clang, която може да се използва за компилация на ядрото. За компилация сега е необходим минимум версия LLVM 11.
- Виртуализация и сигурност
- Предложена обновена версия генератора на псевдослучайни числа RDRAND, отговарящ на устройствата /dev/random и /dev/urandom, забележителна с преминаването към използването на хеш-функцията BLAKE2s вместо SHA1 за операции по смесване на ентропия. Това изменение повиши сигурността на генератора на псевдослучайни числа, като елиминира проблемния алгоритъм SHA1 и изключи презаписването на инициализационния вектор на RNG. Тъй като алгоритъмът BLAKE2s е по-ефективен от SHA1, неговото приложение също оказа положително влияние върху производителността.
- Добавена е защита срещу уязвимости в процесорите, предизвикани от спекулативното изпълнение на инструкции след безусловни директни преходи. Проблемът възниква заради предварителната обработка на инструкциите, идващи в паметта след командата за преход (SLS, Straight Line Speculation). За активирането на защитата е необходимо компилиране с версия GCC 12, която е в етап на тестване.
- Добавен е механизъм за проследяване на преброяването на референции (refcount, reference-count), целящ да намали броя на грешките при преброяването на референции, което води до достъп до памет след освобождаването ѝ. Механизмът е ограничен до мрежовата подсистема, но в бъдеще може да бъде адаптиран и за други части на ядрото.
- Реализирани са разширени проверки на новите записи в таблицата за страници на паметта на процеса, позволяващи откриването на определени типове повреди и спирането на системата, блокирайки атаките в ранна фаза.
- Добавена е възможността за разархивиране на ядрените модули директно от самото ядро, а не от обработвача в потребителското пространство, което позволява с помощта на LSM модула LoadPin да се гарантира, че ядрените модули са заредени в паметта от проверено устройство за съхранение.
- Осигурена е сборка с флага "-Wcast-function-type", включващ извеждането на предупреждения за приведението на указатели към функции с несъвместим тип.
- Добавен е виртуален хостов драйвер pvUSB за хипервизора Xen, предоставящ достъп до USB устройства, пробити в гостуващи системи (позволява от гостуващи системи да достъпват физически USB устройства, свързани с гостуващата система).
- Добавен модул, който позволява взаимодействие чрез Wi-Fi с подсистемата IME (Intel Management Engine), която се предлага в повечето съвременни дънни платки с Intel процесори и е реализирана като отделен микропроцесор, работещ независимо от CPU.
- За архитектурата ARM64 е реализирана поддръжка на инструмента за отстраняване на грешки KCSAN (Kernel Concurrency Sanitizer), предназначен за динамично откриване на състояния на гонка в ядрото.
- За 32-битови ARM системи е добавена възможността за използване на механизма KFENCE за откриване на грешки при работа с паметта.
- В хипервизора KVM е добавена поддръжка на инструкциите AMX (Advanced Matrix Extensions), реализирани в предстоящите сървърни процесори Intel Xeon Scalable.
- Мрежова подсистема
- Добавена е поддръжка на изместване (offloading) на операциите, свързани с управлението на трафика, към мрежовите устройства.
- Добавена е възможност за използване на протокола MCTP (Management Component Transport Protocol) върху устройства с последователен интерфейс. MCTP може да се използва за взаимодействие с управляващи контролери и свързаните с тях устройства (хост процесори, периферийни устройства и т.н.).
- Проведена е оптимизация на TCP стека, например, за повишаване на производителността на повикванията recvmsg е реализирано отложено освобождаване на сокет буферите.
- На ниво привилегии CAP_NET_RAW е разрешено задаването на режимите SO_PRIORITY и SO_MARK чрез функцията setsockopt.
- За IPv4 е разрешено прикрепянето на raw сокети не към локални IP адреси, използвайки опциите IP_FREEBIND и IP_TRANSPARENT.
- Добавен е sysctl arp_missed_max за настройка на праговото число на грешките при проверка от ARP монитор, след което мрежовият интерфейс се поставя в изключено състояние.
- Предоставена е възможност за настройка на отделни стойности sysctl min_pmtu и mtu_expires за мрежовите имена пространства.
- В API ethtool е добавена възможност за задаване и определяне на размерите на входящи и изходящи пакетни буфери.
- В Netfilter е добавена поддръжка за филтриране на транзитния pppoe трафик в мрежовия мост.
- В модула ksmbd с реализация на файловия сървър, използващ протокола SMB3, е добавена поддръжка за обмен на ключове, задействан е мрежовият порт 445 за smbdirect и е добавена поддръжка за параметъра „smb2 max credit.
- Оборудване
- В подсистемата drm (Direct Rendering Manager) и драйвера i915 е добавена поддръжка на екрани за извеждане на конфиденциална информация, например, някои лаптопи са оборудвани с екрани, вградени с режим на конфиденциално гледане, затрудняващ разглеждането отстрани. Добавените промени позволяват свързването на специализирани драйвери за подобни екрани и управление на режимите на конфиденциално гледане чрез задаване на свойства в обикновените KMS-драйвери.
- В драйвера amdgpu е включена поддръжка на отладъчната технология STB (Smart Trace Buffer) за всички поддържащи я GPU AMD. STB улеснява анализа на сривове и откритията на източника на проблеми чрез запазване в специален буфер на информация за функциите, изпълнявани преди последния срив.
- В драйвера i915 е добавена поддръжка за чиповете Intel Raptor Lake S и е активирана по подразбиране поддръжка на графичната подсистема на чиповете Intel Alder Lake P. Предоставена е възможност за управление на подсветката на екрана през DPCD-интерфейса VESA.
- В драйверите fbcon/fbdev е възстановена поддръжка на хардуерно ускорение на превъртане в конзолата.
- Продължена е интеграцията на промените за поддръжка на чиповете Apple M1. Реализирана е възможност за използване на драйвера simpledrm на системи с чип Apple M1 за извеждане през фреймбуфера, предоставен от фърмуера.
- Добавена е поддръжка на ARM SoC, устройства и платки Snapdragon 7c, 845 и 888 (Sony Xperia XZ2 / XZ2C / XZ3, Xperia 1 III / 5 III, Samsung J5, Microsoft Surface Duo 2), Mediatek MT6589 (Fairphone FP1), Mediatek MT8183 (Acer Chromebook 314), Mediatek MT7986a/b (използва се в Wi-Fi рутери), Broadcom BCM4908 (Netgear RAXE500), Qualcomm SDX65, Samsung Exynos7885, Renesas R-Car S4-8, TI J721s2, TI SPEAr320s, NXP i.MX8 ULP8, Aspeed AST2500/AST2600, Engicam i.Core STM32MP1, Allwinner Tanix TX6, Facebook Bletchley BMC, Goramo MultiLink, JOZ Access Point, Y Soft IOTA Crux/Crux+, t6000/t6001 MacBook Pro 14/16.
- Добавена е поддръжка на процесорите ARM Cortex-M55 и Cortex-M33.
- Добавена е поддръжка на устройства с CPU MIPS: Linksys WRT320N v1, Netgear R6300 v1, Netgear WN2500RP v1/v2.
- Добавена е поддръжка на SoC StarFive JH7100, базиран на архитектурата RISC-V.
- Добавен е драйвер lenovo-yogabook-wmi за управление на подсветката на клавиатурата и достъп до различни сензори в Lenovo Yoga Book.
- Добавен е драйвер asus_wmi_sensors за достъп до сензорите, използвани на дънните платки Asus X370, X470, B450, B550 и X399, базирани на процесорите AMD Ryzen.
- Добавен е драйвер x86-android-tablets за таблети, базирани на архитектурата x86, които се доставят с платформата Android.
- Добавена поддръжка на сензорни екрани TrekStor SurfTab duo W1 и електронно перо за таблети Chuwi Hi10 Plus и Pro.
- В драйверите за SoC Tegra 20/30 е добавена поддръжка за управление на енергията и напрежението. Осигурена е възможност за зареждане на стари 32-битови устройства, базирани на SoC Tegra, като ASUS Prime TF201, Pad TF701T, Pad TF300T, Infinity TF700T, EeePad TF101 и Pad TF300TG.
- Добавени са драйвери за индустриални компютри Siemens.
- Добавена е поддръжка за LCD панели Sony Tulip Truly NT35521, Vivax TPC-9150, Innolux G070Y2-T02, BOE BF060Y8M-AJ0, JDI R63452, Novatek NT35950, Wanchanglong W552946ABA и Team Source Display TST043015CMHX.
- Добавена е поддръжка за аудиосистеми и кодеци AMD Renoir ACP, Asahi Kasei Microdevices AKM4375, Intel системи с NAU8825/MAX98390, Mediatek MT8915, nVidia Tegra20 S/PDIFF, Qualcomm ALC5682I-VS, Texas Instruments TLV320ADC3xxx. Решени са проблеми с Tegra194 HD-аудио. Добавена е поддръжка за HDA за кодеци CS35L41. Подобрена е поддръжката на аудиосистеми за лаптопи Lenovo и HP, както и за дънни платки Gigabyte.
Източник: opennet.ru
