Версия на ядрото на Linux 5.14

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

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

Основни иновации:

  • Дискова подсистема, I/O и файлови системи
    • Нов I/O контролер за приоритизиране е внедрен за cgroups, rq-qos, който може да контролира приоритета на обработка на заявки за блокиране на устройства, генерирани от членове на всяка cgroup. Добавена е нова поддръжка на приоритетен контролер към mq-deadline I/O Scheduler.
    • Файловата система ext4 внедрява нова команда ioctl, EXT4_IOC_CHECKPOINT, която принуждава всички чакащи транзакции от дневника и свързаните с тях буфери да бъдат изчистени на диска и също така презаписва областта, използвана от дневника в хранилището. Промяната е подготвена като част от инициатива за предотвратяване на изтичане на информация от файловите системи.
    • Бяха направени оптимизации на производителността на Btrfs: чрез елиминиране на ненужното регистриране на разширени атрибути по време на изпълнение на fsync, производителността на интензивни операции с разширени атрибути се увеличи с до 17%. Освен това, когато се извършват операции за изрязване, които не засягат екстентите, пълната синхронизация е деактивирана, което намалява времето за операция с 12%. Добавена е настройка към sysfs за ограничаване на I/O честотната лента при проверка на FS. Добавени ioctl извиквания за отмяна на преоразмеряване и изтриване на операции на устройството.
    • В XFS внедряването на буферния кеш е преработено, което е превключено към разпределяне на страници с памет в пакетен режим. Подобрена ефективност на кеша.
    • F2FS добавя опция за работа в режим само за четене и прилага режим на компресиран блоков кеш (compress_cache), за да подобри производителността на произволно четене. Реализирана е поддръжка за компресиране на файлове, картографирани в паметта с помощта на операцията mmap(). За селективно деактивиране на компресирането на файлове въз основа на маска е предложена нова опция за монтиране nocompress.
    • Извършена е работа в драйвера exFAT за подобряване на съвместимостта с някои хранилища на цифрови фотоапарати.
    • Добавено е системното извикване quotactl_fd(), което ви позволява да управлявате квотите не чрез специален файл на устройството, а чрез указване на файлов дескриптор, свързан с файловата система, за която се прилага квотата.
    • Старите драйвери за блокови устройства с IDE интерфейс са премахнати от ядрото, те отдавна са заменени от подсистемата libata.
    • „Суровият“ драйвер е премахнат от ядрото, осигурявайки небуфериран достъп до блокови устройства чрез интерфейса /dev/raw. Тази функционалност отдавна е внедрена в приложения, използващи флага O_DIRECT.
  • Памет и системни услуги
    • Планировчикът на задачи прилага нов режим на планиране, SCHED_CORE, който ви позволява да контролирате кои процеси могат да се изпълняват заедно на едно и също ядро ​​на процесора. На всеки процес може да бъде присвоен идентификатор на бисквитка, който определя обхвата на доверие между процесите (например принадлежност към един и същ потребител или контейнер). Когато организира изпълнението на кода, планировчикът може да гарантира, че едно CPU ядро ​​се споделя само между процеси, свързани с един и същ собственик, което може да се използва за блокиране на някои атаки на Spectre, като предотвратява изпълнението на надеждни и ненадеждни задачи в една и съща SMT (Hyper Threading) нишка .
    • За cgroup е внедрена поддръжка за операция за унищожаване, която ви позволява да убиете всички процеси, свързани с групата наведнъж (изпратете SIGKILL), като напишете „1“ във виртуалния файл cgroup.kill.
    • Разширени възможности, свързани с реагиране при откриване на разделени ключалки („разделени ключалки“), които възникват при достъп до неподравнени данни в паметта поради факта, че при изпълнение на атомарна инструкция данните пресичат две линии на кеша на процесора. Такова блокиране води до значителен спад в производителността, така че по-рано беше възможно принудително да се прекрати приложението, което е причинило блокирането. Новата версия добавя параметър на командния ред на ядрото „split_lock_detect=ratelimit:N“, който ви позволява да дефинирате системно ограничение за скоростта на операциите за заключване в секунда, след превишаването на което всеки процес, който е станал източник на разделно заключване ще бъде принуден да спре за 20 ms вместо да прекрати.
    • Контролерът на честотната лента на cgroup CFS (CFS контролер на честотната лента), който определя колко процесорно време може да бъде разпределено за всяка cgroup, реализира възможността за дефиниране на ограничени във времето ограничения, което позволява по-добро регулиране на чувствителни към латентност натоварвания. Например, настройката на cpu.cfs_quota_us на 50000 100000 и cpu.cfs_period_us на 100 50 ще позволи на група процеси да губят XNUMX ms процесорно време на всеки XNUMX ms.
    • Добавена първоначална инфраструктура за създаване на програми за зареждане на BPF програми, което допълнително ще позволи зареждането само на BPF програми, подписани с доверен цифров ключ.
    • Добавена е нова futex операция FUTEX_LOCK_PI2, която използва монотонен таймер за изчисляване на таймаут, който отчита времето, прекарано от системата в режим на заспиване.
    • За архитектурата RISC-V е реализирана поддръжка за големи страници с памет (Transparent Huge-Pages) и възможност за използване на механизма KFENCE за откриване на грешки при работа с памет.
    • Системното извикване madvise(), което предоставя средство за оптимизиране на управлението на паметта на процеса, е добавило флаговете MADV_POPULATE_READ и MADV_POPULATE_WRITE за генериране на „страница грешка“ на всички страници на паметта, картографирани за операции за четене или запис, без да се извършва действително четене или запис (предварителна грешка ). Използването на флагове може да бъде полезно за намаляване на закъсненията в изпълнението на програмата, поради проактивното изпълнение на манипулатора „page fault“ за всички неразпределени страници наведнъж, без да се чака действителният достъп до тях.
    • Системата за тестване на единици kunit добави поддръжка за провеждане на тестове в средата QEMU.
    • Добавени са нови програми за проследяване: „osnoise“ за проследяване на закъснения на приложението, причинени от обработка на прекъсвания, и „timerlat“ за показване на подробна информация за закъснения при събуждане от сигнал на таймера.
  • Виртуализация и сигурност
    • Системното извикване memfd_secret() е добавено за създаване на частна област на паметта в изолирано адресно пространство, видима само за притежаващия процес, неотразена за други процеси и недостъпна директно за ядрото.
    • В системата за филтриране на системни повиквания seccomp, когато се преместват блокиращи манипулатори в потребителското пространство, е възможно да се използва една атомарна операция за създаване на файлов дескриптор за изолирана задача и връщането му при обработка на системно повикване. Предложената операция решава проблема с прекъсването на манипулатора в потребителското пространство, когато пристигне сигнал.
    • Добавен е нов механизъм за управление на ограниченията на ресурсите в пространството от имена на потребителски идентификатор, който свързва отделни броячи на rlimit към потребител в „пространството от имена на потребители“. Промяната решава проблема с използването на общи броячи на ресурси, когато един потребител изпълнява процеси в различни контейнери.
    • Хипервайзорът KVM за системи ARM64 добави възможност за използване на разширението MTE (MemTag, Разширение за маркиране на паметта) в системи за гости, което ви позволява да свързвате тагове към всяка операция за разпределяне на памет и да организирате проверка на правилното използване на указатели, за да блокирате използването на уязвимости, причинени от достъп до вече освободени блокове памет, препълване на буфера, достъп преди инициализация и използване извън текущия контекст.
    • Средствата за удостоверяване на указател на платформата ARM64 вече могат да бъдат конфигурирани отделно за ядрото и потребителското пространство. Технологията ви позволява да използвате специализирани ARM64 инструкции за проверка на адресите за връщане с помощта на цифрови подписи, които се съхраняват в неизползваните горни битове на самия указател.
    • 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 (многопътна хеш политика), което прави възможно да се определи от потребителското пространство кои полета в пакетите, включително капсулираните, ще бъдат използвани при изчисляване на хеша, който определя избор на път за пакета.
    • Към виртуалния транспорт на virtio е добавена поддръжка за сокети SOCK_SEQPACKET (подредено и надеждно предаване на дейтаграми).
    • Възможностите на механизма на сокета SO_REUSEPORT са разширени, което позволява на няколко слушащи сокета да се свързват към един порт наведнъж, за да получават връзки с разпределение на входящи заявки едновременно във всички сокети, свързани чрез SO_REUSEPORT, което опростява създаването на многонишкови сървърни приложения . Новата версия добавя инструменти за прехвърляне на управление към друг сокет в случай на повреда при обработка на заявка от първоначално избрания сокет (решава проблема със загубата на отделни връзки при рестартиране на услуги).
  • Оборудование
    • Драйверът amdgpu осигурява поддръжка за новата серия графични процесори AMD Radeon RX 6000 с кодови имена „Beige Goby“ (Navi 24) и „Yellow Carp“, както и подобрена поддръжка за графичния процесор Aldebaran (gfx90a) и APU на Van Gogh. Добавена е възможност за едновременна работа с няколко eDP панела. За APU Renoir е внедрена поддръжка за работа с криптирани буфери във видео паметта (TMZ, Trusted Memory Zone). Добавена е поддръжка за горещо изключване на графични карти. За графични процесори Radeon RX 6000 (Navi 2x) и по-стари графични процесори на AMD, поддръжката на ASPM (Active State Power Management) е активирана по подразбиране, която преди беше активирана само за графични процесори Navi 1x, Vega и Polaris.
    • За AMD чипове е добавена поддръжка за споделена виртуална памет (SVM, споделена виртуална памет) въз основа на подсистемата HMM (Heterogeneous memory management), която позволява използването на устройства със собствени единици за управление на паметта (MMU, единица за управление на паметта), който има достъп до основната памет. По-специално, използвайки 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 за поддръжка на хардуерните превключватели за камера и микрофон, включени в лаптопите на 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

Добавяне на нов коментар