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

След два месеца разработка, Линус Торвалдс представи изданието на ядрото на 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), но с подобрена семантика и по-разбираема организация на работата. Използването на фолианти може да ускори управлението на паметта в някои подсистеми на ядрото. В предложените пачове е завършен преходът на страничния кеш към използване на фолианти и е добавена начална подкрепа за фолианти в FS 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 е разрешено задаването чрез функцията setsockopt на режимите SO_PRIORITY и SO_MARK.
    • За 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 за извеждане през framebuffer, предоставен от фърмуера.
    • Добавена е поддръжка на 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 и електронноPerо за таблети 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/PDIF, Qualcomm ALC5682I-VS, Texas Instruments TLV320ADC3xxx. Решени са проблеми с Tegra194 HD-аудио. Добавена е поддръжка за HDA кодеци CS35L41. Подобрена е поддръжката за звукови системи за лаптопи Lenovo и HP, както и за дънни платки Gigabyte.

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

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