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

След талантливата разработка на Линус Торвалдс представи е публикувана Linux 5.3. Сред основните забележителни промени: поддръжка на GPU AMD Navi, процесори Zhaoxi и технология за управление на енергопотреблението Intel Speed Select, възможност за използване на инструкции umwait за изчакване без цикли,
повишаване на интерактивността в режим 'utilization clamping' за асиметрични CPU, системно повикване pidfd_open, възможност за използване на IPv4 адреси от подмрежата 0.0.0.0/8, възможност за хардуерна ускорение на nftables, поддръжка на HDR в подсистемата DRM, интеграция на хипервизора ACRN.

В аннонса Новото издание на Линус напомни на всички разработчици за основното правило на разработването на ядрото — запазване на неизменността на поведението за компонентите на пространството на потребителя. Промените в ядрото не трябва по никакъв начин да нарушават вече функциониращи приложения и да водят до регресии на потребителско ниво. При това, нарушаването на поведението може да бъде причинено не само от промени в ABI, премахване на остарял код или поява на грешки, но и непряко влияние на правилно работещи полезни подобрения. Като показателен пример беше отхвърлена полезна оптимизация в кода Ext4, която намалява броя на запитванията към носителя, като деактивира предварителното прочитане на таблицата inode при малки входно/изходни запитвания.

Оптимизацията доведе до това, че поради намалената дискова активност, ентропията за генератора на случайни числа getrandom() започна да се натрупва по-бавно и в някои конфигурации, при определени обстоятелства, можеха да се наблюдават забавяния по време на зареждане до запълване на пулa от ентропия. Тъй като оптимизацията наистина е полезна, между разработчиците възникна дискусия, в която се предложи решаване на проблема чрез деактивиране по подразбиране на блокиращия режим на повикването getrandom() с добавяне на опционален флаг за изчакване на ентропия, но такова изменение ще повлияе на качеството на случайните числа в началния етап на зареждане.

