Излезе ядрото на Linux 5.14

След два месеца работа, Линус Торвальдс представи версия на ядрото 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 мс.
    • В контролера на 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, вече могат да се конфигурират отделно за ядрото и потребителското пространство. Технологията позволява използването на специализирани инструкции 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.
    • Добавена е поддръжка на компютъра-моноблок 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

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