След като прекара два месеца в разработка, Линус Торвалдс представи версията на ядрото Linux 5.15. Някои от най-забележителните промени включват: нов драйвер NTFS с поддръжка на запис, модул ksmbd с реализация на SMB сървър, подсистема DAMON за мониторинг на достъпа до паметта, примитиви за заключване за режим на реално време, поддръжка на fs-verity в Btrfs, системен повик process_mrelease за системи, реагиращи на недостиг на памет, модул за отдалечена атестация dm-ima.
В новата версия са приети 13499 корекции от 1888 разработчици, размерът на патча е 42 MB (промените засягат 10895 файлове, добавени са 632522 реда код, изтрити са 299966 реда). Около 45% от всички променени елементи в 5.15 са свързани с драйвери на устройства, около 14% от промените касаят актуализация на код, специфичен за хардуерни архитектури, 14% са свързани с мрежовия стек, 6% — с файлови системи и 3% с вътрешните подсистеми на ядрото.
Основни нововъведения:
- Дискова подсистема, вход/изход и файлови системи
- В ядрото е приета новата реализация на файловата система NTFS, отворена от компанията Paragon Software. Новият драйвер може да работи в режим на запис и поддържа всички възможности на актуалната версия NTFS 3.1, включително разширени атрибути на файловете, списъци за достъп (ACL), режим на компресия на данните, ефективна работа с дупки в файловете (sparse) и възстановяване на целостта след сривове с помощта на журнални записи.
- В файловата система Btrfs е реализирана поддръжка на механизма fs-verity, който се използва за прозрачен контрол на целостта и автентичността на отделните файлове посредством криптографски хешове или ключове, свързани с файловете и съхранявани в метаданни. По-рано fs-verity беше достъпен само за файловите системи Ext4 и F2fs.
В Btrfs също така е добавена поддръжка за отразяване на идентификатори на потребители за монтирани файлови системи (по-рано поддържано само за файловите системи FAT, ext4 и XFS). Тази функция позволява да се свържат файлове на определен потребител на монтиран чужд дял с друг потребител в текущата система.
Сред другите изменения в Btrfs: ускорение добавянето на ключове в индекса на директорията за повишаване на производителността при създаване на файлове; възможност за работа с raid0 с едно устройство и raid10 с две (например, по време на пре-конфигуриране на масива); опция "rescue=ibadroots" за игнориране на неправилно дърво на екстентите; ускорение на операцията "send"; намаляване на конфликтите на блокировки по време на операцията за преименуване; възможност за използване на 4K сектори на системи с размер на страницата на паметта 64K.
- В XFS е стабилизирана възможността за използване на файловата система с дати след 2038 година. Реализиран е механизъм за отложена деактивация на inode и поддръжка на отложена настройка и премахване на атрибутите на файловете. С цел изключване на проблеми е премахната възможността за деактивиране на дисковите квоти за вече монтирани дялове (може принудително да се деактивират квоти, но свързаният с това брой ще продължи да се изчислява, затова за пълно деактивиране е необходимо пре-монтиране).
- В EXT4 е проведена работа за увеличаване на производителността на записите на delalloc буфери и обработката на осиротели (orphan) файлове, които продължават да съществуват, защото остават отворени, но нямат привързване към директория. Обработката на операциите discard е извлечена от jbd2 потока kthread, за да се изключат блокировките на операциите с метаданни.
- В F2FS е добавена опция "discard_unit=block|segment|section" за привързване на операциите discard (маркиране на освободените блокове, които вече не може да се съхраняват физически) спрямо изравняването на блока, сектора, сегмента или секцията. Добавена е поддръжка за проследяване на промените в забавянията при вход/изход.
- В файловата система EROFS (Extendable Read-Only File System) е добавена поддръжка за директен вход/изход за файлове, запазени без компресия, както и поддръжка на fiemap.
- В OverlayFS е реализирана коректна обработка на флаговете за монтиране "immutable", "append-only", "sync" и "noatime".
- В NFS е подобрена обработката на ситуации, когато NFS-сървърът е престанал да отговаря на заявки. Добавена е възможност за монтиране с вече използвано сървър, но достъпно чрез друг мрежов адрес.
- Започна подготовка за пренаписване на подсистемата FSCACHE.
- Добавена е поддръжка на EFI-раздели с нестандартно разпределение на таблиците GPT.
- В механизма на fanotify е реализиран нов флаг FAN_REPORT_PIDFD, който води до указване на pidfd в списъка с връщани метаданни. Pidfd помага да се обработват ситуации с повторно използване на PID за по-точна идентификация на процесите, които interact с наблюдаваните файлове (pidfd е свързан с конкретен процес и не се променя, докато PID може да бъде прикрепен към друг процес след завършване на текущия, свързан с този PID).
- В системния повик move_mount() е добавена възможност за добавяне на точки на монтиране в съществуващи споделени групи, което решава проблеми със запазването и възстановяването на състоянието на процесите в инструмента CRIU при наличието на множество пространства на монтиране, които са споделени между изолирани контейнери.
- Добавена е защита от скрити състояния на гонка, които потенциално могат да доведат до повреждане на файлове при изпълнение на четене от кеша по време на обработка на дупки в файла.
- Поддръжката на задължителни блокировки на файлове, реализирани чрез блокиране на системни повиквания, водещи до промяна на файла, е прекратена. Поради възможни състояния на гонка, тези блокировки се считат за ненадеждни и бяха обявени за остарели преди много години.
- Подсистемата LightNVM, позволяваща достъп до SSD устройства, заобикаляйки слой на емілация, е премахната. LightNVM загуби смисъл след появата на стандартите NVMe, предвиждащи възможност за зониране (ZNS, Zoned Namespace).
- Памет и системни услуги
- Реализирана е подсистема DAMON (Data Access MONitor), която позволява мониторинг на активността, свързана с достъпа до данни в оперативната памет, свързана с избран процес, работещ в потребителско пространство. Подсистемата позволява анализ на кои точно области от паметта е взаимодействал процесът през целия си живот, а кои области останаха неизползвани. От характеристиките на DAMON се открояват ниското натоварване на CPU, малкото потребление на памет и висока точност с предсказуеми постоянни разходи, които не зависят от размера. Подсистемата може да се използва както от ядрото за оптимизация на управлението на паметта, така и от утилити в потребителското пространство за разбиране на това, което всъщност прави процесът и оптимизация на използването на паметта, например, освобождаване на излишна памет за системата.
- Реализиран е системен повик process_mrelease, който позволява да се ускори процеса на освобождаване на паметта на завършващи изпълнението си процеси. При нормални условия освобождаването на ресурсите и завършването на процеса не се извършва мигновено и по различни причини може да се забави, което затруднява работата на функциониращите в потребителското пространство системи за ранно реагиране на недостиг на памет, като oomd (предоставя се в systemd) и lmkd (използва се в Android). Възможността за повикването process_mrelease позволява на такива системи да инициират връщането на паметта от принудително завършвани процеси по-предсказуемо.
- От клона на ядрото PREEMPT_RT, в който се развива поддръжка за работа в реално време, са пренесени вариации на примитиви за организиране на блокировки mutex, ww_mutex, rw_semaphore, spinlock и rwlock, основани на подсистемата RT-Mutex. В SLUB slab allocator са добавени изменения, които подобряват работата в режим PREEMPT_RT и намаляват влиянието върху прекъсванията.
- В cgroup е добавена поддръжка за атрибута на планировчика на задачи SCHED_IDLE, позволяващ да се снабдят с този признак всички процеси от групата, включени в определен cgroup. Т.е. тези процеси ще стартират само когато в системата няма други задачи, чакащи за изпълнение. В отличие от задаването на атрибута SCHED_IDLE на всеки процес поотделно, при свързването на SCHED_IDLE с cgroup, при избор на задача за изпълнение се взима предвид относителното тегло на задачите в групата.
- Механизмът за отчет на потреблението на памет в cgroup е разширен с възможността за проследяване на допълнителни структури от данни на ядрото, включително създадените за poll-инг, обработка на сигнали и пространствата с имена.
- Добавена е поддръжка за асиметрично планиране на привързването на задачи към процесорни ядра в архитектури, в които някои CPU позволяват изпълнение на 32-битови задачи, а други работят само в 64-битов режим (например, ARM). Новият режим позволява при планиране на изпълнението на 32-битови задачи да се взимат предвид само CPU, които поддържат 32-битови задачи.
- В интерфейса на асинхронния вход/изход io_uring е добавена поддръжка за отваряне на файлове директно в индексната таблица fixed-file, без използването на файлов дескриптор, което предоставя значително ускорение на определени типове операции, но противоречи на традиционния за Unix процес на използване на файлови дескриптори за отваряне на файлове.
В io_uring за подсистемата BIO (Block I/O Layer) е реализиран нов механизъм за рециклиране («BIO recycling»), който намалява разходите при управлението на вътрешната памет и увеличава с около 10% броя на обработваните операции вход/изход в секунда. В io_uring също е добавена поддръжка за системни повиквания mkdirat(), symlinkat() и linkat().
- За BPF-програмите е реализирана възможност за заявяване и обработка на времеви събития. Добавен е итератор за UNIX-сокети, както и възможност за получаване и задаване на опции за сокети чрез setsockopt. В BTF dumper е добавена поддръжка за типизирани данни.
- На NUMA-системи с различни типове памет, различаващи се по производителност, при изчерпване на свободното пространство е реализирано прехвърляне на избутвани страници памет от динамична памет (DRAM) в по-бавна постоянна памет (Persistent Memory) вместо изтриване на тези страници. Проведените тестове показаха, че тази тактика обикновено подобрява производителността на подобни системи. За NUMA също е реализирана възможност за разпределение на страници памет за процеса от избран набор от NUMA възли.
- За архитектурата ARC е реализирана поддръжка на три- и четиристепенни таблици страници памет, което в бъдеще ще позволи поддръжка на 64-битови процесори ARC.
- За архитектурата s390 е реализирана възможност за прилагане на механизма KFENCE за откриване на грешки при работа с паметта, както и е добавена поддръжка на детектора за условия на гонка KCSAN.
- Добавена е поддръжка за индексиране на списъка с съобщения, изведени чрез printk(), което позволява едновременно извличане на всички подобни съобщения и проследяване на промените в потребителската памет.
- В mmap() е прекратена поддръжката на опцията VM_DENYWRITE, а кодът на ядрото е освободен от използването на режима MAP_DENYWRITE, което намали броя на ситуациите, водещи до блокиране на записа в файла с грешка ETXTBSY.
- В подсистемата за трасировка е добавен нов тип проверки «Event probes», който може да бъде прикачен към съществуващите събития на трасировката, задавайки собствен формат на изхода.
- При компилирането на ядрото с помощта на компилатора Clang по подразбиране сега се използва вграденият асемблер от проекта LLVM.
- В рамките на проекта за премахване на кода от ядрото, който води до предупреждения от компилатора, беше проведен експеримент с включване по подразбиране на режима «-Werror», при който предупрежденията на компилатора се обработват като грешки. По време на подготовката на версия 5.15 Линус започна да приема само промени, които не водят до предупреждения при компилиране на ядрото и активира компилирането с «-Werror», но след това се съгласи с мнението за преждевременност на такова решение и отложи включването на «-Werror» по подразбиране. Управлението на включването на флага «-Werror» при компилиране се осъществява чрез параметъра WERROR, който по подразбиране е зададен на стойност COMPILE_TEST, т.е. засега се включва само при тестови компилации.
- Виртуализация и безопасност
- В Device Mapper (DM) е добавен нов обработчик dm-ima с реализация на механизма за отдалечена атестация на базата на подсистемата IMA (Integrity Measurement Architecture), позволяваща на външна услуга да верифицира състоянието на подсистемите на ядрото, за да се увери в тяхната автентичност. На практика dm-ima позволява създаването на хранилища, свързани с външни облачни системи, в които с помощта на IMA се проверява достоверността на стартираната конфигурация на DM target.
- В prctl() е реализирана нова опция PR_SPEC_L1D_FLUSH, при включването на която ядрото започва да изчиства съдържанието на кеша на ниво 1 (L1D) всеки път при смяна на контекста. Този режим позволява селективно за най-важните процеси да се реализира допълнителна защита от атаки чрез странични канали, извършвани за определяне на данните, задържали се в кеша в резултат на уязвимости, предизвикани от спекулативното изпълнение на инструкции в CPU. Цената на включването на PR_SPEC_L1D_FLUSH (по подразбиране не активиран) е значително намаляване на производителността.
- Реализирана е възможността за компилиране на ядрото с добавяне на флага «-fzero-call-used-regs=used-gpr» в GCC, който осигурява нулиране на всички регистри преди връщането на контрола от функцията. Посочената опция позволява защита от изтичане на информация от функции и намалява с 20% броя на блоковете, подходящи за изграждане на ROP-гаджети (Return-Oriented Programming) в експлойти.
- Реализирана е възможността за компилиране на ядра за архитектура ARM64 под формата на клиенти за хипервизора Hyper-V.
- Предложен е нов фреймуърк за разработка на драйвери «VDUSE», който позволява реализиране на виртуални блочни устройства в потребителското пространство и използване на Virtio като транспорт за достъп от гост-системите.
- Добавен е Virtio-драйвер за шината I2C, даващ възможност за емулиране на контролери I2C в режим на паравиртуализация, използвайки отделни бекенди.
- Добавен е Virtio-драйвер gpio-virtio, позволяващ на гост-системите да получат достъп до GPIO линиите, предоставени от хост-системата.
- Добавена е възможността за ограничаване на достъпа до страници памет за драйвери на устройства с поддръжка на DMA на системи без I/O MMU (unit за управление на паметта).
- В хипервизора KVM е реализирана възможността за извеждане на статистиката под формата на линейни и логаритмични хистограми.
- Мрежовата подсистема
- В състава на ядрото е добавен модул ksmbd с реализиране на файлов сървър, използващ протокола SMB3. Модулът допълва преди това наличната в ядрото реализация на клиента SMB и в сравнение с SMB-сървъра, работещ в потребителското пространство, е по-ефективен по отношение на производителността, консумацията на памет и интеграцията с разширените възможности на ядрото. Ksmbd се представя като високо производително и готово за приложение разширение към Samba за вградени устройства, с интеграция при необходимост с инструментите и библиотеките на Samba. Сред възможностите на ksmbd се откроява подобрената поддръжка на технологията за разпределено кеширане на файлове (SMB leases) на локални системи, която позволява значително намаляване на трафика. В бъдеще планират добавяне на поддръжка на RDMA («smbdirect») и разширения на протокола, свързани с усилване на надеждността на криптирането и проверка по цифрови подписи.
- В клиента CIFS е прекратена поддръжката на NTLM и по-малко надеждни алгоритми за автентикация, базирани на алгоритъма DES и използвани в протокола SMB1.
- В реализaцията на мрежови мостове за vlan е добавена поддръжка на multicast.
- В драйвера bonding, който се използва за агрегиране на мрежови интерфейси, е добавена поддръжка на подсистемата XDP (eXpress Data Path), която позволява манипулация на мрежовите пакети на етапа преди тяхната обработка от мрежовия стек на ядрото на Linux.
- В безжичния стек mac80211 е добавена поддръжка на 6GHz STA (Special Temporary Authorization) в режимите LPI, SP и VLP, както и възможност за настройка на отделни TWT (Target Wake Time) в режим точка за достъп.
- Добавена е поддръжка на протокола MCTP (Management Component Transport Protocol), използван за взаимодействие между управляващите контролери и свързаните с тях устройства (хост-процесори, периферни устройства и др.).
- Продължава интеграцията в ядрото MPTCP (MultiPath TCP), разширение на протокола TCP за организиране на работа на TCP-соединението с доставка на пакети едновременно по няколко маршрута през различни мрежови интерфейси, свързани с различни IP адреси. В новата версия е добавена поддръжка на адреси в режим fullmesh.
- В netfilter са добавени обработчици на мрежови потоци, инкапсулирани в протокол SRv6 (Segment Routing IPv6).
- Добавена е поддръжка на sockmap за потокови Unix-сокети.
- Оборудване
- В драйвера amdgpu е добавена поддръжка на APU Cyan Skillfish (с GPU Navi 1x). За APU Yellow Carp е реализирана поддръжка на видеокодеци. Подобрена е поддръжката на GPU Aldebaran. Добавени са нови идентификатори на карти на база GPU Navi 24 «Beige Goby» и RDNA2. Предложена е подобрена реализация на виртуални екрани (VKMS). Реализирана е поддръжка на проследяване на температурата на чипове AMD Zen 3.
- В драйвера amdkfd (за дискретни GPU, като Polaris) е реализиран мениджър на споделена виртуална памет (SVM, shared virtual memory) на база подсистемата HMM (Heterogeneous memory management), позволяваща използването на устройства с собствени блокове управление на паметта (MMU, memory management unit), които могат да получат достъп до основната памет. Включително с HMM може да се организира съвместно адресно пространство между GPU и CPU, в което GPU може да има достъп до основната памет на процеса.
- В драйвера i915 за видеокарти Intel е разширено приложението на мениджъра за управление на видеопаметта TTM и е включена възможност за управление на енергопотреблението на базата на GuC (Graphics micro Controller). Започнала е подготовка за реализиране на поддръжка на графичната карта Intel ARC Alchemist и GPU Intel Xe-HP.
- В драйвера nouveau е реализирано управление подсветката на eDP панели чрез DPCD (DisplayPort Configuration Data).
- В драйвера msm е добавена поддръжка на GPU Adreno 7c Gen 3 и Adreno 680.
- За чипа Apple M1 е реализиран драйвер IOMMU.
- Добавен е звуков драйвер за системи на база APU AMD Van Gogh.
- В клон staging е добавен драйвер Realtek R8188EU, който заменя стария вариант на драйвера (rtl8188eu) за безжични чипове Realtek RTL8188EU 802.11 b/g/n.
- Приет е драйвер ocp_pt за PCIe платка, разработвана от компанията Meta (Facebook), с реализирани миниатюрни атомни часовници и GNSS приемник, които могат да се използват за организация на работа на изолирани сървъри системи за синхронизация на точното време.
- Добавена е поддръжка на смартфони Sony Xperia 10II (Snapdragon 665), Xiaomi Redmi 2 (Snapdragon MSM8916), Samsung Galaxy S3 (Snapdragon MSM8226), Samsung Gavini/Codina/Kyle.
- Добавена е поддръжка за ARM SoC и платформи NVIDIA Jetson TX2 NX Developer Kit, Sancloud BBE Lite, PicoITX, DRC02, SolidRun SolidSense, SKOV i.MX6, Nitrogen8, Traverse Ten64, GW7902, Microchip SAMA7, Qualcomm Snapdragon SDM636/SM8150, Renesas R-Car H3e-2G/M3e-2G, Marvell CN913x, ASpeed AST2600 (сървърни платки Facebook Cloudripper, Elbert и Fuji), 4KOpen STiH418-b2264.
- Добавена е поддръжка на LCD панели Gopher 2b, EDT ETM0350G0DH6/ETMV570G2DHU, LOGIC Technologies LTTD800480070-L6WH-RT, Multi-Innotechnology MI1010AIT-1CP1, Innolux EJ030NA 3.0, ilitek ili9341, E Ink VB3300-KCA, Samsung ATNA33XC20, Samsung DB7430, WideChips WS2401.
- Добавен е драйвер LiteETH с поддръжка на Ethernet контролери, използвани в софтуерни SoC LiteX (за FPGA).
- В драйвера usb-audio е добавена опция lowlatency за управление на включването в режим на минимални забавяния. Също така е добавена опция quirk_flags за предаване на специфични настройки за устройството.
Одновременно латиноамериканският Фонд за свободен софтуер създаде версия на напълно свободното ядро 5.15 — Linux-libre 5.15-gnu, което е освободено от елементи на фърмуер и драйвери, съдържащи несвободни компоненти или части от код, чийто обхват е ограничен от производителя. В новата версия е реализирано извеждането на съобщение в лог файла при приключване на почистването. Отстранени са проблеми при формиране на пакети с помощта на mkspec, подобрена е поддръжката на snap пакети. Премахнати са някои предупреждения, показвани при обработка на заглавен файл firmware.h. Разрешено е извеждането на някои видове предупреждения (“format-extra-args”, коментари, неизползваеми функции и променливи) при компилация в режим “-Werror”. Добавено е почистване на драйвера gehc-achc. Кодът за почистване на блобовете в драйверите и подсистемите adreno, btusb, btintel, brcmfmac, aarch64 qcom е обновен. Почистването на драйверите prism54 (изтрит) и rtl8188eu (заменен с r8188eu) е прекратено.
Източник: opennet.ru