В новата версия са одобрени 15794 корекции от 1974 разработчици,
размерът на пача е 92 Мб (промените засягат 13986 файла, добавени са 258419 реда код,
изтрити 599137 реда). Около 39% от всички представени в 5.3
промени са свързани с драйвери на устройства, около 12% от промените имат
отношение към актуализация на кода, специфичен за хардуерни архитектури, 11%
е свързано с мрежовия стек, 3% — с файловите системи и 3% — с вътрешните
подсистеми на ядрото.

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

  • Памет и системни услуги
    • Продължават развитието на функционалността ‘pidfd’, която помага да се обработват ситуации с повторно използване на PID (pidfd е свързан с конкретен процес и не се променя, докато PID може да бъде свързан с друг процес, след като текущият процес, асоцииран с този PID, приключи). По-рано в ядрото вече беше добавен
      системния вик pidfd_send_signal() и флага CLONE_PIDFD в извикването clone(), който позволява получаване на pidfd за използване в idfd_send_signal(). При използване на извикването clone() с флага CLONE_PIDFD могат да възникнат проблеми със услугите за управление или системата за принудително приключване на процеси при недостиг на памет на платформата Android. В този случай за стартиране се използва извикването fork() или clone() без CLONE_PIDFD.

      В ядрото 5.3 е представен системния вик pidfd_open(), който позволява получаване на проверяем pidfd за произволен съществуващ процес, създаден не чрез извикване на clone() с флага CLONE_PIDFD. Също така е добавена поддръжка за polling на pidfd чрез poll() и epoll(), което позволява на мениджърите на процеси да следят приключването на произволни процеси, без да се притесняват за състояние на състезание при присвояване на PID на нов процес. Механизмът за уведомление за приключване на работа на процес, свързан с pidfd, е аналогичен на уведомяването за приключването на собствения му дъщерен процес;

    • В планировщика на задачи е добавена поддръжка за механизма за фиксиране на натоварването (Utilization clamping), който позволява да се спазват минимални или максимални диапазони на честотите, в зависимост от активните задачи на CPU. Представеният механизъм ускорява задачите, които пряко влияят на качеството на взаимодействие с потребителя, чрез стартиране на тези задачи най-малко в долната граница на „запитаната“ честота. Нископриоритетните задачи, които не влияят на работата на потребителя, се стартират с използване на горната граница на „разрешената“ честота. Лимитите се задават чрез атрибутите sched_uclamp_util_min и sched_uclamp_util_max в системния вик sched_setattr().
    • Добавена е поддръжка за технологията за управление на потреблението на енергия Intel Speed Select, налична на някои сървъри с процесори Intel Xeon. Посочената технология позволява задаване на настройки за производителност и пропускна способност на секции за различни ядра на CPU, което позволява да се приоритиетизира производителността за задачи, изпълнявани на определени ядра, жертвайки производителността на други ядра;
    • Процесите в пространството на потребителя е предоставена възможност за изчакване за кратък период от време без цикли, използвайки инструкциите umwait. Тази инструкция, заедно с инструкциите umonitor и tpause, ще бъде предложена в подготвяните за издаване чипове Intel «Tremont» и ще позволи реализирането на забавяния, ефективни по отношение на консумацията на енергия и ненарушаващи производителността на други потоци при използване на Hyper Threading;
    • За архитектурата RISC-V е добавена поддръжка за големи страници памет (huge pages);
    • В механизма за трасировка «kprobes» е добавена възможност за разименуване на указатели от ядрото в пространството на потребителя, което може да се използва, например, за оценка на съдържанието на структури, предавани в системни повици. Също така е добавена възможност за настройка на проверки на етапа на зареждане.
    • В конфигурационния файл е добавена опцията PREEMPT_RT за работа в реално време. Самият код за поддръжка на режим реално време все още не е добавен в ядрото, но появата на опцията е добър знак, че многогодишната епопея около интеграция поправките Realtime-Preempt наближава своя финал;
    • Добавен е системен повик clone3() с реализация на по-разширена версия на интерфейса clone(), допускаща указание на по-голямо количество флагове;
    • Добавен е обработчик bpf_send_signal(), позволяващ на BPF-програмите да изпращат сигнали на произволни процеси;
    • За събития perf в средата на виртуализация KVM е добавен нов механизъм за филтриране на събития, позволяващ на администратора да определи типовете събития, допустими или недопустими за мониторинг от страна на гостуващата система;
    • В механизма за верификация на eBPF-приложенията е добавена възможност за обработка на програми с цикли, ако изпълнението на цикъла е ограничено и не може да доведе до превишаване на лимита за максимален брой инструкции;
  • Дискова подсистема, вход/изход и файлови системи
    • За файловата система XFS е реализирана възможността за многопоточен обход на inode (например, при проверка на квоти). Добавени са нови ioctl BULKSTAT и INUMBERS, предоставящи достъп до възможностите, появили се в петото издание на формата на файловата система, като времето на създаване на inode и възможността за задаване на параметри BULKSTAT и INUMBERS за всяка група AG (Allocation Groups);
    • В Ext4 добавена е поддръжка на празнини в директориите (непривързани блокове).
      Осигурена е обработка на флага „i“ (immutable) за отворени файлове (забрана за запис в ситуация, когато флагът е зададен в момента, когато файлът вече е бил отворен);
    • В Btrfs е осигурено определяне на бърза реализация crc32c на всички архитектури;
    • В CIFS от кода за поддръжка на smbdirect е премахнато обозначението за експериментално развитие. В SMB3 е добавена възможност за използване на криптоалгоритми в режим GCM. Добавена е нова опция за монтиране за извличане на параметри от режимите в записа ACE (Access Control Entry). Оптимизирана е производителността на извикването open();
    • В F2FS е добавена опция за ограничаване на сборника за отпадъци при работа в режим checkpoint=disable. Добавен е ioctl за изтриване на диапазони от блокове от F2FS, което позволява корекция на размера на дяла на лету. Добавена е възможност за разполагане в F2FS на файл за разменна памет с осигуряване на директен вход/изход. За всички потребители е добавена поддръжка за закрепване на файл и разпределяне на блокове за подобни файлове;
    • В интерфейса за асинхронно вход/изход io_uring е добавена поддръжка за асинхронни операции sendmsg() и recvmsg();
    • В файловата система UBIFS е добавена поддръжка за компресия с помощта на алгоритъма zstd и възможност за верификация на подписани образи на файловата система;
    • В файловата система Ceph е добавена поддръжка за етикети за сигурност SELinux за файлове;
    • За NFSv4 е реализирана нова опция за монтиране „nconnect=“, определяща броя на установените с сървъра връзки. Трафикът между тези връзки ще се разпределя с помощта на натоварване. Освен това, сървърът на NFSv4 сега създава директория /proc/fs/nfsd/clients с информация за текущите клиенти, включително данни за отворените от тях файлове;
  • Виртуализация и безопасност
    • В състава на ядрото е включен хипервизор за вградени устройства. ACRN, написан с оглед към готовността за изпълнение на реалновременни задачи и пригодността за използване в критично важни системи. ACRN осигурява минимални разходи, гарантира ниски закъснения (low latency) и адекватна реакция при взаимодействие с хардуера. Поддържа виртуализация на ресурси CPU, входно/изходни системи, мрежови подсистеми, графични и аудио операции. ACRN може да се използва за стартиране на няколко изолирани виртуални машини в електронни контроли, табла с儀仪 и автомобилни информационни системи, потребителски IoT устройства и друга вградена техника;
    • В User-mode Linux добавен режим 'пътуване във времето', позволяващ забавяне или ускоряване на времето в виртуалната среда UML, за улесняване на отстраняването на грешки в код, свързан с времето. Освен това е добавен параметър
      time-travel-start, позволяващ стартиране на системните часовници от указан момент в epoch формат;
    • Добавени са нови опции за команден ред на ядрото 'init_on_alloc' и 'init_on_free', при указване на които се активира нулирането на заделяни и освобождавани области от паметта (попълване с нули при malloc и free), което позволява повишаване на безопасността за сметка на допълнителните разходи за инициализация;
    • Добавен е нов драйвер virtio-iommu с реализация на паравиртуализирано устройство, позволяващо изпращане на IOMMU заявки, като ATTACH, DETACH, MAP и UNMAP, върху транспорта virtio без еймуляция на таблици с памет;
    • Добавен е нов драйвер virtio-pmem, представляващ достъп до устройства за съхранение, отразени в физическото адресно пространство, като NVDIMM;
    • Реализирана е възможността за прикрепяне на криптографски ключове към потребителското или мрежовото пространство на имената (ключовете стават недостъпни извън избраното пространство), както и защита на ключовете с помощта на ACL;
    • В криптоподсистемата е добавена поддръжка на много бърз алгоритъм некриптографично хеширане xxhash, чиято скорост зависи от производителността на паметта;
  • Мрежовата подсистема
    • Осигурена е обработка на адреси IPv4 в диапазона 0.0.0.0/8, който по-рано не беше достъпен за използване. Въвеждането на тази подсетка ще позволи разпределя още 16 млн. адреса IPv4;
    • В Netfilter за nftables е добавена поддръжка на механизми за хардуерно ускорение на филтрирането на пакети чрез добавяне в драйверите Flow Block API. За мрежовите адаптери могат да се изнесат цели таблици с правила с всички вериги. Активирането става чрез свързване на флага NFT_TABLE_F_HW с таблицата. Поддържат се прости метаданни за протоколи от 3-ти и 4-ти ниво, действията приеми/отхвърли, съпоставяния по IP и мрежови портове на изпращача/получателя и типа протокол;
    • Добавена е вградена поддръжка за проследяване на връзки за мрежови мости, без необходимост от използване на емулиращ слой br_netfilter;
    • В nf_tables е добавена поддръжка на модула SYNPROXY, повтарящ анализа на аналогичната функционалност от iptables, а също така е реализирана възможност за проверка в правилата по отделни опции в заглавката на IPv4;
    • Добавена е възможността за прикрепяне на BPF програми към системните повиквания setsockopt() и getsockopt(), което, например, позволява прикрепяне на собствени обработчици за достъп към тези повиквания. Освен това е добавена нова точка за повикване (hook), чрез която е възможно организиране на повикване на BPF програма веднъж за всеки интервал RTT (round-trip-time, време за обмяна);
    • За IPv4 и IPv6 добавен нов механизъм за съхранение на данни за маршрутизиране nexthop, целящ увеличаване на мащабируемостта на таблиците за маршрутизация. Проведените тестове показаха, че с новата система набор от 743 хиляди маршрута е бил зареден в ядрото само за 4,3 секунди;
    • За Bluetooth реализирана функционалност, необходима за поддръжка на LE ping;
  • Оборудване
    • Добавена е поддръжка на x86-съвместими процесори на компанията Zhaoxin, разработвани в резултат на съвместен проект на VIA Technologies и общината на Шанхай. Семейството на CPU ZX е построено на базата на архитектурата x86-64 Isaiah, продължаваща развитието на технологиите VIA Centaur;
    • В подсистемата DRM (Direct Rendering Manager), а също така в графичните драйвери amdgpu и i915 е добавена поддръжка за разшифроване, обработка и изпращане чрез HDMI порта на метаданни HDR (разширен динамичен обхват), позволяващи използването на HDR панели и екрани, способни да показват допълнителни диапазони яркост;
    • В драйвера amdgpu е добавена начална поддръжка за GPU AMD NAVI (RX5700), която включва основния драйвер, код за взаимодействие с екрани (DCN2), поддръжка на GFX и изчисления (GFX10),
      SDMA 5 (System DMA0), средства за управление на захранването и мултимедийни кодировчици/декодери (VCN2). В amdgpu също е подобрена поддръжката на карти на базата на GPU Vega12 и Vega20, за които са добавени допълнителни възможности за управление на паметта и енергопотреблението;
    • В драйвера amdkfd (за дискретни GPU като Fiji, Tonga, Polaris) е добавена поддръжка за карти на базата на GPU VegaM;
    • В DRM драйвера за видеокартите Intel за чипове Icelake е реализиран нов многосегментен режим на гамма-корекция. Добавена е възможността за изход през DisplayPort в формат YCbCr4:2:0. Добавени са нови фърмуери GuC за SKL, BXT, KBL, GLK и ICL. Реализирана е възможността за изключване на захранването на екрана в асинхронен режим. Добавена е поддръжка за запазване и възстановяване на контекста на рендеринг за чипове Ironlake (gen5) и gen4 (Broadwater — Cantiga), което позволява от пространството на потребителя да се възстановява състоянието на GPU при преминаване от изпълнение на едни пакетни операции към други;
    • В драйвера Nouveau е осигурено разпознаване на чипсета NVIDIA Turing TU116;
    • Разширени са възможностите на DRM/KMS драйвера за ускорители на екранни операции ARM Komeda (Mali D71), добавена е поддръжка на мащабиране, разделяне/сливане на слоеве, ротация, отложено записване, AFBC, SMMU и формати за кодиране на цвета Y0L2, P010, YUV420_8/10BIT;
    • В драйвера MSM е добавена поддръжка за серията A540 GPU Adreno, използвана в процесорите Qualcomm, както и поддръжка на DSI контролера MSM8998 за Snapdragon 835;
    • Добавени са драйвери за LCD панели Samsung S6E63M0, Armadeus ST0700, EDT ETM0430G0DH6, OSD101T2045-53TS,
      Evervision VGG804821, FriendlyELEC HD702E, KOE tx14d24vm1bpa, TFC S9700RTWV43TR-01B, EDT ET035012DM6 и VXT VL050-8048NT-C01;
    • Добавен е драйвер за активиране на средства за ускорение на декодиране
      видео, достъпно в SoC Amlogic Meson;
    • В драйвера v3d (за GPU Broadcom Video Core V, използван в Raspberry Pi) е добавена подкрепа диспетчеризация на изчислителни шейдъри;
    • Добавен е драйвер за SPI клавиатури и тракпади, използвани в съвременните модел Apple MacBook и MacBookPro;
    • Добавена е допълнителна защита на ioctl повиквания, свързани с драйвера floppy, а самият драйвер е маркиран като оставен без поддръжка
      («orphaned»), което подразбира прекратяване на неговото тестване. Драйверът засега остава в ядрото, но коректната му работа не е гарантирана. Драйверът се счита за остарял, тъй като е трудно да се намери работещо оборудване за тестването му — всичките актуални външни носители обикновено използват интерфейс USB.
    • Добавен е cpufreq драйвер за платки Raspberry Pi, позволяваща динамично управление на промените в честотата на процесора;
    • Добавена е поддръжка за новите ARM SoC Mediatek mt8183 (4x Cortex-A73 + 4x Cortex-A53), TI J721E (2x Cortex-A72 + 3x Cortex-R5F + 3 DSPs + MMA) и Amlogic G12B (4x Cortex-A73 + 2x Cortex-A53), както и платки:
      • Purism Librem5,
      • Aspeed BMC,
      • Microsoft Olympus BMC,
      • Kontron SMARC,
      • Novtech Meerkat96 (i.MX7),
      • ST Micro Avenger96,
      • Google Cheza (Qualcomm SDM845),
      • Qualcomm Dragonboard 845c (Qualcomm SDM845),
      • Hugsun X99 TV Box (Rockchip RK3399),
      • Khadas Edge/Edge-V/Captain (Rockchip RK3399),
      • HiHope RZ/G2M,
      • NXP LS1021A-TSN.

В същото време Латиноамериканският Фонд за свободен софтуер сформира
вариант напълно свободно ядро 5.3 — Linux-libre 5.3-gnu, без елементи на фърмуер и драйвери, съдържащи несвободни компоненти или участъци от код, чиято употреба е ограничена от производителя. В новото издание е деактивирано зареждането на блобове в драйверите qcom, hdcp drm, allegro-dvt и meson-vdec.
Обновен е кодът за очистка на блобове в драйверите и подсистемите amdgpu, i915, netx, r8169, brcmfmac, rtl8188eu, adreno, si2157, pvrusb2, touchscreen_dmi, звуковия драйвер за skylake, както и в документацията към микрокода.

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

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