След като преминаха два месеца на разработка, Линус Торвалдс представи версията на ядрото Linux 5.14. Някои от най-забележимите промени включват: новите системни повици quotactl_fd() и memfd_secret(), премахване на драйверите ide и raw, нов контролер за приоритизиране на вход/изход за cgroup, режим на планиране на задачи SCHED_CORE и инфраструктура за създаване на буутлодери за верифицирани BPF програми.
В новата версия са внесени 15883 корекции от 2002 разработчици, размерът на пача е 69 MB (промените засягат 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.
- От ядрото е премахнат драйверът "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 мс.
- В контролера на пропускната способност 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, започвайки от семейството 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.
- Добавена е поддръжка на компютъра-моно блок 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
