Релиз на Linux ядро 5.9

След талантливата разработка на Линус Торвалдс представи е публикувана Linux 5.9. Сред основните промени са: ограничаване на вноса на символи от проприетарни модули в GPL модули, ускоряване на операциите по превключване на контекст с помощта на инструкциите на процесора FSGSBASE, поддръжка на компресия на образа на ядрото с помощта на Zstd, преработка на приоритетите на нишките в ядрото, поддръжка на протокол PRP (Parallel Redundancy Protocol), планиране с учетом на пропусквателната способност в планировчика deadline, предварително пактиране на страници на паметта, capability флаг CAP_CHECKPOINT_RESTOR, системен известие close_range(), повишаване на производителността на dm-crypt, премахване на кода за 32-битови гост системи Xen PV, нов механизъм за управление на паметта slab, опция „rescue“ в Btrfs, поддръжка на inline криптиране в ext4 и F2FS.

В новата версия са включени 16074 поправки от 2011 разработчици,
размерът на патча е 62 МБ (промените засягат 14548 файла, добавени са 782155 реда код, премахнати са 314792 реда). Около 45% от всички представени в 5.9
са свързани с драйверите на устройствата, около 15% от промените имат
отношение на обновления на кода, специфичен за хардуерни архитектури, 13%
е свързано с мрежовия стек, 3% - с файловите системи и 3% с вътрешните
подсистеми на ядрото.

