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

След два месеца разработка Линус Торвалдс представи версията на Linux ядрото 5.15. Забележителните промени включват: нов драйвер за NTFS с поддръжка за запис, ksmbd модул с внедряване на SMB сървър, подсистема DAMON за наблюдение на достъпа до паметта, заключващи примитиви в реално време, поддръжка на fs-verity в Btrfs, системно извикване process_mrelease за системна памет за отговор на гладуване, модул за дистанционно сертифициране дм-има.

Новата версия включва 13499 1888 корекции от 42 разработчици, размерът на корекцията е 10895 MB (промените засягат 632522 299966 файла, добавени са 45 5.15 реда код, 14 14 реда са изтрити). Около 6% от всички промени, въведени в 3, са свързани с драйвери на устройства, приблизително XNUMX% от промените са свързани с актуализиране на код, специфичен за хардуерни архитектури, XNUMX% са свързани с мрежов стек, XNUMX% са свързани с файлови системи и XNUMX% са свързани с вътрешни подсистеми на ядрото.

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

  • Дискова подсистема, I/O и файлови системи
    • Ядрото е приело нова реализация на файловата система NTFS, отворена от Paragon Software. Новият драйвер може да работи в режим на запис и поддържа всички функции на текущата версия на NTFS 3.1, включително разширени файлови атрибути, списъци за достъп (ACL), режим на компресиране на данни, ефективна работа с празни пространства във файлове (разредени) и възпроизвеждане на промени от дневникът за възстановяване на целостта след грешки.
    • Файловата система Btrfs поддържа механизма fs-verity, който се използва за прозрачен контрол на целостта и автентичността на отделни файлове, използвайки криптографски хешове или ключове, свързани с файловете, съхранени в областта за метаданни. Преди това fs-verity беше наличен само за файлови системи Ext4 и F2fs.

      Btrfs също добавя поддръжка за картографиране на потребителски идентификатори за монтирани файлови системи (преди това се поддържаше за FAT, ext4 и XFS файлови системи). Тази функция ви позволява да сравнявате файлове на конкретен потребител на монтиран чужд дял с друг потребител в текущата система.

      Други промени в Btrfs включват: по-бързо добавяне на ключове към индекса на директорията за подобряване на производителността при създаване на файлове; възможността за работа raid0 с едно устройство и raid10 с две (например по време на процеса на преконфигуриране на масива); опция “rescue=ibadroots” за игнориране на неправилно дърво на степента; ускоряване на операцията „изпращане“; намаляване на конфликтите при заключване по време на операции за преименуване; възможност за използване на 4K сектори на системи с размер на страницата с памет 64K.

    • В XFS възможността за използване на дати след 2038 във файловата система е стабилизирана. Въведен механизъм за отложено деактивиране на inode и поддръжка за отложено инсталиране и премахване на файлови атрибути. За да се премахнат проблемите, възможността за деактивиране на дискови квоти за вече монтирани дялове е премахната (можете принудително да деактивирате квоти, но изчислението, свързано с тях, ще продължи, така че е необходимо повторно монтиране, за да ги деактивирате напълно).
    • В EXT4 е направена работа за увеличаване на производителността на писане на delalloc буфери и обработка на осиротели файлове, които продължават да съществуват поради факта, че остават отворени, но не са свързани с директория. Обработката на операциите за отхвърляне е преместена извън нишката jbd2 kthread, за да се избегне блокиране на операции с метаданни.
    • F2FS добави опцията „discard_unit=block|segment|section“ за обвързване на операции за изхвърляне (маркиране на освободени блокове, които може вече да не се съхраняват физически) към подравняването спрямо блок, сектор, сегмент или раздел. Добавена е поддръжка за проследяване на промените в I/O латентността.
    • Файловата система EROFS (разширяема файлова система само за четене) добавя директна I/O поддръжка за файлове, записани без компресия, както и поддръжка на fiemap.
    • OverlayFS прилага правилна обработка на флаговете за монтиране "immutable", "append-only", "sync" и "noatime".
    • NFS има подобрена обработка на ситуации, при които NFS сървърът спира да отговаря на заявки. Добавена е възможност за монтиране от сървър, който вече се използва, но достъпен чрез различен мрежов адрес.
    • Започна подготовката за пренаписване на подсистемата FSCACHE.
    • Добавена е поддръжка за EFI дялове с нестандартно разположение на GPT таблици.
    • Механизмът fanotify прилага нов флаг, FAN_REPORT_PIDFD, който кара pidfd да бъде включен във върнатите метаданни. Pidfd помага при ситуации на повторно използване на PID за по-точно идентифициране на процеси, които имат достъп до наблюдавани файлове (pidfd е свързан с конкретен процес и не се променя, докато PID може да бъде свързан с друг процес, след като текущият процес, свързан с този PID, приключи).
    • Добавена е възможност за добавяне на точки за монтиране към съществуващи споделени групи към системното извикване move_mount(), което решава проблеми със запазването и възстановяването на състоянието на процеса в CRIU, когато има множество пространства за монтиране, споделени в изолирани контейнери.
    • Добавена е защита срещу скрити условия на състезание, които потенциално биха могли да причинят повреда на файла при извършване на четене на кеша при обработка на празнини във файл.
    • Поддръжката за задължително (задължително) заключване на файлове, реализирана чрез блокиране на системни извиквания, които водят до промяна на файла, е преустановена. Поради възможни условия на състезание, тези ключалки се смятаха за ненадеждни и бяха отхвърлени преди много години.
    • Подсистемата LightNVM е премахната, което позволява директен достъп до SSD устройството, заобикаляйки емулационния слой. LightNVM загуби значението си след появата на стандартите NVMe, които осигуряват зониране (ZNS, Zoned Namespace).
  • Памет и системни услуги
    • Внедрена е подсистемата DAMON (Data Access MONitor), която ви позволява да наблюдавате дейността, свързана с достъпа до данни в RAM, във връзка с избран процес, изпълняван в потребителското пространство. Подсистемата ви позволява да анализирате до кои области на паметта е достъпен процесът по време на цялата си работа и кои области на паметта са останали непотърсени. DAMON се характеризира с ниско натоварване на процесора, ниска консумация на памет, висока точност и предвидими постоянни разходи, независимо от размера. Подсистемата може да се използва както от ядрото за оптимизиране на управлението на паметта, така и от помощни програми в потребителското пространство, за да се разбере какво точно прави даден процес и да се оптимизира използването на паметта, например, освобождаване на излишна памет за системата.
    • Системното извикване process_mrelease е внедрено, за да се ускори процесът на освобождаване на паметта на процес, който завършва своето изпълнение. При нормални обстоятелства освобождаването на ресурси и прекратяването на процеса не са мигновени и могат да бъдат забавени по различни причини, пречейки на системите за ранен отговор на паметта на потребителското пространство, като oomd (осигурена от systemd) и lmkd (използвана от Android). Чрез извикване на process_mrelease такива системи могат по-предсказуемо да задействат възстановяването на памет от принудителни процеси.
    • От клона на ядрото PREEMPT_RT, който развива поддръжка за работа в реално време, са прехвърлени варианти на примитиви за организиране на брави mutex, ww_mutex, rw_semaphore, spinlock и rwlock, базирани на подсистемата RT-Mutex. Добавени са промени в разпределителя на SLUB slab, за да се подобри работата в режим PREEMPT_RT и да се намали въздействието върху прекъсванията.
    • Поддръжката за атрибута на планировчика на задачи SCHED_IDLE е добавена към cgroup, което ви позволява да предоставите този атрибут на всички процеси на група, включени в конкретна cgroup. Тези. тези процеси ще се изпълняват само когато няма други задачи, които чакат да бъдат изпълнени в системата. За разлика от настройката на атрибута SCHED_IDLE за всеки процес поотделно, при обвързване на SCHED_IDLE към cgroup, относителното тегло на задачите в рамките на групата се взема предвид при избора на задача за изпълнение.
    • Механизмът за отчитане на потреблението на памет в cgroup е разширен с възможността за проследяване на допълнителни структури от данни на ядрото, включително тези, създадени за запитване, обработка на сигнали и пространства от имена.
    • Добавена е поддръжка за асиметрично планиране на обвързване на задачите към процесорните ядра на архитектури, в които някои процесори позволяват изпълнение на 32-битови задачи, а някои работят само в 64-битов режим (например ARM). Новият режим ви позволява да вземете предвид само процесори, които поддържат 32-битови задачи, когато планирате 32-битови задачи.
    • Асинхронният входно-изходен интерфейс io_uring вече поддържа отваряне на файлове директно в индексната таблица с фиксирани файлове, без да се използва файлов дескриптор, което прави възможно значително ускоряване на някои типове операции, но противоречи на традиционния Unix процес за използване на файлови дескриптори за отваряне на файлове.

      io_uring за подсистемата BIO (Block I/O Layer) прилага нов механизъм за рециклиране („BIO recycling“), който намалява режийните разходи в процеса на управление на вътрешната памет и увеличава броя на обработените I/O операции в секунда с приблизително 10% . io_uring също добавя поддръжка за системните извиквания mkdirat(), symlinkat() и linkat().

    • За BPF програмите е въведена възможност за заявяване и обработка на таймерни събития. Добавен е итератор за UNIX сокети и е въведена възможност за получаване и задаване на опции за сокети за setsockopt. BTF dumper вече поддържа въведени данни.
    • При NUMA системи с различни типове памет, които се различават по производителност, когато свободното пространство е изчерпано, изхвърлените страници с памет се прехвърлят от динамична памет (DRAM) към по-бавна постоянна памет (постоянна памет), вместо да изтриват тези страници. Тестовете показват, че подобни тактики обикновено подобряват производителността на такива системи. NUMA също така предоставя възможност за разпределяне на страници с памет за процес от избран набор от NUMA възли.
    • За ARC архитектурата е внедрена поддръжка за таблици на страници с памет от три и четири нива, което допълнително ще даде възможност за поддръжка на 64-битови ARC процесори.
    • За архитектурата s390 е реализирана възможността за използване на механизма KFENCE за откриване на грешки при работа с памет и е добавена поддръжка за детектор на състезателни условия KCSAN.
    • Добавена е поддръжка за индексиране на списъка със съобщения, изведени чрез printk(), което ви позволява да извличате всички такива съобщения наведнъж и да проследявате промените в потребителското пространство.
    • mmap() премахна поддръжката за опцията VM_DENYWRITE и кодът на ядрото беше премахнат от използването на режима MAP_DENYWRITE, което намали броя на ситуациите, които водят до блокиране на записи във файл с грешка ETXTBSY.
    • Към подсистемата за проследяване е добавен нов тип проверки, „Проверки на събития“, които могат да бъдат прикачени към съществуващи събития за проследяване, определяйки вашия собствен изходен формат.
    • Когато се изгражда ядрото с помощта на компилатора Clang, сега се използва асемблерът по подразбиране от проекта LLVM.
    • Като част от проект за освобождаване на ядрото от код, който води до извеждане на предупреждения от компилатора, беше проведен експеримент с активиран по подразбиране режим „-Werror“, в който предупрежденията на компилатора се обработват като грешки. В подготовката за изданието 5.15 Линус започна да приема само промени, които не доведоха до предупреждения при изграждане на ядрото и активира изграждането с "-Werror", но след това се съгласи, че такова решение е преждевременно и забави активирането на "-Werror" по подразбиране . Включването на флага „-Werror“ по време на асемблиране се контролира с помощта на параметъра WERROR, който е зададен на COMPILE_TEST по подразбиране, т.е. Засега е активиран само за тестови компилации.
  • Виртуализация и сигурност
    • Нов манипулатор на dm-ima е добавен към Device Mapper (DM) с внедряването на механизъм за дистанционно сертифициране, базиран на подсистемата IMA (Integrity Measurement Architecture), която позволява на външна услуга да проверява състоянието на подсистемите на ядрото, за да гарантира тяхната автентичност . На практика dm-ima ви позволява да създавате хранилища с помощта на Device Mapper, които са свързани с външни облачни системи, в които валидността на стартираната целева конфигурация на DM се проверява с помощта на IMA.
    • prctl() прилага нова опция PR_SPEC_L1D_FLUSH, която, когато е активирана, кара ядрото да изчиства съдържанието на кеша от първо ниво (L1D) всеки път, когато се случи превключване на контекста. Този режим позволява, селективно за най-важните процеси, да се приложи допълнителна защита срещу използването на странични канални атаки, извършени за определяне на данни, които са се установили в кеша в резултат на уязвимости, причинени от спекулативно изпълнение на инструкции в процесора. Разходите за активиране на 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 (единица за управление на паметта).
    • KVM хипервайзорът има способността да показва статистика под формата на линейни и логаритмични хистограми.
  • Мрежова подсистема
    • Модулът ksmbd е добавен към ядрото с внедряването на файлов сървър, използващ протокола SMB3. Модулът допълва изпълнението на SMB клиента, налично преди това в ядрото, и за разлика от SMB сървъра, работещ в потребителско пространство, е по-ефективен по отношение на производителност, потребление на памет и интеграция с разширени възможности на ядрото. Ksmbd се рекламира като високопроизводително, готово за вграждане разширение на Samba, което се интегрира с инструменти и библиотеки на Samba, ако е необходимо. Възможностите на ksmbd включват подобрена поддръжка за технологията за разпределено кеширане на файлове (SMB leases) на локални системи, което може значително да намали трафика. В бъдеще те планират да добавят поддръжка за RDMA („smbdirect“) и разширения на протокола, свързани с повишаване на надеждността на криптирането и проверката с помощта на цифрови подписи.
    • CIFS клиентът вече не поддържа NTLM и по-слабите базирани на DES алгоритми за удостоверяване, използвани в протокола SMB1.
    • Поддръжката на мултикаст се реализира при внедряването на мрежови мостове за vlan.
    • Драйверът за свързване, използван за агрегиране на мрежови интерфейси, е добавил поддръжка за подсистемата XDP (eXpress Data Path), която ви позволява да манипулирате мрежови пакети на етапа, преди да бъдат обработени от мрежовия стек на ядрото на Linux.
    • Безжичният стек mac80211 поддържа 6GHZ STA (Специално временно разрешение) в режими LPI, SP и VLP, както и възможност за задаване на индивидуален TWT (целево време за събуждане) в режим на точка за достъп.
    • Добавена е поддръжка за MCTP (Management Component Transport Protocol), използван за взаимодействие между контролери за управление и свързани устройства (хост процесори, периферни устройства и др.).
    • Интегриране в ядрото на MPTCP (MultiPath TCP), разширение на TCP протокола за организиране на работата на TCP връзка с доставка на пакети едновременно по няколко маршрута през различни мрежови интерфейси, свързани с различни IP адреси. Новата версия добавя поддръжка за адреси в режим fullmesh.
    • Обработчици за мрежови потоци, капсулирани в протокола SRv6 (Segment Routing IPv6), са добавени към netfilter.
    • Добавена е поддръжка на sockmap за Unix стрийминг сокети.
  • Оборудование
    • Драйверът amdgpu поддържа Cyan Skillfish APU (оборудвани с Navi 1x GPU). Yellow Carp APU вече поддържа видео кодеци. Подобрена поддръжка на Aldebaran GPU. Добавени са нови идентификатори на карти, базирани на GPU Navi 24 „Beige Goby“ и RDNA2. Предлага се подобрена реализация на виртуални екрани (VKMS). Реализирана е поддръжка за следене на температурата на чиповете AMD Zen 3.
    • Драйверът amdkfd (за дискретни графични процесори, като Polaris) имплементира споделен мениджър на виртуална памет (SVM, споделена виртуална памет), базиран на подсистемата HMM (Heterogeneous memory management), която позволява използването на устройства със собствени единици за управление на паметта (MMU , модул за управление на паметта), който има достъп до основната памет. По-специално, използвайки HMM, можете да организирате споделено адресно пространство между GPU и CPU, в което GPU има достъп до основната памет на процеса.
    • Драйверът i915 за видеокарти на Intel разширява използването на TTM мениджъра на видео паметта и включва възможност за управление на консумацията на енергия на базата на GuC (графичен микро контролер). Започна подготовката за внедряване на поддръжка за графичната карта Intel ARC Alchemist и графичния процесор Intel Xe-HP.
    • Драйверът nouveau реализира управление на подсветката за eDP панели с помощта на DPCD (Данни за конфигурация на DisplayPort).
    • Добавена е поддръжка за графични процесори Adreno 7c Gen 3 и Adreno 680 към драйвера msm.
    • Драйверът IOMMU е внедрен за чипа Apple M1.
    • Добавен звуков драйвер за системи, базирани на AMD Van Gogh APU.
    • Драйверът 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 SoС и NVIDIA Jetson TX2 NX Developer Kit, Sancloud BBE Lite, PicoITX, DRC02, SolidRun SolidSense, SKOV i.MX6, Nitrogen8, Traverse Ten64, GW7902, Microchip SAMA7, ualcomm 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 7430, Samsung DB2401, WideChips WSXNUMX .
    • Добавен LiteETH драйвер с поддръжка за Ethernet контролери, използвани в LiteX софтуерни SoC (за FPGA).
    • Към usb-аудио драйвера е добавена опция за ниска латентност, за да контролира включването на работа в режим на минимална латентност. Също така е добавена опция 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

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