Ядро Linux 5.14

Ядро Linux 5.14

След като работи два месеца, Линус Торвалдс представи освобождаване на ядрото Linux 5.14. Сред най-забележителните промени: новите системни повици quotactl_fd() и memfd_secret(), премахване на драйвери ide и raw, нов контролер за приоритет на входа/изхода за cgroup, режим на планиране на задачи SCHED_CORE, инфраструктура за създаване на зареждачи на верифицирани BPF програми.

В новата версия са приети 15883 корекции от 2002 разработчици, размерът на патча е 69 МБ (промените засягат 12580 файла, добавени са 861501 реда код, премахнати са 321654 реда). Около 47% от всички представени в 5.14 промени са свързани с драйвери за устройства, приблизително 14% от промените имат отношение към обновление на код, специфичен за хардуерни архитектури, 13% са свързани с мрежовия стек, 3% с файловите системи и 3% с вътрешните подсистеми на ядрото.

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

  • дискова подсистема, вход/изход и файлови системи:
    • за cgroup реализиран нов контролер за приоритизиране на входа/изхода — rq-qos, който може да управлява приоритета на обработката на заявки към блокови устройства, генерирани от членовете на всяка cgroup. Поддръжката на новия контролер за приоритет е добавена в планирача на входа/изхода mq-deadline;
    • в файловата система ext4 е реализирана нова команда ioctl EXT4_IOC_CHECKPOINT, принудително записваща на диск всички чакащи транзакции от журнала и свързаните с тях буфери, както и презаписваща използваната от журнала област в хранилището. Промяната е подготвена в рамките на инициативата за предотвратяване на изтичане на информация от файловите системи;
    • в Btrfs са внесени оптимизации на производителността: чрез изключване на излишното журнализиране на разширените атрибути в процеса на изпълнение на fsync производителността на интензивни операции с разширени атрибути е увеличена до 17%. Освен това, при изпълнение на операции по отрязване, които не засягат екстентите, е спряно изпълнението на пълна синхронизация, което е съкратило времето за изпълнение на операцията с 12%. В sysfs е добавена настройка за ограничаване на пропускливостта на входа/изхода при проверка на ФС. Добавени са ioctl повиквания за отмяна на операции по изменение на размера и премахване на устройството;
    • в XFS преработена реализация на буферен кеш, който е преместен на разпределение на страници памет в пакетен режим. Повишена е ефективността на работата на кеша;
    • в F2FS е добавена опция за работа в режим само за четене и е реализиран режим за кеширане на компресирани блокове (compress_cache) за повишаване на производителността на произволно четене. Реализирана е поддръжка за компресиране на файлове, отразени в паметта чрез операцията mmap(). За селективно изключване на компресирането на файлове по маска е предложена нова опция за монтиране nocompress;
    • в драйвера exFAT е извършена работа по подобряване на съвместимостта с хранилища на някои цифрови камери;
    • добавена е системна функция quotactl_fd(), която позволява управление на квотите не чрез файл на специално устройство, а чрез указване на файлов дескриптор, свързан с файловата система, за която се прилага квотата;
    • от ядрото са премахнати стари драйвъри за блокови устройства с интерфейс IDE, на мястото на които вече отдавна е дошла подсистемата libata. Поддръжката на старите устройства е запазена в пълен обем, промените касаят само възможността за използване на старите драйвъри, при използването на които носителите са били именувани /dev/hd*, а не /dev/sd*;
    • от ядрото е премахнат драйверът „raw“, предоставящ небъфериран достъп до блокови устройства чрез интерфейса /dev/raw. Указаната функционалност отдавна се реализира в приложения с помощта на флага O_DIRECT;
  • памет и системни услуги:
    • в планировчика на задачи е реализиран нов режим на планиране SCHED_CORE, който позволява управление на това, кои процеси могат да се изпълняват съвместно на едно ядро на CPU. На всеки процес може да бъде назначен cookie-идентификатор, определящ област на доверие между процесите (например, принадлежност на един потребител или контейнер). При организация на изпълнението на кода, планировчикът може да осигури съвместно използване на едно ядро на CPU само за процеси, свързани с един собственик, което може да се използва за блокиране на някои атаки от клас Spectre, чрез предотвратяване на изпълнението в един поток SMT (Hyper Threading) на заслужаващи и незаслужаващи доверие задачи;
    • за механизма cgroup е реализирана поддръжка на операцията kill, позволяваща да завършите веднага всички процеси, свързани с групата (изпращане на SIGKILL), чрез записване на „1“ в виртуалния файл cgroup.kill;
    • разширени са възможностите, свързани с реагиране на открития на разцепени блокировки («split lock»), които възникват при достъп до неравномерно разположени данни в паметта, поради факта, че при изпълнение на атомарна инструкция данните пресичат две кеш линии на CPU. Подобни блокировки водят до значителен спад в производителността, поради което преди беше предоставена възможност за принудително спиране на приложението, което е предизвикало блокировката. В новата версия е добавен параметър на командния ред на ядрото «split_lock_detect=ratelimit:N», който определя общосистемен лимит на интензивността на операциите с блокировки за секунда, след чието надвишаване всеки процес, станал източник на разцепена блокировка, вместо да бъде прекратен, ще бъде принудително спиран на 20 мс;
    • в контролера на скоростта на cgroup CFS (CFS bandwidth controller), който определя колко време на процесора може да бъде предоставено на всяка cgroup, е реализирана възможност за задаване на лимити, ограничени с определен период от време, което позволява по-добро регулиране на натоварванията, чувствителни към закъснения. Например, задаването на стойност cpu.cfs_quota_us на 50000 и cpu.cfs_period_us на 100000 ще даде възможност на група процеси да използват 50ms CPU време на всеки 100ms;
    • е добавена първоначална инфраструктура за създаване на загрузчици на BPF-програми, която в бъдеще ще позволи да се разреши зареждането само на BPF-програми, подписани с надежден цифров ключ;
    • добавена е нова futex-операция FUTEX_LOCK_PI2, използваща монотонен таймер за изчисляване на таймаут, който взема предвид времето, прекарано от системата в спящ режим;
    • за архитектурата RISC-V е реализирана поддръжка за големи страници памет (Transparent Huge-Pages) и възможността за приложение на механизма KFENCE за откриване на грешки при работа с памет;
    • в системния повик madvise(), който предоставя средства за оптимизация на управлението на паметта на процеса, добавени флаговете MADV_POPULATE_READ и MADV_POPULATE_WRITE за генериране на «page fault» за всичките страници памет, отразени за операции на четене или запис, без да се извършва фактическо четене или запис (prefault). Използването на флаговете може да бъде полезно за намаляване на закъсненията в работата на програмата, благодарение на предварителното изпълнение на обработчика «page fault» за всички неразпределени страници, без да се чака действително искане за достъп до тях;
    • в системата на unit-тестове kunit е добавена поддръжка на стартиране на тестове в среда QEMU;
    • добавени нови трасировчици: «osnoise» за проследяване на забавяния в приложенията, причинени от обработка на прекъсвания, и «timerlat» за извеждане на детайлна информация за забавянията при пробуждане по сигнал от таймера;
  • виртуализация и сигурност:
    • е добавен системен повик memfd_secret(), позволяващ създаването на частна зона за памет в изолирано адресно пространство, видима само за процеса собственик, непредставяна на другите процеси и недостъпна директно за ядрото;
    • в системата за филтриране на системни повици seccomp, при изнасяне на обработчици за блокировка в потребителското пространство, е предоставена възможност за използване на една атомарна операция за създаване на файлов дескриптор за изолирана задача и неговото връщане при обработка на системния повик. Предложената операция решава проблема с прекъсването на обработчика в потребителското пространство при получаване на сигнал;
    • е добавен нов механизъм за управление на ограничението на ресурсите в пространството на идентификаторите на потребителите, който свързва отделни броячи rlimit с потребителя в «user namespace». Промяната решава проблема с прилагането на общи броячи на ресурсите при стартиране на процеси от един потребител в различни контейнери;
    • в хипервизора KVM за ARM64 системи е добавена възможност за използване на разширението MTE (MemTag, Memory Tagging Extension) в гостуващите системи, което позволява свързването на тагове към всяка операция по разпределение на памет и организиране на проверка на правилността на използването на указатели, за да се предотврати експлоатация на уязвимости, причинени от достъпа до вече освободени блокове памет, препълване на буфери, обращения преди инициализация и използване извън текущия контекст;
    • предоставените от платформата ARM64 средства за аутентикация на указатели (Pointer Authentication) вече могат да бъдат отделно настройвани за ядрото и потребителското пространство. Технологията позволява използването на специализирани инструкции ARM64 за проверка на адресите на връщане с цифрови подписи, съхранявани в неизползваемите горни битове на самия указател;
    • в User-mode Linux е добавена поддръжка на използването на драйвери за PCI устройства с виртуална шина PCI, реализирана от драйвера PCI-over-virtio;
    • за системи x86 е добавена поддръжка на паравиртуализирано устройство virtio-iommu, което позволява изпращане на IOMMU заявки, като ATTACH, DETACH, MAP и UNMAP, над транспорта virtio без емулация на таблици с памет;
    • за процесори Intel, започвайки от семейството Skylake до Coffee Lake, по подразбиране е деактивирано използването на разширения Intel TSX (Transactional Synchronization Extensions), които предоставят средства за повишаване на производителността на многопоточни приложения чрез динамично изключване на излишни операции за синхронизация. Разширенията са деактивирани поради възможността за извършване на атаки Zombieload, манипулиращи изтичането на информация през странични канали, което възниква по време на работа на механизма за асинхронно прекъсване на операции (TAA, TSX Asynchronous Abort);
  • мрежова подсистема:
    • процесът на интеграция в ядрото MPTCP (MultiPath TCP) е продължен, разширение на протокола TCP за организиране на TCP връзка с доставка на пакети едновременно по няколко маршрута през различни мрежови интерфейси, свързани с различни IP адреси. В новото издание е добавен механизъм за задаване на собствени политики за хеширане на трафика за IPv4 и IPv6 (multipath hash policy), който позволява от потребителското пространство да се определи кои полета в пакетите, включително инкапсулираните, ще се използват при изчисляване на хеш, определящ избора на маршрут за пакета;
    • във виртуалния транспорт virtio е добавена поддръжка на сокети SOCK_SEQPACKET (подредена и надеждна доставка на датаграми);
    • разширени са възможностите на механизма за сокети SO_REUSEPORT, който позволява на няколко слушащи сокета да се свържат към един порт за приемане на връзки с разпределение на входящите запитвания едновременно между всички свързани чрез SO_REUSEPORT сокети, което опростява създаването на многопоточни сървърни приложения. В новата версия добавени са добавени средства за предаване на контрола на друг сокет в случай на грешка при обработка на запитване от първоначално избрания сокет (решава проблема с загубата на отделни връзки при рестартиране на услугите);
  • оборудване:
    • в драйвера amdgpu е реализирана поддръжка на нови серии GPU AMD Radeon RX 6000, развивани под кодовите имена «Beige Goby» (Navi 24) и «Yellow Carp», както и подобрена поддръжка на GPU Aldebaran (gfx90a) и APU Van Gogh. Добавена е възможност за едновременна работа с няколко eDP панела. За APU Renoir е реализирана поддръжка за работа с криптирани буфери в видеопаметта (TMZ, Trusted Memory Zone). Добавена е поддръжка за горещо изваждане на графични карти (hot-unplug). За GPU Radeon RX 6000 (Navi 2x) и по-стари GPU AMD е включена по подразбиране поддръжка на механизма за управление на енергията ASPM (Active State Power Management), който преди е бил активиран само за GPU Navi 1x, Vega и Polaris;
    • за чиповете на AMD е добавена поддръжка на споделена виртуална памет (SVM, shared virtual memory) на базата на подсистемата HMM (Heterogeneous memory management), позволяваща използването на устройства със собствени блокове за управление на паметта (MMU, memory management unit), които могат да получават достъп до основната памет. Включително чрез HMM може да се организира съвместно адресно пространство между GPU и CPU, в което GPU може да получи достъп до основната памет на процеса;
    • добавена е начална поддръжка на технологията AMD Smart Shift, динамично променяща параметрите на енергопотребление на CPU и GPU на лаптопи с AMD чипсет и видеокарта за форсиране на производителността при игри, редактиране на видео и 3D рендеринг;
    • в драйвера i915 за Intel видеокарти е включена поддръжка за Intel Alderlake P чипове;
    • добавен е драйвер drm/hyperv за виртуален графичен адаптер Hyper-V;
    • е добавен графичният драйвер simpledrm, използващ за изход фреймбуфер EFI-GOP или VESA, предоставян от UEFI фърмуер или BIOS. Основната функция на драйвера е предоставянето на възможност за графичен изход в началните етапи на зареждане, преди да стане възможно използването на пълноценен DRM драйвер. Драйверът може да се използва и като временно решение за оборудване, за което все още липсват родни DRM драйвери;
    • е добавена поддръжка на компютъра-моноблок Raspberry Pi 400;
    • добавен е драйвер dell-wmi-privacy за поддръжка на предоставените в лаптопите на Dell хардуерни бутони за изключване на камерата и микрофона;
    • за лаптопи Lenovo е добавен WMI интерфейс за промяна на параметри на BIOS чрез sysfs /sys/class/firmware-attributes/;
    • разширена поддръжка на устройства с интерфейс USB4;
    • е добавена поддръжка на звукови карти и кодеци AmLogic SM1 TOACODEC, Intel AlderLake-M, NXP i.MX8, NXP TFA1, TDF9897, Rockchip RK817, Qualcomm Quinary MI2 и Texas Instruments TAS2505. Подобрената поддръжка на звука на лаптопи HP и ASUS. Добавени са пачове за намаляване на закъснението преди започване на възпроизвеждане на звука на устройства с USB интерфейс.

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

Източник: linux.org.ru

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