Издание на ядро Linux 5.1

След талантливата разработка на Линус Торвалдс представи е публикувана Linux 5.1. Сред основните забележителни промени: нов интерфейс за асинхронен вход/изход io_uring, възможност за използване на NVDIMM като RAM, поддръжка на споделена виртуална памет в Nouveau, поддръжка на мащабируем мониторинг на много големи файлови системи чрез fanotify, възможност за конфигуриране на нива на компресия Zstd в Btrfs, нов обработчик cpuidle TEO, реализация на системни извиквания за разрешаване на проблема от 2038 година, възможност за зареждане от устройства device-mapper без initramfs, LSM модул SafeSetID, поддръжка на комбинирани live пачове.

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

  • Дискова подсистема, вход/изход и файлови системи
    • Реализиран е нов интерфейс за асинхронен вход/изход — io_uring, който се характеризира с поддръжка на polling на вход/изход и възможност за работа както с буферизация, така и без буферизация. Напомняме, че предлаганият по-рано механизъм за асинхронен вход/изход «aio» не поддържаше буферизирана вход/изход, можеше да работи само в режим O_DIRECT (без буферизация и в обход на кеша), имаше проблеми с блокировки поради чакане за достъпност на метаданни и демонстрираше големи разходи поради копиране на данни в паметта.

      В рамките на API
      io_uring разработчиците се опитаха да отстранят недостатъците на стария интерфейс aio. По производителност io_uring е много близък до SPDK и съществено изпреварва libaio при работа с включен polling. За използване на io_uring в крайни приложения, работещи в пространство на потребителя, е подготвена библиотека liburing, предлагаща високоуровнева обвивка над интерфейса на ядрото;

    • В механизма за проследяване на събития в файловата система fanotify() е добавена поддръжка на проследяване на ситуации на промяна на суперблока и структурата dirent (събития от създаване, изтриване и преместване на директории). Представените възможности помагат за разрешаване на проблемите с мащабируемост, произтичащи при създаването на рекурсивни проследявания на промени в много големи файлови системи чрез механизма inotify (промени в dirent преди можеше да се проследват само чрез inotify, но
      ефективността при условия на рекурсивно проследяване на големи вложени директории оставяше много да се желае). Сега подобно наблюдение може да бъде извършвано ефективно чрез fanotify;
    • В файловата система Btrfs е добавена възможност за настройка на нивото на компресия за алгоритъма zstd, който може да се счита за оптимален компромис между бързия, но неефективен lz4 и бавния, но добре компресиращ xz. Подобно на начина, по който по-рано можеше да се задава нивото на компресия при прилагане на zlib за zstd, е добавена поддръжка на опция за монтиране «-o compress=zstd:level». При тестване минималният първи уровень осигури компресия на данните от 2.658 пъти при скорост на компресия 438.47 MB/s, скорост на разопаковане 910.51 MB/s и потребление на памет от 780 MB, а максималният 15-ти уровень — 3.126 пъти, но при скорост на компресия 37.30 MB/s, разопаковане 878.84 MB/s и потребление на памет от 2547 MB;
    • Добавена е възможност за стартиране от файлова система, разположена на устройство device-mapper, без прилагане на initramfs. Започвайки от текущата версия на ядрото, устройството device-mapper може да се използва директно по време на зареждане, например, като дял с кореновата ФС. Настройката на дяла се извършва с помощта на зареждащия параметър «dm-mod.create». Разрешените модули за зареждане на device-mapper са: «crypt», «delay», «linear», «snapshot-origin» и «verity»;
    • В ориентираната към Flash-накопители файлова система F2FS е добавен флаг F2FS_NOCOW_FL, позволяващ изключване на режима copy-on-write за зададен файл;
    • От ядрото е премахната файлова система Exofs, представляваща вариант на ext2, адаптиран за работа с обектно-базирани устройства за съхранение OSD (Object-based Storage Device). Премахната е също поддръжката на SCSI протокол за подобни устройства за съхранение на обекти;
  • Виртуализация и безопасност
    • В prctl() е добавена опция PR_SPEC_DISABLE_NOEXEC за управление на спекулативното изпълнение на инструкции за избрания процес. Новата опция позволява селективно деактивиране на спекулативното изпълнение за процеси, които потенциално могат да бъдат атакувани чрез Spectre атака. Блокировката действа до първото извикване на exec();
    • Реализиран е LSM-модул SafeSetID, позволяващ на системните услуги безопасно да управляват потребителите без повишаване на привилегиите (CAP_SETUID) и без получаване на правомощията на потребителя root. Назначаването на привилегии се извършва чрез определяне в securityfs правила на базата на бял списък на допустимите връзки (във форма «UID1:UID2»);
    • Добавени са ниско ниво промени, необходими за стека на организацията на зареждане на модулите за сигурност (LSM). Представен е параметърът за зареждане на ядрото "lsm", който позволява управление на това, кои модули се зареждат и в какъв ред;
    • В подсистемата за одит е добавена поддръжка на файлови пространства имена;
    • Разширени възможности на GCC плъгина structleak, който блокира потенциални изтичания на съдържание от паметта. Осигурена е инициализация на всякакви променливи, които се използват в кода чрез референции в стека;
  • Мрежовата подсистема
    • За сокетите реализирана нова опция "SO_BINDTOIFINDEX", подобна на
      "SO_BINDTODEVICE", но приемаща индексния номер на мрежовия интерфейс вместо името на интерфейса;
    • В стека mac80211 е добавена възможност за назначаване на едно устройство с няколко BSSID (MAC адреса). В рамките на проекта за оптимизиране на производителността на WiFi в стека mac80211 е добавен контрол на разпределението на въздушното време и възможността за разпределение на въздушното време между няколко станции (при работа в режим на точка за достъп, предоставяйки по-малко време за предаване на бавни безжични станции вместо равно разпределение на времето между всички станции);
    • Добавен е механизъм "devlink health", който предоставя известия при възникване на проблеми с мрежовия интерфейс;
  • Памет и системни услуги
    • Реализирана безопасна доставка на сигнали, която взема предвид възможността за повторно използване на PID. Например, при извършване на повикване kill преди е могла да възникне ситуация, при която веднага след изпращане на сигнала, целевият PID е могъл да бъде освободен поради приключване на процеса и зает от друг процес, и в крайна сметка сигналът е бил предаден на друг процес. За избягване на подобни ситуации е добавен нов системен повик pidfd_send_signal, който използва файлови дескриптори от /proc/pid за осигуряване на стабилно свързване с процеса. Дори ако PID бъде повторно включен по време на обработката на системния повик, файловият дескриптор няма да се промени и може безопасно да се използва за изпращане на сигнал на процеса;
    • Добавена е възможност за използване на устройства с перманентна памет (persistent-memory, например NVDIMM) като RAM. Досега подобни устройства се поддържаха в ядрото като устройства за съхранение, но сега те могат да се използват и като допълнителна оперативна памет. Тази възможност е реализирана в отговор на желанията на потребителите, готови да се справят с производителността и желаещи да използват стандартния API за управление на паметта в ядрото на Linux, вместо наличните системи за разпределение на паметта в потребителското пространство, работещи върху mmap за dax-файла;
    • Добавен е нов обработчик на бездействие на CPU (cpuidle, който решава кога може да се премине в дълбоки режими на икономия на енергия, колкото по-дълбок е режимът — толкова по-голяма е икономията, но и повече време е необходимо за излизане от режима) — TEO (Таймери, ориентирани към събития). Досега бяха предлагани два обработчика cpuidle — „menu“ и „ladder“, които се отличаваха с хевристиката си. В обработчика „menu“ има известни проблеми с вземането на хевристични решения, за решаването на които беше решено да се подготви нов обработчик. TEO се позиционира като алтернатива на обработчика „menu“, която позволява постигането на по-висока производителност при същото ниво на енергопотребление.
      Новият обработчик може да се активира чрез параметъра на зареждане „cpuidle.governor=teo“;
    • В рамките на работата по отстраняване на проблема от 2038 година, предизвикана от преливане на 32-битовия тип time_t, влезли в състава системни повиквания, предлагайки за 32-битови архитектури 64-битови таймери. В резултат на това 64-битовата структура time_t сега може да се прилага на всички архитектури. Аналогични промени също са реализирани в мрежовата подсистема за опциите timestamp на мрежовите сокети;
    • Постепенната система за наложение на патчи (live patching) на ядрото е добавена възможност „Atomic Replace“ за атомарно прилагане на серия промени към една функция. Посочената възможност позволява разпространението на обобщаващи пачове, обхващащи веднага няколко промени, вместо достатъчно сложния за поддържане процес на поетапно прилагане на live-пачове в строго определен ред. Ако преди всяка следваща промяна трябваше да се основава на състоянието на функцията след последната промяна, сега е възможно разпространението на веднага няколко промени, свързани с едно първоначално състояние (т.е. поддържащите могат да поддържат един обобщаващ пач относно базовото ядро вместо верига от взаимозависими пачове);
    • Обявена остаряла поддръжка на форматите за изпълними файлове a.out и
      премахнат код за генериране на core-файлове в формат a.out, който е в забрава. Форматът a.out отдавна не се използва в системи с Linux, а генерирането на a.out файлове отдавна не се поддържа от съвременни инструментални средства в конфигурации за Linux по подразбиране. Освен това, загрузчикът за a.out файлове може да бъде изцяло реализиран в пространството на потребителя;
    • В механизма за верификация на BPF-програми е добавена възможност за определяне и премахване на неизползван код. В състава на ядрото също са включени пачове с поддръжка на spinlock за подсистемата BPF, предоставящи допълнителни възможности за управление на паралелното изпълнение на BPF-програми;
  • Оборудване
    • В драйвера Nouveau е добавена поддръжка на хетерогенно управление на паметта, осигуряващо възможност за достъп на CPU и GPU до общи синхронизирани области на паметта. Системата за споделена виртуална памет (SVM, shared virtual memory) е реализирана на базата на подсистемата HMM (Heterogeneous memory management), позволяваща използването на устройства със собствени блокове за управление на паметта (MMU, memory management unit), които могат да получат достъп до основната памет. Включително с HMM може да се организира съвместно адресно пространство между GPU и CPU, в което GPU може да получи достъп до основната памет на процеса. Поддръжката на SVM в момента е включена само за GPU от семейството Pascal, въпреки че поддръжката е осигурена и за GPU Volta и Turing. Освен това, в Nouveau добавен нов ioctl за управление на миграцията на области от паметта на процесите в паметта на GPU;
    • В DRM-драйвера на Intel за GPU Skylake и по-нови (gen9+) е включен по подразбиране режим fastboot, изключващ излишни смени на режимите по време на зареждане. Добавени са нови идентификатори на устройства, базирани на микроархитектури Coffelake и Ice Lake. За чиповете Coffelake е добавена поддръжка на GVT (виртуализация на GPU). За виртуалните GPU реализирана поддръжка на VFIO EDID. За LCD панели MIPI/DSI е добавена поддръжка на елементи ACPI/PMIC. Реализирани нови TV режими 1080p30/50/60 TV;
    • В драйвера amdgpu е добавена поддръжка на GPU Vega10/20 BACO. Реализирани са средства за управление на захранването на Vega 10/20 и таблици за управление на вентилатора на Vega 10. Добавени са нови PCI идентификатори на устройства за GPU Picasso. Добавен е интерфейс за управление на планираните зависимости за избягване на взаимни блокировки;
    • Добавен е DRM/KMS драйвер за ускорители на екранни операции ARM Komeda (Mali D71);
    • Добавена е поддръжка на екранни панели Toppoly TPG110, Sitronix ST7701, PDA 91-00156-A0, LeMaker BL035-RGB-002 3.5 и Kingdisplay kd097d04;
    • Добавена е поддръжка на звукови кодеци Rockchip RK3328, Cirrus Logic CS4341 и CS35L36, MediaTek MT6358, Qualcomm WCD9335 и Ingenic JZ4725B, както и звукова платформа Mediatek MT8183;
    • Добавена е поддръжка на NAND контролери Flash STMicroelectronics FMC2, Amlogic Meson;
    • Добавена е поддръжка на ускорители за системи на машинно обучение Habana AI;
    • Добавена е поддръжка на гигабитни Ethernet контролери NXP ENETC и безжични интерфейси MediaTek MT7603E (PCIe) и MT76x8.

В същото време Латиноамериканският Фонд за свободен софтуер сформира
вариант пълно свободно ядро 5.1 — Linux-libre 5.1-gnu, почистено от елементи на фърмуер и драйвъри, съдържащи несвободни компоненти или участъци от код, чиято област на приложение е ограничена от производителя. В новото издание е деактивирано зареждането на блобове в драйверите mt7603 и goya. Актуализиран е кодът за почистване на блобове в драйверите и подсистемите wilc1000, iwlwifi, soc-acpi-intel, brcmfmac, mwifiex, btmrvl, btmtk и touchscreen_dmi. Прекратено е почистването на блобове в зареждача на фърмуера lantiq xrx200 поради неговото премахване от ядрото.

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

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