След талантливата разработка на Линус Торвалдс представи освобождаване на ядрото 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 ще даде възможност на група процеси да използват 50мс CPU време на всеки 100мс;
- е добавена начална инфраструктура за създаване на загрузчици на 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 CPU, от 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
