Linux Kernel 5.7
После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 5.7. Среди наиболее заметных изменений: новая реализация ФС exFAT, модуль bareudp для создания UDP-туннелей, защита на основе аутентификации указателей для ARM64, возможность прикрепления BPF-программ к LSM-обработчикам, новая реализация Curve25519, детектор "split-lock", совместимость BPF с PREEMPT_RT, снятие ограничения на 80-символьный размер строки в коде, учёт показателей температуры CPU в планировщике задач, возможность использования clone() для порождения процессов в другом cgroup, защита от записи в память при помощи userfaultfd.

В новую версию принято 15033 исправлений от 1961 разработчиков, размер патча - 39 МБ (изменения затронули 11590 файлов, добавлено 570560 строк кода, удалено 297401 строк). Около 41% всех представленных в 5.7 изменений связаны с драйверами устройств, примерно 16% изменений имеют отношение к обновлению кода, специфичного для аппаратных архитектур, 13% связано с сетевым стеком, 4% - с файловыми системами и 4% c внутренними подсистемами ядра.
Дисковая подсистема, ввод/вывод и файловые системы
  • Добавлена новая реализация драйвера exFAT, основанная на актуальной кодовой базе "sdfat" (2.x), развиваемой компанией Samsung для своих Android-смартфонов. Ранее добавленный в ядро драйвер был основан на устаревшем коде Samsung (версия 1.2.9) и отставал по производительности от нового драйвера примерно на 10%. Напомним, что добавление поддержки exFAT в ядро стало возможным после того, как компания Microsoft опубликовала общедоступные спецификации и предоставила возможность безвозмездного использования патентов на exFAT в Linux.
  • В Btrfs реализована новая команда ioctl() - BTRFS_IOC_SNAP_DESTROY_V2, позволяющая удалять подраздел по его идентификатору. Обеспечена полная поддержка клонирования inline-экстентов. Расширено число точек отмены операций перераспределения, что позволило сократить длительные ожидания при выполнении команды 'balance cancel'. Ускорено определение обратных ссылок на экстенты (например, время выполнения тестового сценария уменьшилось с часа до нескольких минут). Добавлена возможность прикрепления к каждому inode дерева экстентов файла. Переработана схема блокировки, используемая при записи в подразделы и при исключении NOCOW. Повышена эффективность выполнения fsync для диапазонов.
  • В XFS улучшена проверка метаданных и выполнение fsck для активных разделов. Предложена библиотека для перестроения структур btree, которая в будущем будет использована для переработки xfs_repair и реализации возможности восстановления без отмонтирования раздела.
  • В CIFS добавлена экспериментальная поддержка размещения раздела подкачки в SMB3-хранилищах. Реализованы POSIX-расширения в readdir, определённые в спецификации SMB3.1.1. Повышена производительность записи для страниц размером 64KB при включении режима cache=strict и использовании версий протокола 2.1+.
  • ФС EXT4 переведена с bmap и iopoll на использование iomap.
  • В F2FS реализована опциональная поддержка сжатия данных с использованием алгоритма zstd. По умолчанию для сжатия задействован алгоритм LZ4. Добавлена поддержка команды "chattr -c commit". Обеспечено отображение времени монтирования. Добавлен ioctl F2FS_IOC_GET_COMPRESS_BLOCKS для получения сведений о числе сжатых блоков. Добавлены данные о сжатии, выводимые через statx.
  • В файловой системе Ceph добавлена возможность локального выполнения операций создания и удаления (unlink) файла без ожидания ответа от сервера (работа в асинхронном режиме). Изменение, например, позволяет заметно поднять производительность при работе утилиты rsync.
  • В OVERLAYFS добавлена возможность использования virtiofs в качестве ФС верхнего уровня.
  • Переписан код обхода путей в VFS, переделан код разбора символических ссылок и унифицирован обход точек монтирования.
  • В подсистеме scsi непривилегированным пользователям разрешено выполнение команд ZBC.
  • В dm_writecache реализована возможность постепенной очистки кеша на основании параметра max_age, задающего максимальное время жизни блока.
  • В dm_integrity добавлена поддержка операции "discard".
  • В null_blk добавлена поддержка подстановки ошибок для симуляции сбоев при проведении тестирования.
  • Добавлена возможность отправки udev-уведомлений об изменении размера блочного устройства.
