Версия на ядрото на Linux 5.9

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

Новата версия включва 16074 корекции от разработчици от 2011 г.,
размер на корекцията - 62 MB (промените засегнаха 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 поддръжка на двигателя за предварително опаковане на страници с памет във фонов режим, за да увеличите броя на големите страници с памет, достъпни за ядрото. Според предварителните оценки фоновото опаковане, с цената на минимални разходи, може да намали закъсненията при разпределяне на големи страници с памет (huge-page) със 70-80 пъти в сравнение с предишния използван механизъм за опаковане, стартиран, когато възникне необходимост (при поискване ). За да зададете границите на външната фрагментация, която kcompactd ще предостави, е добавен sysctl vm.compaction_proactiveness.
    • Добавено от поддръжка за компресиране на изображения на ядрото с помощта на алгоритъм zstandard (zstd).
    • Поддръжката на процесорни инструкции е внедрена за x86 системи FSGSBASE, което ви позволява да четете и променяте съдържанието на FS/GS регистрите от потребителското пространство. В ядрото FSGSBASE се използва за ускоряване на операциите за превключване на контекста чрез елиминиране на ненужните операции за запис на MSR за GSBASE, а в потребителското пространство избягва ненужните системни извиквания за промяна на FS/GS.
    • Добавено параметърът “allow_writes” ви позволява да забраните промените в MSR регистрите на процесора от потребителското пространство и да ограничите достъпа до съдържанието на тези регистри за операции за четене, тъй като промяната на MSR може да доведе до проблеми. По подразбиране писането все още не е деактивирано и промените в MSR се отразяват в дневника, но в бъдеще се планира достъпът по подразбиране да се превключи на режим само за четене.
    • Към асинхронния I/O интерфейс io_uring Добавена е пълна поддръжка за асинхронни буферирани операции за четене, които не изискват нишки на ядрото. Поддръжката за запис се очаква в бъдеща версия.
    • В крайния срок на I/O Scheduler изпълнени планиране въз основа на капацитета, позволявайки вземайте правилни решения за асиметрични системи като ARM базирани системи DynamIQ и big.LITTLE, които комбинират мощни и по-малко ефективни енергийно ефективни CPU ядра в един чип. По-специално, новият режим ви позволява да избягвате несъответствия в графика, когато бавно ядро ​​на процесора няма необходимите ресурси, за да изпълни задача навреме.
    • Моделът на потребление на енергия в ядрото (рамка на енергийния модел) вече е описва не само поведението на потреблението на енергия от процесора, но обхваща и периферните устройства.
    • Системното извикване close_range() е внедрено, за да позволи на процес да затвори цял диапазон от отворени файлови дескриптори наведнъж.
    • От внедряването на текстовата конзола и fbcon драйвера кодът е премахнат, което предоставя възможност за програмно превъртане на текста назад (CONFIG_VGACON_SOFT_SCROLLBACK) с повече от размера на VGA видеопаметта за текстов режим.
    • Преработен алгоритъм за присвояване на приоритети на нишки в рамките на ядрото. Новата опция осигурява по-добра последователност във всички подсистеми на ядрото при присвояване на приоритети на задачи в реално време.
    • Добавен sysctl sched_uclamp_util_min_rt_default за контролиране на настройките за усилване на процесора за задачи в реално време (например, можете да промените поведението на задачите в реално време в движение, за да пестите енергия след превключване към захранване от батерия или на мобилни системи).
    • Направена е подготовка за внедряване на поддръжка за технологията Transparent Huge Pages в кеша на страниците.
    • Механизмът fanotify внедрява нови флагове FAN_REPORT_NAME и FAN_REPORT_DIR_FID за отчитане на родителско име и уникална FID информация, когато възникнат събития за създаване, изтриване или движение за елементи от директория и обекти, които не са от директория.
    • За cgroups изпълнени нов контролер на паметта на slab, който се отличава с преместването на отчитането на slab от нивото на страницата на паметта към нивото на обекта на ядрото, което прави възможно споделянето на страници на slab в различни cgroups, вместо да се разпределят отделни кешове на slab за всяка cgroup. Предложеният подход дава възможност да се повиши ефективността на използването на slab, да се намали размера на паметта, използвана за slab с 30-45%, значително да се намали общото потребление на памет от ядрото и да се намали фрагментацията на паметта.
    • В звуковата подсистема АЛСА и USB стек, в съответствие със наскоро приети препоръки относно използването на включваща терминология в ядрото на Linux; политически некоректните термини бяха изчистени. Кодът е изчистен от думите "slave", "master", "blacklist" и "whitelist".
  • Виртуализация и сигурност
    • Когато изграждате ядрото с помощта на компилатора Clang се появи способността да конфигурирате (CONFIG_INIT_STACK_ALL_ZERO) автоматична инициализация до нула на всички променливи, съхранени в стека (когато компилирате, укажете „-ftrivial-auto-var-init=zero“).
    • В подсистемата seccomp, когато използвате режим на контрол на процеса в потребителското пространство, добави възможност заместване на файлови дескриптори в наблюдавания процес, за да се емулират напълно системни извиквания, които водят до създаването на файлови дескриптори. Функционалността е търсена в изолирани контейнерни системи и внедрявания на пясъчна среда за Chrome.
    • За архитектурите xtensa и csky е добавена поддръжка за ограничаване на системните повиквания с помощта на подсистемата seccomp. За xtensa е въведена допълнително поддръжка за механизма за одит.
    • Добавено нов флаг за възможности CAP_CHECKPOINT_RESTORE, който ви позволява да предоставите достъп до възможности, свързани със замразяване и възстановяване на състоянието на процеси, без да прехвърляте допълнителни привилегии.
    • GCC 11 предоставя всички функции, от които се нуждаете
      инструмент за отстраняване на грешки KCSAN (Kernel Concurrency Sanitizer), предназначен за динамично откриване на условия на състезание в ядрото. По този начин KCSAN вече може да се използва с ядра, изградени в GCC.

    • За AMD Zen и по-нови модели CPU добави поддръжка на P2PDMA технология, която ви позволява да използвате DMA за директен трансфер на данни между паметта на две устройства, свързани към PCI шината.
    • Към dm-crypt е добавен режим, който ви позволява да намалите забавянето чрез извършване на криптографска обработка на данни, без да използвате работни опашки. Този режим също е необходим за правилна работа с зониран блокови устройства (устройства с области, които трябва да се записват последователно, актуализирайки цялата група блокове). Извършена е работа за увеличаване на пропускателната способност и намаляване на латентността в dm-crypt.
    • Премахнат код за поддръжка на 32-битови гости, работещи в режим на паравиртуализация, работещи с Xen хипервайзор. Потребителите на такива системи трябва да преминат към използване на 64-битови ядра в среди за гости или да използват пълен (HVM) или комбиниран (PVH) режим на виртуализация вместо паравиртуализация (PV), за да работят среди.
  • Дискова подсистема, I/O и файлови системи
    • Във файловата система Btrfs изпълнени опция за "спасително" монтиране, която обединява достъпа до всички други опции за възстановяване. Поддръжката за опциите "alloc_start" и "subvolrootid" е премахната, а опцията "inode_cache" е отхвърлена. Направени са оптимизации на производителността, особено забележимо ускоряване на изпълнението на операциите fsync(). Добавено от способността да се използват алтернативни типове контролни суми, различни от CRC32c.
    • Добавено от възможността за използване на вградено криптиране (Inline Encryption) във файлови системи ext4 и F2FS, за активиране на което е предоставена опцията за монтиране „inlinecrypt“. Режимът на вградено криптиране ви позволява да използвате механизмите за криптиране, вградени в контролера на устройството, който прозрачно криптира и декриптира входа/изхода.
    • В XFS осигурени inode reset (flush) в напълно асинхронен режим, който не блокира процесите при извършване на операция за почистване на паметта. Разрешен е дългогодишен проблем с квотата, който причиняваше неправилно проследяване на предупрежденията за меко ограничение и ограничение на inode. Унифицирано внедряване на поддръжка на DAX за ext4 и xfs.
    • В Ext4 изпълнени предварително зареждане на растерни изображения за разпределение на блокове. В комбинация с ограничаване на сканирането на неинициализирани групи, оптимизацията намали времето, необходимо за монтиране на много големи дялове.
    • Във F2FS добавено ioctl F2FS_IOC_SEC_TRIM_FILE, който ви позволява да използвате командите TRIM/discard за физическо нулиране на определени данни във файл, например за изтриване на ключове за достъп, без да оставяте остатъчни данни на устройството.
      Във F2FS също добавено нов режим за събиране на боклук GC_URGENT_LOW, който работи по-агресивно, като елиминира някои проверки за неактивно състояние, преди да стартира събирача на боклук.

    • В bcache bucket_size за екстенти е увеличен от 16 на 32 бита в подготовка за разрешаване на зонирани кешове на устройства.
    • Възможността за използване на вградено криптиране, базирано на вградено хардуерно криптиране, осигурено от UFS контролери, е добавена към SCSI подсистемата (Универсално флаш съхранение).
    • Добавен е нов параметър на командния ред на ядрото „debugfs“, който ви позволява да контролирате наличността на псевдо-FS със същото име.
    • Клиентът NFSv4.2 осигурява поддръжка за разширени файлови атрибути (xattr).
    • В dm-прах добавено интерфейс за показване наведнъж списък на всички идентифицирани лоши блокове на диска (“dmsetup съобщение 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 добавя поддръжка за итератори за преминаване, филтриране и модифициране на елементи от асоциативни масиви (карти) без копиране на данни в потребителското пространство. Итераторите могат да се използват за 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 (дисциплина на опашката), за да използва алгоритъма за управление на мрежовата опашка 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), които позволяват организиране на работата на няколко домейна за маршрутизиране в една система, е внедрен „стриктният“ режим. В този режим виртуална таблица може да бъде свързана само с таблица за маршрутизиране, която не се използва в други виртуални таблици.
    • Безжичният драйвер е ath11k добави поддържа 6GHz честота и спектрално сканиране.
  • Оборудование
    • Премахнат код за поддръжка на архитектурата UniCore, разработена в Микропроцесорния център на Пекинския университет и включена в ядрото на Linux през 2011 г. Тази архитектура не се поддържа от 2014 г. и няма поддръжка в GCC.
    • Реализирана е поддръжка за RISC-V архитектура kcov (debugfs интерфейс за анализиране на покритието на кода на ядрото), kmemleak (система за откриване на изтичане на памет), защита на стека, маркери за прескачане и операции без отметка (многозадачност, независимо от сигналите на таймера).
    • За архитектурата на PowerPC е внедрена поддръжка за опашки за заключване, което значително подобри производителността в ситуации на конфликт на заключване.
    • За архитектурите ARM и ARM64 механизмът за регулиране на честотата на процесора е активиран по подразбиране график (cpufreq governor), който директно използва информация от планировчика на задачи, за да вземе решение за промяна на честотата и може незабавно да получи достъп до драйверите на cpufreq за бърза промяна на честотата, незабавно коригирайки работните параметри на процесора към текущото натоварване.
    • Драйверът i915 DRM за графични карти на Intel включва поддръжка за чипове, базирани на микроархитектура Ракетно езеро и добавена първоначална поддръжка за дискретни карти Intel Xe DG1.
    • Драйверът Amdgpu добави първоначална поддръжка за AMD GPU Navi 21 (Navy Flounder) и Navi 22 (Сиена Цихлид). Добавена е поддръжка за двигатели за ускоряване на UVD/VCE видео кодиране и декодиране за GPU на Южните острови (Radeon HD 7000).
      Добавено е свойство за завъртане на дисплея на 90, 180 или 270 градуса.

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

    • В драйвер Nouveau добави поддръжка за използване на проверка на целостта кадър по кадър КРС (Проверки за циклично излишък) в двигателите на дисплея на NVIDIA GPU. Внедряването се основава на документация, предоставена от NVIDIA.
    • Добавени драйвери за LCD панели: Frida FRD350H54004, KOE TX26D202VM0BWA, CDTech S070PWS19HP-FC21, CDTech S070SWV29HG-DC44, Tianma TM070JVHG33 и Xingbangda XBD599.
    • Поддържа аудио подсистемата ALSA Intel Silent Stream (режим на непрекъснато захранване за външни HDMI устройства за елиминиране на забавянето при стартиране на възпроизвеждане) и ново устройство за управление на осветяването на бутоните за активиране и заглушаване на микрофона, както и добавена поддръжка за ново оборудване, включително контролер Longson 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 сензорни драйвери и подсистеми.

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

Добавяне на нов коментар