Релиз на ядрото Linux 5.16.

След като преминаха два месеца разработка, Линус Торвалдс представи версията на ядрото Linux 5.16. Сред най-забележителните промени са: системния повик futex_waitv за повишаване на производителността на Windows игрите в Wine, проследяване на грешки в файловата система чрез fanotify, концепцията за томове в системата за управление на паметта, поддръжка на процесорните инструкции AMX, възможност за резервиране на памет за мрежови сокети, поддръжка в netfilter за класификация на пакети в етапа 'egress', внедряване на подсистемата DAMON за предварително изгонване на неизползвани области от паметта, подобрена обработка на свръхнатоварвания при голям обем операции по запис, и поддръжка на многодискови твърди дискове.

В новата версия са включени 15415 корекции от 2105 разработчици, размерът на патча е 45 МБ (промените засягат 12023 файла, добавени са 685198 реда код, изтрити са 263867 реда). Около 44% от всички представени в 5.16 промени са свързани с драйверите на устройства, приблизително 16% от промените са свързани с обновление на код, специфичен за хардуерни архитектури, 16% са свързани с мрежовия стек, 4% — с файловите системи и 4% — с вътрешните подсистеми на ядрото.

Основните нововъведения в ядрото 5.16:

  • Дискова подсистема, вход/изход и файлови системи
    • В механизма fanotify са добавени средства за мониторинг на състоянието на файловата система и проследяване на възникването на грешки. Информация за грешките се предава чрез нов тип събития — FAN_FS_ERROR, които могат да се перехващат в изпълняваните пространства на потребителските системи за мониторинг за бързо информиране на администратора или за стартиране на процеси за възстановяване. При каскадно възникване на серия грешки fanotify осигурява доставка на съобщение за първата грешка заедно с общия брояч на проблемите, за да се улесни последващото проучване на причините за неуспех. Възможността за проследяване на грешки в момента е реализирана само за файловата система Ext4.
    • Подобрена обработката на претоварванията при извършване на записи (write congestion), които възникват, когато обемът на операциите за запис надвишава пропускателната способност на устройството и системата е принудена да блокира заявките на записния процес, докато не приключи изпълнението на вече подадените заявки. В новата версия напълно е преработен механизмът на ядрото, използван за получаване на информация за възникването на претоварване и блокиране на задачи, тъй като в старата реализация се наблюдаваха проблеми със свързването на обработката на претоварванията с изместването на страници в паметта при недостиг на памет в системата.
    • В Btrfs е реализирана поддръжка на технологията за зониране на устройства (Zoned Namespace), използвана в твърди дискове или NVMe SSD за разделяне на пространството за съхранение на зони, съставящи групи блокове или сектори, където е разрешено само последователно добавяне на данни с обновление на цялата група блокове. Освен това са направени малки оптимизации на логването на inode, което е довело до повишаване на пропускателната способност в теста dbench с 3% и намаляване на закъснението с 11%. Преработен е механизмът на логването на директории, в който за повишаване на ефективността е намален броят на операциите за търсене и блокировки в дървото. Ускорена е вставката на елементи в структурата btree в пакетен режим (времето за масова вставка на елементи е намалено с 4%, а за изтривания с 12%). Добавена е ограничена поддръжка за използване на компресия при запис на непълни страници, както и възможност за дефрагментиране на подсраниците (subpage). Подготовката за включване на поддръжка на втората версия на протокола за команда „send“ е извършена.
    • В файловата система XFS е намалено потреблението на памет чрез използване на отделни кешове slab за често използвани елементи и намаляване на някои структури от данни.
    • В файловата система Ext4 са отбелязани само корекции на грешки и по-точно изчисляване на параметрите за отложена инициализация на таблицата Inode.
    • На ниво блокови устройства са реализирани оптимизации, които значително повишават ефективността на свързването на операциите с ядрата на CPU.
    • Добавена е начална поддръжка на твърди дискове с няколко независими привода (multi-actuator), което позволява едновременно достъп до множество сектори в различни зони на магнитната пластина.
    • Добавена нова ioctl команда CDROM_TIMED_MEDIA_CHANGE за определяне на събитията за смяна на носител в оптичния диск.
    • В файловата система EROFS (Enhanced Read-Only File System) е добавена възможност за работа над няколко устройства за съхранение. Различни устройства могат да бъдат отразени в едно 32-битово адресно пространство на блоковете. Също така е добавена поддръжка за компресия с използване на алгоритъм LZMA.
    • В файловата система F2FS са добавени опции за монтиране, които контролират фрагментацията на файловете при разполагането им в хранилището (например, за отстраняване на проблеми с оптимизации, свързани с фрагментирано хранилище).
    • В CEPH операции по създаване и изтриване на директории са включени по подразбиране в асинхронен режим (за възстановяване на старото поведение, следва да се използва флага ‘-o wsync’ при монтиране). Добавено е водене на метрики, които следят операциите по копиране на външни обекти.
    • В CIFS е добавен параметър за монтиране tcpnodelay, при който за мрежовия сокет се задава режим tcp_sock_set_nodelay, който деактивира изчакването за запълване на опашката в TCP стека. Добавена е поддръжка на вложени DFS Link (Distributed File System) при повторно монтиране.
    • Добавена е поддръжка за завършване на заявки за блочно устройство в пакетен режим. Тестът на промяната показа увеличение на интензивността на произвежданите операции за произволно четене от Optane устройства от 6.1 до 6.6 млн IOPS на ядро на CPU.
  • Памет и системни услуги
    • Добавен е нов системен повик futex_waitv, който позволява проследяване на състоянието на няколко фьютекса с помощта на едно системно повикване. Указаната възможност напомня на функционалността WaitForMultipleObjects, налична в Windows, чиято емуляция чрез futex_waitv може да бъде полезна за повишаване на производителността на Windows игри, работещи под управление на Wine или Proton. Освен това, едновременното изчакване на фьютекси може да се прилага и за оптимизиране на производителността на нативни версии на игри за Linux.
    • Реализирана е концепция за страници с памет (page folios), чиято употреба в някои подсистеми на ядрото ще ускори управлението на паметта при стандартни натоварвания. В момента основната подсистема за управление на паметта в ядрото вече е преминала към фолианти, а внедряването на страничния кеш е в ход, като в бъдеще е предвидено преминаване на файловите системи. В ядрото също така се планира добавяне на поддръжка за многостранични фолианти.

      Фолиантите наподобяват обединени страници с памет (compound pages), но се отличават с подобрена семантика и по-ясна организация на работата. За управление на системната памет наличната RAM се разделя на страници с памет, чийто размер зависи от архитектурата, но в системите x86 се изчислява в килобайти (обикновено 4096 байта). Съвременните системи разполагат с десетки гигабайти RAM, което усложнява управлението на паметта поради необходимостта от обработка на огромен брой страници с памет. За намаляване на броя на страниците в ядрото е реализирана концепцията за обединени страници (compound pages) със структури, обхващащи повече от една физическа страница с памет. Обаче, API за манипулация с обединените страници с памет оставяше много да се желае и водеше до допълнителни разходи.

    • В планировчика на задачите е добавен обработчик, който взема под внимание клъстеризацията на кеша в CPU. В някои процесори, като Kunpeng 920 (ARM) и Intel Jacobsville (x86), определен брой ядра на CPU, обикновено 4, могат да комбинират L3 или L2 кеш. Вземането под внимание на такива топологии може значително да повиши ефективността на разпределението на задачите по ядра на CPU в планировчика, тъй като преместването на задачи в рамките на един кластер CPU позволява увеличаване на пропускателната способност на достъпа до паметта и намаляване на конкуренцията в кеша.
    • Добавена е поддръжка за инструкции AMX (Advanced Matrix Extensions), реализирани в бъдещите сървърни процесори Intel Xeon Scalable, разработвани под кодовото име Sapphire Rapids. AMX предлага нови конфигурируеми регистри TMM "TILE" и инструкции за манипулация на данни в тези регистри, като TMUL (Tile matrix MULtiply) за умножение на матрици.
    • Реализирани са няколко нови възможности, базирани на добавената в предишното издание подсистема DAMON (Data Access MONitor), позволяваща проследяване на достъпа до данни в оперативната памет, свързано с избрания процес, работещ в потребителското пространство. Например, подсистемата предоставя възможност да се анализира до какви точно области на паметта е имал достъп процесът през цялото време на своята работа и кои области на паметта са останали неизползвани.
      • DAMON_RECLAIM за идентифициране и заместване на области на паметта, към които не е имало достъп. Механизмът може да се използва за проактивно меко извеждане на страници от паметта при наближаване до изчерпване на свободната памет.
      • DAMOS (Data Access Monitoring-based Operation Schemes) за прилагане на зададени операции madvise(), като освобождаване на допълнителна свободна памет, към области на паметта на процеса, за които се регистрира определена честота на достъп. Настройките на параметрите на DAMOS се извършват чрез debugfs.
      • Възможност за мониторинг на физическото адресно пространство на паметта (по-рано можеше да се проследява само виртуалните адреси).
    • Реализацията на алгоритма за компресия zstd е обновена до версия 1.4.10, което значително повиши производителността на различни подсистеми на ядрото, в които се прилага компресия (например, разархивирането на ядрото е ускорено с 35%, производителността на разархивиране на компресирани данни в Btrfs и SquashFS е увеличена с 15%, а в ZRAM — с 30%). Първоначално в ядрото е използвана отделна реализация на zstd, базирана на версия 1.3.1, пусната преди повече от три години и не включваща много важни оптимизации. Освен преминаването към актуалната версия, добавеният патч също опростява синхронизацията с upstream-ветката на zstd, позволявайки генерирането на код за включване в ядрото директно от основния репозиторий на zstd. В бъдеще кодът на zstd в ядрото ще бъде обновяван при излизане на нови версии на библиотеката zstd.
    • Внедрена значима част от подобрения в подсистемата eBPF. Добавена възможност за извикване на функции от ядрото в BPF-програмите. Реализирана е функция bpf_trace_vprintk(), за разлика от bpf_trace_printk(), която позволява да се извеждат повече от три аргумента накуп. Добавена е нова структура за съхранение на данни (BPF map) bloom filter, която позволява използването на името на вероятностната структура за определяне наличието на елемент в набор. Въведен е нов атрибут BTF_KIND_TAG, който може да се използва в BPF-програмите за свързване на тагове към параметрите на функциите, например за опростяване на откриването на грешки в потребителските програми. В libbpf е разрешено създаването на собствени секции .rodata.* / .data.*, реализирана е поддръжка на събитията за трасировка uprobe и kprobe, добавен е API за копиране на всички типове BTF от един обект в друг. Поддръжката на AF_XDP е извлечена от libbpf в отделна библиотека libxdp. За архитектурата MIPS е реализиран JIT-компилатор за виртуалната машина BPF.
    • За архитектура ARM64 е реализирана поддръжка на разширения ARMv8.6 за таймера, включително такива, които осигуряват само-синхронизация на представянето на системните регистри без използването на инструкции ISB.
    • За архитектура PA-RISC е реализирана възможност за прилагане на механизма KFENCE за откриване на грешки при работа с паметта, както и е добавена поддръжка на детектора на състояния на гонки KCSAN.
    • Предоставена е възможност за настройки на правата за достъп до tracefs на ниво отделни потребители и групи, например, вече може да се разреши достъп до средствата за трасировка само на участниците в определена група.
  • Виртуализация и безопасност
    • В подсистемите io_uring и device-mapper е реализирана поддръжка за генериране на събития за одит. В io_uring е предоставена възможност за управление на достъпа чрез модули LSM. Добавена е възможност за одит на системния повик openat2().
    • Кодът на ядрото е напълно освободен от непрекъснати изрази case в switch (без return или break след всеки блок case). При компилирането на ядрото вече може да се приложи режим „-Wimplicit-fallthrough“.
    • Включени са промени за затягане на проверките на границите при извършване на функцията memcpy().
    • В интерфейса на асинхронния вход/изход io_uring е реализирана възможност за прилагане на политиките за сигурност към операциите за вход/изход, определени от модулите SELinux и Smack.
    • В подсистемата IMA (Integrity Measurement Architecture), която позволява на външна услуга да верифицира състоянието на ядрените подсистеми, за да се увери в тяхната автентичност, е реализирана възможност за прилагане на правила на базата на идентификатора на групата (GID), към която принадлежи файлът или в която попада потребителят, заявяващ достъп до файла.
    • По подразбиране са деактивирани някои разширени механизми за защита на потоките seccomp() от атаки от клас Spectre, които са оценени като излишни и незначително повишаващи сигурността, но негативно влияещи на производителността. Преразгледана е употребата на защитата Retpoline.
    • Премахнато е реализирането на механизма cryptoloop, на мястото на който през 2004 година е въведен dm-crypt и при нужда поддържа същите алгоритми.
    • По подразбиране е забранен непривилегированият достъп до подсистемата eBPF. Изменението е направено, за да се предотврати използването на BPF-програми за обход на защитата от атаки чрез странични канали. При необходимост администраторът може да възстанови възможността за използване на eBPF от непривилегировани потребители.
    • В хипервизора ACRN, предназначен за изпълнение на задачи в реално време и използване в критични системи, е добавена поддръжка за създаване/изтриване на виртуални устройства и пробив на MMIO устройства.
    • В криптографския енджин е добавена поддръжка на определения KPP (Key-agreement Protocol Primitives), които опростяват логиката на разработката на драйвери за криптосистеми.
    • За хипервизора Hyper-V е реализирана поддръжка на режим на изолация на виртуални машини, което предполага криптиране на съдържанието на паметта.
    • В хипервизора KVM Добавена е поддръжка на архитектурата RISC-V. Реализирана е възможност за миграция в рамките на хост-обкръжение на виртуални машини, които работят с разширенията AMD SEV и SEV-ES. Добавен е API за live-миграция на гост системи, криптирани с помощта на AMD SEV (Secure Encrypted Virtualization).
    • За архитектурата PowerPC по подразбиране е включен режим STRICT_KERNEL_RWX, който блокира използването на страници памет, които са достъпни за запис и изпълнение едновременно.
    • На 32-битни x86 системи е прекратена поддръжката на горещо свързване на памет (Memory hotplug), която повече от година не е функционирала.
    • От ядрото е изключена библиотеката liblockdep, която сега ще бъде поддържана отделно от ядрото.
  • Мрежовата подсистема
    • За сокетите е реализирана нова опция SO_RESERVE_MEM, чрез която може да се резервира определен обем памет, който винаги ще остава достъпен за сокета и няма да бъде изтеглян. Използването на тази опция позволява увеличаване на производителността чрез намаляване на операциите за заделяне и възстановяване на паметта в мрежовия стек, особено при условия на недостиг на памет в системата.
    • Добавена е поддръжка на протокола за автоматично тунелиране на multicast трафик (Automatic Multicast Tunneling, RFC 7450), който позволява доставянето на multicast трафик от мрежи, поддържащи multicast, на получатели в мрежи без multicast. Протоколът работи чрез инкапсулация в UDP пакети.
    • Подобрена е инкапсulaцията на данни IOAM (In-situ Operations, Administration, and Maintenance) в транзитни пакети.
    • В ethtool netlink API е добавена възможността за управление на режимите на енергийна консумация на предавателите.
    • В подсистемата netfilter е реализирана възможност за класифициране на пакети на ниво egress, т.е. на етапа, когато драйверът получава пакета от мрежовия стек на ядрото. В nftables поддръжката на съответните филтри се появи в версия 1.0.1. В netfilter е добавена възможност за съпоставяне и промяна на вътрешните заглавия и данни за UDP и TCP (вътрешно заглавие / полезно натоварване), които следват транспортното заглавие.
    • Добавени са нови параметри sysctl arp_evict_nocarrier и ndisc_evict_nocarrier, при задаване на които кешът ARP и таблицата ndisc (neighbor discovery) ще бъдат изчиствани при загуба на свързаност (NOCARRIER).
    • В механизма за управление на мрежови опашки fq_codel (Сontrolled Delay) са добавени режимите Low Latency, Low Loss и Scalable Throughput (L4S).
  • Оборудване
    • В драйвера amdgpu е реализирана начална поддръжка на спецификация DP 2.0 (DisplayPort 2.0) и възможността за тунелиране на DisplayPort през USB4. За APU Cyan Skillfish (с GPU Navi 1x) е добавена поддръжка на дисплей контролери. Разширена е поддръжката на APU Yellow Carp (мобилни процесори Ryzen 6000 „Rembrandt“).
    • В драйвера i915 е стабилизирана поддръжката на Intel Alderlake S чипове и е реализирана поддръжка на технологията Intel PXP (Protected Xe Path), позволяваща организиране на работа на апаратно защитен графичен сеанс на системи с Intel Xe чипове.
    • В драйвера nouveau беше извършена работа по отстраняване на грешки и подобряване на стила на кодиране.
    • Добавена е поддръжка за x86-съвместими CPU Vortex (Vortex86MX). Linux на подобни процесори работеше и по-рано, но явната идентификация на посочените CPU беше необходима, за да се деактивира защитата срещу атаки Spectre/Meltdown, които не са приложими за посочените чипове.
    • Добавена е начална поддръжка за x86-платформи Surface Pro 8 и Surface Laptop Studio.
    • Добавен е драйвер за поддръжка на звукови чипове, използвани в APU AMD Yellow Carp, Van Gogh, добавена е и поддръжка на звукови системи и кодеци Cirrus CS35L41, Maxim MAX98520/MAX98360A, Mediatek MT8195, Nuvoton NAU8821, NVIDIA Tegra210, NXP i.MX8ULP, Qualcomm AudioReach, Realtek ALC5682I-VS, RT5682S, RT9120, Rockchip RV1126 и RK3568.
    • Добавен е драйвер ishtp_eclite за достъп до вградените контролери Intel PSE (Programmable Service Engine) чрез протокола ISHTP (Integrated Sensor Hub Transport Protocol), например, за получаване на данни за батерията, температурата и информация, свързана с UCSI (USB Type-C Connector System Software Interface).
    • Добавен е драйвер за игрални контролери Nintendo Switch, който поддържа устройства Switch Pro и Joy-Cons. Добавена е поддръжка за таблети Wacom Intuos BT (CTL-4100WL/CTL-6100WL) и клавиатура Apple 2021 Magic Keyboard. Подобренa е поддръжката на контролери Sony PlayStation DualSense. Добавена е поддръжка на странични бутони на мишката Xiaomi Mi.
    • Добавен е драйвер RT89 с поддръжка на безжични чипове Realtek 802.11ax, както и драйвери за Ethernet адаптери Asix AX88796C-SPI и превключватели Realtek RTL8365MB-VC.
    • За чиповете Apple M1 са добавени драйвери за PCI и PASemi i2c.
    • Добавена е поддръжка за ARM SoC, устройства и платки Raspberry Pi Compute Module 4, Fairphone 4, Snapdragon 690, LG G Watch R, Sony Xperia 10 III, Samsung Galaxy S4 Mini Value Edition, Xiaomi MSM8996 (Mi 5, Mi Note 2, Mi 5s, Mi Mix, Mi 5s Plus и Xiaomi Mi 5), Sony Yoshino (Sony Xperia XZ1 и Sony Xperia XZ Premium), F(x)tec Pro1 QX1000, Microchip LAN966, CalAmp LMU5000, Exegin Q5xR5, sama7g5, Samsung ExynosAutov9, Rockchip RK3566, RK3399 ROCK Pi 4A+, RK3399 ROCK Pi 4B+, Firefly ROC-RK3328-PC, Firefly ROC-RK3399-PC-PLUS, ASUS Chromebook Tablet CT100, Pine64 Quartz64-A, Netgear GS110EMX, Globalscale MOCHAbin 7040, NXP S32G2, Renesas R8A779M*, Xilinx Kria, Radxa Zero, JetHub D1/H1, Netronix E70K02.

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

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