Сетевая подсистема
  • В Netfilter включены изменения, значительно ускоряющие обработку больших списков сопоставления (nftables set), в которых требуется проверка сочетания подсетей, сетевых портов, протокола и MAC-адресов. Оптимизации внесены в модуль nft_set_pipapo (PIle PAcket POlicies), решающий задачу сопоставления содержимого пакета с применяемыми в правилах фильтрации произвольными диапазонами состояния полей, такими как диапазоны IP и сетевых портов (nft_set_rbtree и nft_set_hash манипулируют сопоставлением интервалов и прямым отражением значений). Векторизированная при помощи 256-разрядных инструкций AVX2 верcия pipapo на системе с процессором AMD Epyc 7402 показала прирост производительности на 420% при разборе 30 тысяч записей, включающих связки порт-протокол. Прирост при сопоставлении связки из подсети и номера порта при разборе 1000 записей составил 87% для IPv4 и 128% для IPv6.
  • Добавлен модуль bareudp, позволяющий инкапсулировать в UDP-туннель различные L3-протоколы, такие как MPLS, IP и NSH.
  • Продолжена интеграция компонентов MPTCP (MultiPath TCP), расширения протокола TCP для организации работы TCP-соединения с доставкой пакетов одновременно по нескольким маршрутам через разные сетевые интерфейсы, привязанные к разным IP-адресам.
  • Добавлена поддержка механизмов аппаратного ускорения инкапсуляции Ethernet-кадров в 802.11 (Wi-Fi).
  • При перемещении устройства из одного пространства имён сетевой подсистемы (network namespace) в другое обеспечена корректировка прав доступа и владельца соответствующих файлов в sysfs.
Виртуализация и безопасность
  • Добавлена аппаратная реализация аутентификации указателей (Pointer Authentication), использующая специализированные инструкции CPU ARM64 для защиты от атак, использующих приёмы возвратно-ориентированного программирования (ROP) при которых атакующий не пытается разместить свой код в памяти, а оперирует уже имеющимися в загруженных библиотеках кусками машинных инструкций, завершающихся инструкцией возврата управления. Защита сводится к использованию цифровых подписей для проверки адресов возврата на уровне ядра. Подпись хранится в неиспользуемых верхних битах самого указателя. В отличие от программных реализаций создание и проверка цифровых подписей производится при помощи специальных инструкций CPU.
  • Добавлена возможность защиты области памяти от записи при помощи системного вызова userfaultfd(), предназначенного для обработки page faults (обращение к невыделенным страницам памяти) в пространстве пользователя. Идея в том, чтобы использовать userfaultfd() и для отслеживания нарушения доступа к страницам, помеченным защищёнными от записи, и вызова обработчика, который может реагировать на подобные попытки записи (например, для обработки изменений в процессе создания live-снапшотов работающих процессов, фиксации состояния при сбросе дампов памяти на диск, реализации разделяемой памяти, отслеживания изменений в памяти). Функциональность эквивалентна применению mprotect() в связке с обработчиком сигнала SIGSEGV, но работает заметно быстрее.
  • В SELinux объявлен устаревшим параметр "checkreqprot", позволяющий отключить проверку защиты памяти при обработке правил (допускал использование исполняемых областей памяти, независимо от предписаний, заданных в правилах). Символическим ссылкам kernfs разрешено наследование контекста родительских каталогов.
  • В состав включён модуль KRSI, позволяющий прикреплять BPF-программы к любым LSM-хукам в ядре. Изменение позволяет создавать LSM-модули (Linux Security Module) в форме BPF-программ для решения задач аудита и мандатного контроля доступа.
  • Проведена оптимизация производительности /dev/random за счёт пакетной передачи значений CRNG вместо отдельного вызова инструкций RNG. Улучшена работа getrandom и /dev/random на системах ARM64, предоставляющих инструкции RNG.
  • Реализация эллиптической кривой Curve25519 заменена на вариант из библиотеки HACL, для которого приведено математическое доказательство формальной верификации надёжности.
  • Добавлен механизм информирования о свободных страницах памяти. При помощи данного механизма гостевые системы могут передавать хост-системе сведения о страницах, которые больше не используются, и данные страницы хост может забрать обратно.
  • В vfio/pci добавлена поддержка SR-IOV (Single-Root I/O Virtualization).