Основни нововъведения:

  • Памет и системни услуги
    • Засилена защита от използването на GPL прослойки за свързване на проприетарни драйвери с компоненти на ядрото, достъпни само за модули под лицензия GPL. Флагът TAINT_PROPRIETARY_MODULE сега се наследява от всички модули, които внасят символи от модули с този флаг. Ако GPL модул се опита да внася символи от не-GPL модул, то този GPL модул ще наследи етикета TAINT_PROPRIETARY_MODULE и няма да може да се обръща към компонентите на ядрото, достъпни само за модули под лицензия GPL, дори ако модулът преди това е внасял символи от категория „gplonly“. Обратната блокировка (експорт само на EXPORT_SYMBOL_GPL в модули, внесли EXPORT_SYMBOL_GPL), която може да наруши работата на проприетарни драйвери, не е реализирана (наследява се само флагът на проприетарния модул, но не и GPL привързаността).
    • Добавена е поддръжка на механизма kcompactd за предварително пактиране на страници на паметта. в режим на задене, позволяващ да увеличи броя на големи страници памет, достъпни за ядрото. По предварителна оценка, фонова опаковка с минимални разходи позволява 70-80 пъти да се намалят закъсненията при разпределението на големи страници памет (huge-page) в сравнение с предишно използван механизъм за опаковка, задействан при необходимост (on-demand). За задаване на границите на външната фрагментация, която ще осигури kcompactd, е добавен sysctl vm.compaction_proactiveness.
    • Добавена е поддръжка на компресия на образа на ядрото с помощта на алгоритъм Zstandard (zstd).
    • За системи x86 е реализирана поддръжка на инструктивен набор на процесора FSGSBASE, позволяващ четене и модификация на съдържанието на регистрите FS/GS от потребителското пространство. В ядрото FSGSBASE се използва за ускоряване на операциите по превключване на контекста чрез изключване на излишни операции за запис на MSR за GSBASE, а в потребителското пространство позволява да се избегнат излишни системни повиквания за промяна на FS/GS.
    • Добавен е параметрът «allow_writes», позволяващ да се забрани промяната на MSR регистрите на процесора от потребителското пространство и да се ограничи достъпът до съдържанието на данните на регистрите само до операции за четене, тъй като промяната на MSR може да доведе до проблеми. По подразбиране записът все още не е забранен, а промените в MSR се отразяват в дневника, но в бъдеще се планира по подразбиране достъпът да бъде в режим само за четене.
    • В интерфейса на асинхронния вход/изход io_uring добавена е пълна поддръжка на асинхронни операции с буферирано четене, които не изискват привличане на ядро. Поддръжката на запис се очаква в следващото издание.
    • В планировчика за въвеждане/изход deadline е реализирано планирането с оглед на пропускливостта, позволяващо да взема правилни решения в асиметрични системи, като системите ARM на базата на архитектури DynamIQ и big.LITTLE, комбиниращи в един чип мощни и по-малко производителни енергийно ефективни ядра на CPU. В частност, новият режим позволява да се избегнат несъответствия при планирането, когато бавното ядро на CPU не разполага с необходимите ресурси за изпълнение на задачата в зададения срок.
    • Моделът на потребление на енергия в ядрото (Energy Model framework) сега описва не само поведение на енергопотребление на CPU, но и обхваща периферийни устройства.
    • Реализиран е системен повик close_range(), позволяващ на процеса едновременно да затвори цял диапазон от отворени файлови дескриптори.
    • От реализация на текстова конзола и драйвер fbcon е премахнат код, осигуряваща възможност за програмирано прокарване на текст назад (CONFIG_VGACON_SOFT_SCROLLBACK) повече от обема видеопаметта на текстовия режим VGA.
    • Преработен алгоритъм за задаване на приоритети за нишките в ядрото. Новият вариант осигурява по-добра последователност в всички подсистеми на ядрото при задаване на приоритети за задачи с реално време.
    • Добавен е sysctl sched_uclamp_util_min_rt_default за управление на параметрите за форсиране на честотата на CPU за задачи с реално време (например, може да се променя поведението при изпълнение на задачи с реално време за пестене на енергия след преминаване на захранване от акумулатор или на мобилни системи).
    • Извършена е подготовка за реализиране на поддръжката на технологията Transparent Huge Pages в страничния кеш.
    • В механизма fanotify са внедрени нови флагове FAN_REPORT_NAME и FAN_REPORT_DIR_FID за предаване на информация за родителското име и уникалния идентификатор FID при настъпване на събития за създаване, изтриване или преместване на елементи от каталога и независими от каталогите обекти.
    • За cgroups е реализиран нов контролер за разпределение на паметта slab (slab memory controller), който е забележителен с прехвърлянето на отчитането на slab от ниво страници на паметта на ниво обекти в ядрото, което позволява споделянето на slab-страници в различни cgroup, вместо отделни кешове slab за всяка cgroup. Предложеният подход позволява повишаване на ефективността при използване на slab, с 30-45% намаление на размера на използваната памет за slab, значително намаляване на общото потребление на памет от ядрото и намаляване на фрагментацията на паметта.
    • В звуковата подсистема ALSA и в USB-стека, в съответствие с неотдавна приетите препоръките за използване на инклузивна терминология в ядрото на Linux, е извършено почистване на неполиткоректни термини. Кодът е почистен от използването на думите „slave“, „master“, „blacklist“ и „whitelist“.
  • Виртуализация и безопасност
    • При компилиране на ядрото с помощта на компилатора Clang е добавена възможност за конфигуриране (CONFIG_INIT_STACK_ALL_ZERO) на автоматична инициализация с нулева стойност на всички променливи, съхранявани в стека (по време на компилиране се указва „-ftrivial-auto-var-init=zero“).
    • В подсистемата seccomp, при използване на режима на контрол на процеса в потребителското пространство, е добавена възможността подмяна в наблюдавания процеси на файлови дескриптори за пълна емуляция на системни повиквания, които предизвикват създаването на файлови дескриптори. Тази функционалност е търсена в системи с изолирани контейнери и прилагания на песsandbox за Chrome.
    • За архитектури xtensa и csky е добавена поддръжка за ограничаване на системни повиквания с помощта на подсистемата seccomp. За xtensa е реализирана допълнителна поддръжка на механизма за одит.
    • Добавен е нов capability-флаг CAP_CHECKPOINT_RESTORE, който позволява достъп до функции, свързани със замразяване и възстановяване на състоянието на процесите, без предаване на допълнителни привилегии.
    • В GCC 11 са реализирани всички възможности, необходими за
      отладъчния инструмент KCSAN (Kernel Concurrency Sanitizer), предназначен за динамично откриване на състояния на състезание в ядрото. Така KCSAN вече може да се използва с ядра, компилирани в GCC.
    • За AMD Zen и по-нови модели на CPU е добавена поддръжка на технологията P2PDMA, позволяваща използването на DMA за директно предаване на данни между паметта на две устройства, свързани към шина PCI.
    • В dm-crypt е добавен режим, позволяващ да се намалят закъсненията чрез извършване на криптографска обработка на данни без използване на работни опашки. Указаният режим е необходим и за правилната работа с зонирани блокови устройства (устройства с области, които трябва да бъдат записвани последователно с актуализиране на цялата група блокове). Направена е работа за увеличаване на пропускателната способност и намаляване на закъсненията в dm-crypt.
    • Премахнат е кодът за поддръжка на 32-битови гост системи, работещи в режим на паравиртуализация под управлението на хипервизор Xen. Потребителите на такива системи трябва да преминат на използване на 64-битови ядра в гост околните или да използват за стартиране на околните вместо паравиртуализация (PV) режими на пълна (HVM) или комбинирана (PVH) виртуализация.
  • Дискова подсистема, вход/изход и файлови системи
    • В файловата система Btrfs реализирана опция за монтиране „rescue“, унифицираща достъпа до всички други опции за възстановяване. Премахната е поддръжката на опции „alloc_start“ и „subvolrootid“, опцията „inode_cache“ е обявена за остаряла. Извършени са оптимизации на производителността, особено забележимо е ускорението на операциите fsync(). Добавена е възможност за използване на алтернативни типове контролни суми, различни от CRC32c.
    • Добавена е възможност за използване на inline-шифроване (Inline Encryption) във файловите системи ext4 и F2FS, за включването на което е предвидена опция за монтиране „inlinecrypt“. Режимът на inline-шифроване позволява използването на вградените в контролера на носителя механизми за шифроване, които извършват прозрачно шифроване и разшифроване на входа/изхода.
    • В XFS осигурено изчистване на inode (flush) в напълно асинхронен режим, който не блокира процесите при изпълнение на операцията по почистване на паметта. Решен е дългогодишен проблем с квотите, поради който неправилно се проследяваха предупрежденията за превишаване на мекия лимит и ограниченията за броя на inode. Унифицирана е реализацията на поддръжка на DAX за ext4 и xfs.
    • В Ext4 реализирана предварително зареждане на битови карти за разпределение на блоковете. В комбинация с ограничаването на сканирането на неинициализирани групи, оптимизацията позволи да се съкрати времето за монтиране на много големи разпределения.
    • В F2FS добавен ioctl F2FS_IOC_SEC_TRIM_FILE, позволяващ използването на команди TRIM/discard за физическо нулиране на определените данни в файл, например, за премахване на ключовете за достъп без оставяне на остатъчни данни на носителя.
      В F2FS също добавен нов режим за събиране на боклука GC_URGENT_LOW, който работи по-агресивно, като изключва някои проверки за състояние на бездействие (idle) преди стартиране на събирача на боклук.
    • В bcache размерът на bucket_size за екстентите е увеличен от 16 на 32 бита в рамките на подготовката за осигуряване на възможността за прилагане към кеширани зонирани устройства.
    • В подсистемата SCSI е добавена възможност за използване на inline-шифроване на базата на вградените средства за хардуерно шифроване, предоставяни от UFS-контролерите (Universal Flash Storage).
    • Добавен е нов параметър на командния ред на ядрото „debugfs“, позволяващ управление на наличността на едноименната псевдо-ФС.
    • В клиента NFSv4.2 е осигурена поддръжка на разширени атрибути на файлове (xattr).
    • В dm-dust добавен интерфейс за извеждане на списък на всички установени bad-блокове на диска ("dmsetup message dust1 0 listbadblocks").
    • За md/raid5 е добавен параметър /sys/block/md1/md/stripe_size за настройка на размера на STRIPE-блока.
    • За устройствата за съхранение NVMe е добавена поддръжка на команди за зониране на носителя (ZNS, NVM Express Zoned Namespace), позволяваща разделяне на пространството за съхранение на зони, съставляващи групи блокове, за по-пълно управление на разполагането на данни на носителя.
  • Мрежовата подсистема
    • В Netfilter е добавена възможност за отхвърляне на пакети на етапа преди проверка на маршрутизация (изразът REJECT вече може да се използва не само в веригите INPUT, FORWARD и OUTPUT, но и на етапа PREROUTING за icmp и tcp).
    • В nftables е добавена възможност за одит на събития, свързани с промяна на конфигурацията.
    • В nftables в API netlink е добавена поддръжка на анонимни вериги, наименувани динамично от ядрото. При изтриване на свързаното с анонимната верига правило, автоматично се изтрива и самата верига.
    • В BPF е добавена поддръжка на итератори за обход, филтриране и променяне на елементите на асоциативни масиви (map) без копиране на данни в пространството на потребителя. Итераторите могат да се използват за сокети TCP и UDP, което позволява на BPF-програмите да преминават през списъците с отворени сокети и да извличат необходимата информация от тях.
    • Добавен е нов тип BPF-програми BPF_PROG_TYPE_SK_LOOKUP, които се стартират, когато ядристото търси подходящ слушащ сокет за входящо свързване. С помощта на такава BPF-програма могат да се създават обработвачи, които вземат решения за това с кой сокет да се асоциира свързването, без ограничение от системния повик bind(). Например, може да се организира свързването на един сокет с диапазон от адреси или портове. Освен това, в bpf_setsockopt() е добавена поддръжка на флага SO_KEEPALIVE и е реализирана възможността за създаване на обработвачи BPF_CGROUP_INET_SOCK_RELEASE, които се извикват при освобождаването на сокета.
    • Реализирана е поддръжка на протокол PRP (Parallel Redundancy Protocol), позволяващ на базата на Ethernet прозрачно за приложенията превключване на резервен канал при сбой на всякакви компоненти в мрежата.
    • В стек mac80211 е добавена поддръжка на четиристепенното споразумение за канал WPA/WPA2-PSK в режим на точка на достъп.
    • Добавена е възможност за превключване на планировчика qdisc (queuing discipline) да използва по подразбиране алгоритъма за управление на мрежовите опашки FQ-PIE (Flow Queue PIE), насочен към намаляване на негативното въздействие на междинното буфериране на пакети на граничното мрежово оборудване (bufferbloat) в мрежи с кабелни модеми.
    • Добавени нови възможности в MPTCP (MultiPath TCP), разширение на протокола TCP за организиране на TCP връзка с доставка на пакети едновременно по няколко маршрута през различни мрежови интерфейси, свързани с различни IP адреси. Добавена е поддръжка на syn cookie, DATA_FIN, автоматична настройка на буферите, диагностика на сокети и използване на флаговете REUSEADDR, REUSEPORT и V6ONLY в setsockopt.
    • За виртуалните таблици за маршрутизиране VRF (Virtual Routing and Forwarding), които позволяват организирането на работа с няколко домейна на маршрутизиране в една система, е реализиран режим "strict". В този режим виртуалната таблица може да бъде асоциирана само с таблица за маршрутизиране, която не се използва в други виртуални таблици.
    • В безжичния драйвер ath11k е добавена поддръжка на честота 6GHz и спектрално сканиране..
  • Оборудване
    • Премахнат е кодът за поддръжка на архитектурата UniCore, разработена в микропроцесорния център на Пекинския университет и включена в ядрото на Linux през 2011 г. Тази архитектура от 2014 г. е без поддръжка и не е подкрепена в GCC.
    • За архитектурата RISC-V е реализирана поддръжка на kcov (debugfs интерфейс за анализ на покритието на ядрото), kmemleak (система за откриване на течове на памет), защита на стека, етикети за пренос и tickless операции (независима от сигналите на таймера многозадачност).
    • За архитектурата PowerPC е реализирана поддръжка на опашки за spinlock, което е позволило значително да се повиши производителността в ситуации на конфликти с блокировките.
    • За архитектури ARM и ARM64 по подразбиране е активиран механизма за регулиране на честотата на процесора schedutil (cpufreq governor), който за вземане на решение за промяна на честотата директно използва информация от планировчика на задачи и може веднага да се обърне към драйверите cpufreq за незабавно изменение на честотата, моментално настройвайки параметрите на работа на CPU спрямо текущото натоварване.
    • В DRM драйвера i915 за видеокарти Intel е включена поддръжка на чипове от микроархитектура Rocket Lake и е добавена начална поддръжка на дискретни карти Intel Xe DG1..
    • В драйвера amdgpu е добавена начална поддръжка на GPU AMD Navi 21 (Navy Flounder) и Navi 22 (Sienna Cichlid). Добавена е поддръжка за движките за ускорение на кодирането и декодирането на видео UVD/VCE за GPU Southern Islands (Radeon HD 7000).
      Добавено е свойство за завъртане на дисплея на 90, 180 или 270 градуса.

      Интересно е, че драйвера за GPU AMD е най-големият драйвер в ядрото — той съдържа около 2.71 млн. реда код, което е около 10% от общия размер на ядрото (27.81 млн. реда). От тях 1.79 млн. реда са генерирани автоматично заглавни файлове с данни за регистрите на GPU, а C-кодът представлява 366 хиляди реда (за сравнение, драйверът Intel i915 съдържа 209 хиляди реда, а Nouveau — 149 хиляди).

    • В драйвера Nouveau е добавена подкрепа за покадрова проверка на целостта с помощта на CRC (Циклични проверки за цялост) в дисплейните движки GPU на NVIDIA. Реализацията се основава на документацията, предоставена от NVIDIA.
    • Добавени драйвери за LCD-панели: Frida FRD350H54004, KOE TX26D202VM0BWA, CDTech S070PWS19HP-FC21, CDTech S070SWV29HG-DC44, Tianma TM070JVHG33 и Xingbangda XBD599.
    • В звуковата подсистема ALSA е реализирана поддръжка на Intel Silent Stream (режим на постоянно поддържане на мощността за външни HDMI устройства за изключване на забавяне при започване на възпроизвеждане) и ново устройство за управление на подсветката на бутоните за активиране на микрофона и изключване на звука, както и добавена е поддръжка на ново оборудване, включително контролер Loongson 7A1000.
    • Добавена е поддръжка на ARM платформи, устройства и платформи: Pine64 PinePhone v1.2, Lenovo IdeaPad Duet 10.1, ASUS Google Nexus 7, Acer Iconia Tab A500, Qualcomm Snapdragon SDM630 (използван в Sony Xperia 10, 10 Plus, XA2, XA2 Plus и XA2 Ultra), Jetson Xavier NX, Amlogic WeTek Core2, Aspeed EthanolX, пет нови платки на база NXP i.MX6, MikroTik RouterBoard 3011, Xiaomi Libra, Microsoft Lumia 950, Sony Xperia Z5, MStar, Microchip Sparx5, Intel Keem Bay, Amazon Alpine v3, Renesas RZ/G2H.

Одновременно латиноамериканският Фонд за свободен софтуер сформира
вариант напълно свободно ядро 5.9 — Linux-libre 5.9-gnu, почистено от елементи на фърмуера и драйверите, съдържащи несвободни компоненти или код, чийто обхват е ограничен от производителя. В новото издание е забранено зареждането на блобове в драйверите за WiFi rtw8821c и SoC MediaTek mt8183. Актуализиран е кодът за почистване на блобове в драйверите и подсистемите Habanalabs, Wilc1000, amdgpu, mt7615, i915 CSR, Mellanox mlxsw (Spectrum3), r8169 (rtl8125b-2) и x86 touchscreen.

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

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