Издание на ядрото на 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() започна да се натрупва по-бавно и в някои конфигурации при определени обстоятелства можеха да се наблюдават забавяния по време на зареждане, докато пулът с ентропия не се запълни. Тъй като оптимизацията е наистина полезна, сред разработчиците възникна дискусия, в която се предлагаше да се реши проблемът чрез изключване по подразбиране на блокиращия режим на работа на повикването 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 повиквания, свързани с драйвера за флопи, а самият драйвер е обозначен като оставен без поддръжка
      («orphaned»), което означава прекратяване на тестовете му. Драйверът все още е запазен в ядрото, но правилното му функциониране не е гарантирано. Драйверът се счита за остарял, тъй като е трудно да се намери работещо оборудване за тестване — всички актуални външни дискове обикновено използват USB интерфейс.
    • Добавен cpufreq драйвер за платки Raspberry Pi, позволяващ динамично управление на промените в честотата на процесора;
    • Добавена е поддръжка за нови ARM SoC Mediatek mt8183 (4x Cortex-A73 + 4x Cortex-A53), TI J721E (2x Cortex-A72 + 3x Cortex-R5F + 3 DSP + 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.3Linux-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