Память и системные сервисы
  • C 80 до 100 символов увеличено ограничение на максимальную длину строки в исходных текстах. При этом разработчикам по-прежнему рекомендуется держаться в границах 80 символов в строке, но это теперь не является жёстким лимитом. Кроме того, превышение лимита на размер строки теперь будет приводить к выводу предупреждения при сборке только если утилита checkpatch запущена с опцией "--strict'. Изменение даст возможность не отвлекать разработчиков на манипуляции с пробелами и более свободно чувствовать себя при выравнивании кода.
  • Добавлена поддержка смешанного режима загрузки EFI, позволяющего без применения специализированного загрузчика загрузить 64-разрядное ядро из 32-разрядной прошивки, выполняемой на 64-разрядном CPU.
  • Включена система выявления и отладки расщеплённых блокировок ("split lock"), возникающих при доступе к невыровненным данным в памяти из-за того, что при выполнении атомарной инструкции данные пересекают две линии кеша CPU. Подобные блокировки приводят к значительному падению производительности (на 1000 циклов медленнее, чем атомарная операция с данными, попадающими в одну линию кеша). В зависимости от загрузочного параметра "split_lock_detect" ядро может на лету выявлять подобные блокировки и выводить предупреждения или отправлять сигнал SIGBUS приложению, вызвавшему блокировку.
  • В планировщике задач обеспечено отслеживание показателей датчиков температуры (Thermal Pressure) и реализован учёт перегрева при размещении задач. Пользуясь выдаваемой статистикой обработчик температуры (thermal governor) может корректировать максимальную частоту CPU при перегреве, а планировщик задач теперь учитывает снижение вычислительной мощности из-за подобного урезания частоты при планировании запуска задач (раньше планировщик реагировал на изменение частоты с определённой задержкой, какое-то время принимая решения на основе завышенных предположениях о доступных вычислительных ресурсах).
  • В планировщике задач задействованы инвариантные показатели отслеживания нагрузки, позволяющие корректно оценить нагрузку, независимо от текущей частоты работы CPU. Изменение позволяет более точно прогнозировать поведение задач в условиях динамического изменения вольтажа и частоты CPU. Например, задача, которая потребляла 1/3 ресурсов CPU при частоте 1000 MHz, станет потреблять 2/3 ресурсов при снижении частоты до 500 MHz, что раньше создавало ложное предположение о работе на полную мощность (т.е. задачи для планировщика казались более крупными только за счёт снижения частоты, что приводило к принятию неверных решений в schedutil cpufreq governor).
  • Драйвер Intel P-state, отвечающий за выбор режимов производительности, переведён на использование schedutil.
  • Реализована возможность использования подсистемы BPF при работе ядра в режиме реального времени (PREEMPT_RT). Ранее при включении PREEMPT_RT предписывалось отключение BPF.
  • Добавлен новый тип BPF-программ - BPF_MODIFY_RETURN, которые могут прикрепляться к функции в ядре и изменять возвращаемое данной функцией значение.
  • Добавлена возможность использования системного вызова clone3() для создания процесса в cgroup, отличающемся от родительского cgroup, что позволяет родительскому процессу применить ограничения и включить аккаунтинг сразу после порождения нового процесса или потока. Например, сервисный менеджер может напрямую выделять новые сервисы в отдельные cgroup, а новые процессы при помещении в "замороженные" cgroup и будут сразу остановлены.
  • в Kbuild добавлена поддержка переменной окружения "LLVM=1" для переключения на инструментарий Clang/LLVM при сборке ядра. Подняты требования к версии binutils (2.23).
  • В debugfs добавлена секция /sys/kernel/debug/kunit/ с результатами тестов kunit.
  • Добавлен параметр загрузки ядра pm_debug_messages (аналог/sys/power/pm_debug_messages), включающий вывод отладочной информации о работе системы управления питанием (полезно при отладке проблем со спящим и ждущим режимом).
  • В интерфейс асинхронного ввода/вывода io_uring добавлена поддержка splice() и атомарного выбора буферов.
  • Улучшено профилирование cgroup при помощи инструментария perf. Ранее perf мог профилировать задачи только в определённом cgroup и не мог узнать к какой cgroup принадлежит текущий образец. Теперь perf получает сведения о cgroup для каждой выборки, что позволяет профилировать более одного cgroup и применять сортировку по cgroup в отчётах.
  • В cgroupfs, псевдо-ФС для управления cgroups, добавлена поддержка расширенных атрибутов (xattrs) при помощи которых, например, можно оставлять дополнительную информацию для обработчиков в пространстве пользователя.
  • В cgroup memory controller добавлена поддержка рекурсивной защиты значения "memory.low", регулирующего минимальный объём оперативной памяти, предоставленной участникам группы. При монтировании иерархии cgroup с опцией "memory_recursiveprot" значение "memory.low", которое установлено для нижних узлов, автоматически будет распределяться для всех дочерних узлов.
  • Добавлен фреймворк Uacce (Unified/User-space-access-intended Accelerator Framework) для совместного использования виртуальных адресов (SVA, Shared Virtual Addressing) между CPU и периферийными устройствами, позволяющий аппаратным ускорителям получить доступ к структурам данных в основном CPU.
Аппаратные архитектуры
  • Для архитектуры ARM реализована возможность горячего извлечения памяти.
  • Для архитектуры RISC-V добавлена поддержка горячего подключения и извлечения CPU (CPU hotplug). Для 32-разрядных RISC-V реализован eBPF JIT.
  • Убрана возможность использования 32-разрядных ARM-систем для запуска гостевых окружений KVM.
  • Удалена "фиктивная" реализация NUMA для архитектуры s390, для которой так и не найдены сценарии использования, позволяющие добиться повышения производительности.
  • Для ARM64 добавлена поддержка расширения AMU (Activity Monitors Unit), определённого в ARMv8.4 и предоставляющего счётчики производительности, которые использованы для расчёта коэффициентов коррекции масштабирования частоты в планировщике задач.
Оборудование
  • Добавлена поддержка устройств vDPA, в которых используется канал обмена данных, соответствующий спецификациям virtio. vDPA-устройства могут быть как физически подключённым оборудованием, так и эмулируемыми программно виртуальными устройствами.
  • В подсистеме GPIO появилась новая команда ioctl() для мониторинга изменений, позволяющая наладить информирование процесса об изменении состояния любой линии GPIO. В качестве примера использования новой команды предложена утилита gpio-watch.
  • В DRM-драйвере i915 для видеокарт Intel включена по умолчанию поддержки чипов Tigerlake ("Gen12") и добавлена начальная поддержка управления подсветкой OLED. Улучшена поддержка чипов Ice Lake, Elkhart Lake, Baytrail и Haswell.
  • В драйвере amdgpu добавлена возможность загрузки прошивок в чип USBC для ASIC. Улучшена поддержка чипов AMD Ryzen 4000 "Renoir". Появилась поддержка управления OLED-панелями. Обеспечено отображение состояния прошивки в debugfs.
  • В DRM-драйвер vmwgfx для систем виртуализации VMware добавлена возможность использования OpenGL 4 в гостевых системах (раннее поддерживался OpenGL 3.3).
  • Добавлен новый DRM-драйвер tidss для дисплейной системы платформы TI Keystone.
  • Добавлены драйверы для LCD-панелей: Feixin K101 IM2BA02, Samsung s6e88a0-ams452ef01, Novatek NT35510, Elida KD35T133, EDT, NewEast Optoelectronics WJFH116008A, Rocktech RK101II01D-CT, Frida FRD350H54004.
  • В систему управления питанием добавлена поддержка платформы Intel Jasper Lake (JSL) на базе Atom.
  • Добавлена поддержка ноутбука Pinebook Pro на базе Rockchip RK3399, планшета Pine64 PineTab и смартфона PinePhone на базе Allwinner A64.
  • Добавлены поддержка новых звуковых кодеков и чипов: Amlogic AIU, Amlogic T9015, Texas Instruments TLV320ADCX140, Realtek RT5682, ALC245, Broadcom BCM63XX I2S, Maxim MAX98360A, Presonus Studio 1810c, MOTU MicroBook IIc.
  • Добавлена поддержка ARM-плат и платформ Qualcomm Snapdragon 865 (SM8250), IPQ6018, NXP i.MX8M Plus, Kontron "sl28", 11 вариантов платы i.MX6 TechNexion Pico, три новых варианта Toradex Colibri, Samsung S7710 Galaxy Xcover 2 на базе ST-Ericsson u8500, DH Electronics DHCOM SoM и PDK2, Renesas M3ULCB, Hoperun HiHope, Linutronix Testbox v2, PocketBook Touch Lux 3.
Ви маєте увійти під своїм обліковим записом

loading

=koG%,HSd"ɱˎwDsI4fkg/"-n/}u|q/~Uu R( l3=Ovnl][f}q?Z&8(2f Jt\شOC\PoePA?X7| 烯wok(/_x  P#l2xJ~i+Km;x8m*[61yJ6[MOsokjLJ˵Y#bkzzVv}}ZVL}sC• [wz9dF~Kw/cV`k vNx%ھ|}jzIiO!>]Z^HCͱ[F*2*V0TĢ̱A{]3 Zg~cCYvsI1l74bPc4g>u74D/,3 ?a).5kѢ qi+$ӁpVrYi9n`Us= W #ݮih):=I2|kJ X"UTYiCBA-1 SPhMǕ꾲N_F"L.u~,Q!x+-QaQϱx9VZ9g`2X96l} EOvMu(U:e.0F30LQY) L*k*i\FkJj\]qr ХbV ^X櫫rAU,Ta5 I˭bQ_ͪ^ zZ\oczQ(*25-_\/i|YgH4Z&i{z6+DoU򤪭RI/5,Uȱ\u4M+y]+ZUZ/k:CG0ūEZ\]רo餹FKy/ z)Oh`M/lVjQr\_' )j1Ozg#dR"rTlz.jIKRҪiPlhSa$];W A1bXh +-rr]*~ İ ZfVMtj]$xA:me 9}1MT*Y%#jYZ&pT>j\zgWÇg /`s<ſO~2j)T~>x*DӀ,G_S->P[70amBHGSg66y(vQhEeRsi; j}ӰIi@^2WW*`璵VTֵBuU+je\\,a%08L2C :G )ur,SfaRv`mwߊDL_ozGU,$_\`O{>,pª+(e+kx FXah&QC`L~Cp*)6Ue_ +?~nz˛FHQZ K,8I6Ύ1f8eňed0! |G (J0 ŘgCVe-]\̦7 ,gujgeynM 11ϗiJ7KZzݓn~75b6bK׎ݿvr_Jn{?{#w_ kJ5 ?c6+@LtAMKm ,SK]p$$n1;2q+[7PqL].HT6PQ6WAf!C5XfJЭ/!)&X`!AbPSv(ky$]p&`] >4A #>|7p  ? J&,ppB}(X;cs4o`txazzL3IbϸjW-p]xP:T;j:'"0Ėo3mG&VZM6 qe !c ) Lа;DQ0.B&1؃mg>/+2iߠ!3x 4Gѩ?>as3DOB}&;wh011D`J=BHUSNRP1A/)#;[̹4-gu4~QDF3x(,3pkXt I%gPhnSBcV%G7-\a w rhq1:`$c R4Fk@`r=auSis%v8DϫaB5 ZDGe5@'P)z :7̐FBtOMEwEM֔ݮ~".0(=[3߁|XAE\r8I%Tpdqai4rNmӯB!#u6@Brh=cفW n6HUXbѕC~KtGo6PmL~'A"'%8\c=W 6_R/ :'H.]҃۬>vMjWϸEb֎na|||1 ƼC"̄a3;:^#qjF &%ƲIg)""yo.Kdlo#6(% 0pLP::(2|{>D 0AE'~-#<rՌCY4 q;E:;XF -cn4mmh\>FB\bTKC@B(2mԨWlo|g%?ߴsjbsYO5/g>KR8Dr.1)HsoX|z2cLO-<d&"HT<~=0"}>jGs?zwiUD3'֎Rw!*W,=e:!6\g ^YxaSS鿐6,K:KO/R3Sj+M(eƭǓYNuY4WΟf imxU |ͶVa~BB}q$6 JM(p0#t~t.12k;)2Jl@2ItNdFBTxZ=^&nxXfTSŽlz82"F A-YTJKBǸ_ԟ]OlpͣYñDJ h߂yht*Y|³8  _@u?/Ncͭ8e<ƌx~Jauk͠y]k2It9 K8)VuK{1T]M&H27N:Qh&a&+|/0#YLM |WuƠzDИ%)@ ȣ`j"AV.SrPVKl]n60{SM5ƶi ;1ӥ3(08'-. 'M¢81 w\zB6߆dt% b!W\ѽlCbO;٧<-&=0|F|mw9/0`ǹ1G`v3{g?Sk~Gh_B{}$l?YM.Op 5{;3Q&[[*x/+M'6- `o.%VfVk䂎Ŧ=RPYGВ'Yh';˓lgNͱ+ԭ*OS¸ ДS0=?c̋9/pb%aD)m+ ]a6J=h~* "-Sr5fF*$Kg.NjDdié1p:,.^Z<MǓm1le}QrYh@:">})_dLZ'd%\h (l<|lC 3NwC9BKH̅T) -,[g6kiϿv)%Qy-ab0Zyᔓsn\W:Pazְނ2W U"8p(>;i4MbeF8 lƞГa{>iĊ avgQyzs=X|jҹV6 v^G3h\[̆<: 8U21+7񈧗.D@b msX65Sg*Ok *=_'Mn^Nh` Z|rѾrq;^oRIUᬀfs(Ï˛ ?g菇Ii9MR$  /<v4t`kYS[|9S3 ?@[w8(zk cWD72Q_*:gnl嘦ӛ.=PccOg-rG@?pd1GlH[.Hxw0B X 9),F93gv\wFlk= vM <  쑕/&I ')rc(ֶcYmkkia%fȩNTW}eպIY.jH!ii 4qxp;3 0RCM*/.E)ml"~s%6+#0FGr:av[Eޜ SC~wbaũIޤSl+q9)N_X' 5*o?2N(OC Ili%G+D~'ɘb!79ßB!:?)Ft&MƯ jQ 9Ť,{HkҰ~³d_H3I2j|5rĻQ\7jS$;8`.FQ3v!Noou1폟Qw9ʼnuّUNTJ̜( pc$EȤqiR?g8?G ve4|Xx.0F)b,Ha'`ۥħ+uD9 g.ۏQ$7 cW rxfy4|Ӈe4״ fcKDŽQ6RS; //p>~swg[׶vonݾ ƧN{5 q rR>8P.9ΑA]w6LxrR10qR?xp0a`]oCy'K09d.e 8}pl+c=m_H_W{73LCpT߳vAq9HA"A>VIoSb[F1|T3ﲱWwѾskh%^ .<'5I<ǟg)Uq̡sNK43|d0Bq/ۚT^-y==%s]Ɠx*cuAW^>+穽 %+}]ӥl7mj` ~;F:'*gb=o5:-҅crjdkڻO;敟_٦^aޝ5뷯wU#~m͠ _y{;:u;uWO'{[|͟g:!wqo}r΍Cy^~v>-\;<{ƛ̥&3@=b\P0H zGyS %z ]Pl(k<ǰ/o̞*٫~yuܦf_:ʧ;yE8Q{Xz aҏ K ./9rG,I1̰>-NX*bTKpIQ{G=+rV@x鍃חԌ,+geet0 BO`t5y^햗%x#KLPd A,ǰgW//AY;#ľfq!Zh@8MPx E\8h̍k