Suicide
16.09.2019, 19:16
После двух месяцев разработки Линус Торвальдс представил (https://lkml.org/lkml/2019/9/15/241) релиз ядра Linux 5.3 (https://www.kernel.org/). Среди наиболее заметных изменений: поддержка GPU AMD Navi, процессоров Zhaoxi и технологии управления энергопотреблением Intel Speed Select, возможность использования инструкций umwait для ожидания без использования циклов, повышающий интерактивность режим 'utilization clamping' для асимметричных CPU, системный вызов pidfd_open, возможность использования IPv4-адресов из подсети 0.0.0.0/8, возможность аппаратного ускорения nftables, поддержка HDR в подсистеме DRM, интеграция гипервизора ACRN.
В анонсе (https://lkml.org/lkml/2019/9/15/2) нового выпуска Линус напомнил всем разработчикам о главном правиле разработки ядра - сохранение неизменности поведения для компонентов пространства пользователя. Изменения в ядре никаким образом не должны нарушать уже работающие приложения и приводить к регрессиям на пользовательском уровне. При этом нарушение поведения может вызвать не только изменение ABI, удаление устаревшего кода или появление ошибок, но и косвенное влияние корректно работающих полезных улучшений. В качестве наглядного примера была отброшена (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=72dbcf72156641fde4d8ea401e977341bfd35a05) полезная оптимизация (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b03755ad6f33b7b8cd7312a3596a2dbf496de6e7) в коде Ext4, сокращающая число обращений к накопителю за счёт отключения упреждающего чтение таблицы inode при мелких запросах ввода/вывода.
Оптимизация привела к тому, что из-за снижения дисковой активности энтропия для генератора случайных чисел getrandom() стала накапливаться медленнее и в некоторых конфигурациях при определённом стечении обстоятельств могли наблюдаться подвисания во время загрузки до заполнения пула энтропии. Так как оптимизация действительно полезная, среди разработчиков возникла дискуссия, в которой предлагалось устранить проблему за счёт отключения по умолчанию блокирующего режима работы вызова getrandom() с добавлением опционального флага для ожидания энтропии, но подобное изменение повлияет на качество случайных чисел на начальном этапе загрузки.
В новую версию принято 15794 исправлений от 1974 разработчиков, размер патча - 92 Мб (изменения затронули 13986 файлов, добавлено 258419 строк кода, удалено 599137 строк). Около 39% всех представленных в 5.3 изменений связаны с драйверами устройств, примерно 12% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 11% связано с сетевым стеком, 3% - файловыми системами и 3% c внутренними подсистемами ядра.
Основные (https://kernelnewbies.org/Linux_5.3) новшества (https://lwn.net/Articles/793629/):
Память и системные сервисы
Продолжено развитие функциональности 'pidfd', помогающей обрабатывать ситуации с повторным использованием PID (pidfd связывается с конкретным процессом и не меняется, в том время как PID может быть привязан к другому процессу после завершения текущего процесса, ассоциированного с этим PID). Ранее в ядро уже был добавлен системный вызов pidfd_send_signal() и флаг CLONE_PIDFD в вызове clone(), позволяющий получить pidfd для использования в idfd_send_signal(). При использовании вызова clone() с флагом CLONE_PIDFD могли возникать проблемы с сервисными менеджерами или системой принудительного завершения процессов при нехватке памяти в платформе Android. В этом случае для запуска используется вызов fork() или clone() без CLONE_PIDFD.
В ядре 5.3 представлен системный вызов pidfd_open() (https://lwn.net/Articles/789023/), позволяющий получить проверяемый pidfd для произвольного существующего процесса, созданного не через вызов clone() с флагом CLONE_PIDFD. Также добавлена поддержка поллинга pidfd при помощи poll() и epoll(), что позволяет в менеджерах процессов отслеживать завершения произвольных процессов, не опасаясь состояния гонки в случае присвоения PID новому процессу. Механизм уведомления о завершении работы процесса, связанного с pidfd, аналогичен информированию о завершении своего дочернего процесса;
В планировщик задач добавлена поддержка механизма закрепления нагрузки (Utilization clamping (https://lwn.net/Articles/762043/)), позволяющего придерживаться минимального или максимального диапазонов частот, в зависимости от активных на CPU задач. Представленный механизм ускоряет задачи, которые напрямую влияют на качество взаимодействия с пользователем, через запуск этих задач как минимум в нижней границе "запрошенной" частоты. Низкоприоритетные задачи, не сказывающиеся на работе пользователя, запускаются c использованием верхнего лимита "разрешённой" частоты. Лимиты задаются через атрибуты sched_uclamp_util_min и sched_uclamp_util_max в системном вызове sched_setattr().
Добавлена поддержка технологии управления энергопотреблением Intel Speed Select (https://www.intel.com/content/www/us/en/architecture-and-technology/speed-select-technology-article.html), доступной на некоторых серверах с процессорами Intel Xeon. Указанная технология позволяет устанавливать настройки производительности и пропускной способности разделов для разных ядер CPU, что позволяет сделать более приоритетной производительность для задач, выполняемых на определённых ядрах, жертвуя производительностью на других ядрах;
Процессам в пространстве пользователя предоставлена (https://lwn.net/Articles/790920/) возможность ожидания в течение небольшого времени без использования циклов при помощи инструкции umwait. Данная инструкция, вместе с инструкциями umonitor и tpause, будет предложена в готовящихся к выпуску чипах Intel "Tremont", и позволит реализовывать задержки, эффективные с точки зрения энергопотребления и не влияющие на производительность других потоков при использовании Hyper Threading;
Для архитектуры RISC-V добавлена поддержка больших страниц памяти (huge pages);
В механизм трассировки "kprobes" добавлена возможность разыменования указателей ядра в пространство пользователя, что может применяться, например, для оценки содержимого структур, передаваемых в системные вызовы. Также добавлена возможность установки проверок на этапе загрузки.
В файл конфигурации добавлена опция PREEMPT_RT для работы в режиме реального времени. Сам код для поддержки режима реального времени пока не добавлен в ядро, но появление опции является хорошим знаком, что многолетняя эпопея по интеграции (https://www.opennet.ru/opennews/art.shtml?num=43094) патчей Realtime-Preempt близится к финалу;
Добавлен системный вызов clone3() c реализацией более расширяемого варианта интерфейса clone(), допускающего указание большего числа флагов;
Добавлен обработчик bpf_send_signal(), позволяющий BPF-программам отправлять сигналы произвольным процессам;
Для событий perf в окружении гипервизора KVM добавлен новый механизм фильтрации событий, позволяющий администратору определить типы событий, допустимые или не допустимые для мониторинга на стороне гостевой системы;
В механизм верификации eBPF-приложений добавлена возможность обработки программ с циклами, если выполнение цикла ограничено и не может привести к превышению лимита на максимальное число инструкций;
Дисковая подсистема, ввод/вывод и файловые системы
Для файловой системы XFS реализована возможность многопоточного обхода inode (например, при проверке квот). Добавлены новые ioctl BULKSTAT и INUMBERS, предоставляющие доступ к возможностям, появившимся в пятой редакции формата ФС, таким как время рождения inode и возможность задания параметров BULKSTAT и INUMBERS для каждой группы AG (Allocation Groups);
В Ext4 добавлена поддержка (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4e19d6b65fb4fc42e352ce9883649e049da14743) пустот в каталогах (не привязанных блоков). Обеспечена обработка (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=02b016ca7f99229ae6227e7b2fc950c4e140d74a) флага "i" (immutable) для открытых файлов (запрет записи в ситуации, если флаг был установлен в момент, когда файл уже был открыт);
В Btrfs обеспечено определение быстрой реализации crc32c на всех архитектурах;
В CIFS с кода для поддержки smbdirect снят признак экспериментальной разработки. В SMB3 добавлена возможность использования криптоалгоритмов в режиме GCM. Добавлена новая опция монтирования для извлечения параметров режима из записей ACE (Access Сontrol Entry). Оптимизирована производительность вызова open();
В F2FS добавлена опция для ограничения сборщика мусора при работе в режиме checkpoint=disable. Добавлен ioctl для удаления диапазонов блоков из F2FS, что позволяет реализовать корректировку размера раздела на лету. Добавлена возможность размещения в F2FS файла подкачки с обеспечением прямого ввода/вывода. Для всех пользователей добавлена поддержка закрепления файла и выделения блоков для подобных файлов;
В интерфейс для асинхронного ввода/вывода io_uring добавлена поддержка асинхронных операций sendmsg() и recvmsg();
В файловую систему UBIFS добавлена поддержка сжатия с использованием алгоритма zstd и возможность верификации подписанных образов ФС;
В ФС Ceph добавлена поддержка меток безопасности SELinux для файлов;
Для NFSv4 реализована новая опция монтировния "nconnect=", определяющая число установленных с сервером соединений. Трафик между этими соединениями будет распределяться с использованием балансировки нагрузки. Кроме того, сервером NFSv4 теперь создаётся каталог /proc/fs/nfsd/clients с информацией о текущих клиентах, включая сведения об открытых ими файлах;
Виртуализация и безопасность
В состав ядра включён гипервизор для встраиваемых устройств ACRN (https://www.opennet.ru/opennews/art.shtml?num=51399), который написан с оглядкой на готовность для выполнения задач реального времени и пригодность к использованию в критически важных системах. ACRN обеспечивает минимальные накладные расходы, гарантирует низкие задержки (low latency) и адекватную отзывчивость при взаимодействии с оборудованием. Поддерживается виртуализация ресурсов CPU, ввода/вывода, сетевой подсистемы, операций с графикой и звуком. ACRN может применяться для запуска нескольких изолированных виртуальных машин в электронных блоках управления, приборных панелях, автомобильных информационных системах, потребительских IoT-устройств и другой встраиваемой техники;
В User-mode Linux добавлен (https://git.kernel.org/linus/065038706f77) режим "путешествия во времени", позволяющий замедлить или ускорить время в виртуальном окружении UML для упрощения отладки связанного со временем кода. Кроме того добавлен параметр time-travel-start, позволяющий стартовать системные часы с указанного момента в epoch-формате;
Добавлены новые опции командной строки ядра "init_on_alloc" и "init_on_free", при указании которых включается обнуление выделяемых и освобождаемых областей памяти (заполнение нулями при malloc и free), что позволяет усилить безопасность за счёт дополнительных накладных расходов на инициализацию;
Добавлен новый драйвер virtio-iommu (https://git.kernel.org/linus/edcd69ab9a323b7ac7a86e1c44b6c9c46598391f) с реализацией паравиртализированного устройства, позволяющего отправлять IOMMU-запросы, такие как ATTACH, DETACH, MAP и UNMAP, поверх транспорта virtio без эмуляции таблиц страниц памяти;
Добавлен новый драйвер virtio-pmem (https://git.kernel.org/linus/6e84200c0a2994b991259d19450eee561029bf70), представляющий доступ к устройствам хранения, отражённым в физическое адресное пространство, таким как NVDIMM;
Реализована возможность прикрепления криптографических ключей к пользовательскому или сетевому пространству имён (ключи становятся недоступны за пределами выбранного пространства имён), а также защиты ключей при помощи ACL;
В криптоподсистему добавлена (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=67882e76492483bafa9b1b1648bb031e9abe5185) поддержка очень быстрого алгоритма некриптографичекого хэширования xxhash (https://github.com/Cyan4973/xxHash), скорость которого упирается в производительность памяти;
Сетевая подсистема
Обеспечена обработка адресов IPv4 в диапазоне 0.0.0.0/8, который ранее был недоступен для использования. Введение данной подсети позволит (https://github.com/dtaht/unicast-extensions) распределить ещё 16 млн адресов IPv4;
В Netfilter для nftables добавлена (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c9626a2cbdb20e26587b3fad99960520a023432b) поддержка механизмов аппаратного ускорения фильтрации пакетов за счёт применения добавленного в драйверы Flow Block API (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=da3eeb904ff432ec22cf7b4db17a47647428873a). На сторону сетевых адаптеров могут выноситься целые таблицы правил со всеми цепочками. Включение производится через привязку флага NFT_TABLE_F_HW к таблице. Поддерживаются простые метаданные протоколов 3 и 4 уровней, действия принять/отбросить, сопоставления по IP и сетевым портам отправителя/получателя и типу протокола;
Добавлена (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=3c171f496ef57774f8e5d509923372549734877f) встроенная поддержка отслеживания соединений для сетевых мостов, не требующая применения эмулирующей прослойки br_netfilter;
В nf_tables добавлена (https://git.kernel.org/linus/ad49d86e07a497e834cb06f2b151dccd75f8e148) поддержка модуля SYNPROXY, повторяющего аналогичную функциональность из iptables, а также реализована возможность проверки в правилах по отдельным опциям в заголовке IPv4;
Добавлена возможность прикрепления BPF-программ к системным вызовам setsockopt() и getsockopt(), что, например, позволяет прикрепить свои обработчики доступа к этим вызовам. Кроме того, добавлена новая точка вызова (hook), при помощи которой можно организовать вызов BPF-программы один раз за каждый интервал RTT (round-trip-time, время пинга);
Для IPv4 и IPv6 добавлен (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ab84be7e54fc3d9b248285f1a14067558d858819) новый механизм хранения данных маршрутизации nexthop, нацеленный на увеличение масштабируемости таблиц маршрутизации. Проведённые тесты показали, что при использовании новой системы набор в 743 тысяч маршрутов был загружен в ядро всего за 4.3 секунды;
Для Bluetooth реализована (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=302975cba1a4244d84e645773c82edbcfae1875f) функциональность, необходимая для поддержки LE ping;
Оборудование
Добавлена (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=761fdd5e3327db6c646a09bab5ad48cd42680cd2) поддержка x86-совместимых процессоров компании Zhaoxin (https://ru.wikipedia.org/wiki/Zhaoxin), развиваемых в результате совместного проекта VIA Technologies и муниципалитета Шанхая. Семейство CPU ZX построено на базе архитектуры x86-64 Isaiah, продолжающей развитие технологий VIA Centaur (https://en.wikipedia.org/wiki/Centaur_Technology);
В подсистему DRM (Direct Rendering Manager), а также в графические драйверы amdgpu и i915, добавлена поддержка разбора, обработки и отправка через HDMI-порт метаданных HDR (расширенный динамический диапазон), позволяющего использовать HDR-панели и экраны, способные отображать дополнительные диапазоны яркости;
В драйвер amdgpu добавлена начальная поддержка GPU AMD NAVI (RX5700), которая включает базовый драйвер, код для взаимодействия с экранами (DCN2), поддержку GFX и вычислений (GFX10), SDMA 5 (System DMA0), средства управления питанием и мультимедийные кодировщики/декодировщики (VCN2). В amdgpu также улучшена поддержка карт на базе GPU Vega12 и Vega20, для которых добавлены дополнительные возможности управления памятью и энергопотреблением;
В драйвер amdkfd (для дискретных GPU, такие как Fiji, Tonga, Polaris) добавлена поддержка карт на базе GPU VegaM;
В DRM-драйвере для видеокарт Intel для чипов Icelake реализован (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=02ae8ba9664081a74cafe6662e64b3d7b8b292e6) новый мультисегментный режим гамма-коррекции. Добавлена возможность вывода через DisplayPort в формате YCbCr4:2:0. Добавлены новые прошивки GuC (https://01.org/linuxgraphics/downloads/firmware) для SKL, BXT, KBL, GLK и ICL. Реализована возможность отключения питания экрана в асинхронном режиме. Добавлена (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=1215d28e722ce27172de7708ead6824fcfb19364) поддержка сохранения и восстановления контекста рендеринга для чипов Ironlake (gen5) и gen4 (Broadwater - Cantiga), что позволяет из пространства пользователя восстанавливать состояние GPU при перехода от выполнения одних пакетных операций к другим;
В драйвере Nouveau обеспечено определение чипсета NVIDIA Turing TU116;
Расширены возможности DRM/KMS-драйвера для ускорителей экранных операций ARM Komeda (Mali D71), добавлена поддержка масштабирования, разделения/слияния слоёв, поворота, отложенной записи, AFBC, SMMU и форматов кодирования цвета Y0L2, P010, YUV420_8/10BIT;
В драйвер MSM добавлена поддержка серии A540 GPU Adreno, применяемой в процессорах Qualcomm, а также поддержка DSI-контроллера MSM8998 для Snapdragon 835;
Добавлены драйверы для LCD-панелей Samsung S6E63M0, Armadeus ST0700, EDT ETM0430G0DH6, OSD101T2045-53TS, Evervision VGG804821, FriendlyELEC HD702E, KOE tx14d24vm1bpa, TFC S9700RTWV43TR-01B, EDT ET035012DM6 и VXT VL050-8048NT-C01;
Добавлен (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=3e7f51bd96077acad6acd7b45668f65b44233c4e) драйвер для задействования средств ускорения декодирования видео, доступных в SoC Amlogic Meson;
В драйвере v3d (для GPU Broadcom Video Core V, используемого в Raspberry Pi) появилась поддержка (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d223f98f02099b002903b9b22b56febae16ef80d) диспетчеризации вычислительных шейдеров;
Добавлен (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=038b1a05eae6666b731920e46f47d8e2332e07ff) драйвер для SPI-клавиатур и трекпадов, применяемых в современных моделях ноутбуков Apple MacBook и MacBookPro;
Добавлена (https://github.com/torvalds/linux/commit/47d6a7607443ea43dbc4d0f371bf773540a8f8f4) дополнительная защита ioctl-вызовов, связанных с драйвером floppy, а сам драйвер помечен как оставленный без сопровождения ("orphaned"), что подразумевает прекращение его тестирования. Драйвер пока сохраняется в ядре, но его корректная работа не гарантируется. Драйвер рассматривается как устаревший, так как для его тестирования трудно найти работающее оборудование - все актуальные внешние накопители, как правило, используют интерфейс USB.
Добавлен (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d3df18a97e586702920337056540267807b23f8e) cpufreq-драйвер для плат Raspberry Pi, позволяющий динамически управлять изменением частоты процессора;
Добавлена поддержка новых ARM SoC Mediatek mt8183 (4x Cortex-A73 + 4x Cortex-A53), TI J721E (2x Cortex-A72 + 3x Cortex-R5F + 3 DSPs + MMA) и Amlogic G12B (4x Cortex-A73 + 2x Cortex-A53), а также плат:
Purism Librem5 (https://www.opennet.ru/opennews/art.shtml?num=51436),
Aspeed BMC,
Microsoft Olympus BMC,
Kontron SMARC,
Novtech Meerkat96 (i.MX7),
ST Micro Avenger96,
Google Cheza (Qualcomm SDM845),
Qualcomm Dragonboard 845c (Qualcomm SDM845),
Hugsun X99 TV Box (Rockchip RK3399),
Khadas Edge/Edge-V/Captain (Rockchip RK3399),
HiHope RZ/G2M,
NXP LS1021A-TSN.
Одновременно Латиноамериканский Фонд свободного ПО сформировал (http://www.fsfla.org/ikiwiki/selibre/linux-libre/) вариант полностью свободного ядра 5.3 (http://www.fsfla.org/ikiwiki/selibre/linux-libre/) - Linux-libre 5.3-gnu (http://linux-libre.fsfla.org/pub/linux-libre/releases/5.3-gnu/), очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В новом выпуске отключена загрузка блобов в драйверах qcom, hdcp drm, allegro-dvt и meson-vdec. Обновлён код чистки блобов в драйверах и подсистемах amdgpu, i915, netx, r8169, brcmfmac, rtl8188eu, adreno, si2157, pvrusb2, touchscreen_dmi, звуковом драйвере для skylake, а также в документации к микрокоду.
16.09.2019
http://www.opennet.ru/opennews/art.shtml?num=51447
В анонсе (https://lkml.org/lkml/2019/9/15/2) нового выпуска Линус напомнил всем разработчикам о главном правиле разработки ядра - сохранение неизменности поведения для компонентов пространства пользователя. Изменения в ядре никаким образом не должны нарушать уже работающие приложения и приводить к регрессиям на пользовательском уровне. При этом нарушение поведения может вызвать не только изменение ABI, удаление устаревшего кода или появление ошибок, но и косвенное влияние корректно работающих полезных улучшений. В качестве наглядного примера была отброшена (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=72dbcf72156641fde4d8ea401e977341bfd35a05) полезная оптимизация (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=b03755ad6f33b7b8cd7312a3596a2dbf496de6e7) в коде Ext4, сокращающая число обращений к накопителю за счёт отключения упреждающего чтение таблицы inode при мелких запросах ввода/вывода.
Оптимизация привела к тому, что из-за снижения дисковой активности энтропия для генератора случайных чисел getrandom() стала накапливаться медленнее и в некоторых конфигурациях при определённом стечении обстоятельств могли наблюдаться подвисания во время загрузки до заполнения пула энтропии. Так как оптимизация действительно полезная, среди разработчиков возникла дискуссия, в которой предлагалось устранить проблему за счёт отключения по умолчанию блокирующего режима работы вызова getrandom() с добавлением опционального флага для ожидания энтропии, но подобное изменение повлияет на качество случайных чисел на начальном этапе загрузки.
В новую версию принято 15794 исправлений от 1974 разработчиков, размер патча - 92 Мб (изменения затронули 13986 файлов, добавлено 258419 строк кода, удалено 599137 строк). Около 39% всех представленных в 5.3 изменений связаны с драйверами устройств, примерно 12% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 11% связано с сетевым стеком, 3% - файловыми системами и 3% c внутренними подсистемами ядра.
Основные (https://kernelnewbies.org/Linux_5.3) новшества (https://lwn.net/Articles/793629/):
Память и системные сервисы
Продолжено развитие функциональности 'pidfd', помогающей обрабатывать ситуации с повторным использованием PID (pidfd связывается с конкретным процессом и не меняется, в том время как PID может быть привязан к другому процессу после завершения текущего процесса, ассоциированного с этим PID). Ранее в ядро уже был добавлен системный вызов pidfd_send_signal() и флаг CLONE_PIDFD в вызове clone(), позволяющий получить pidfd для использования в idfd_send_signal(). При использовании вызова clone() с флагом CLONE_PIDFD могли возникать проблемы с сервисными менеджерами или системой принудительного завершения процессов при нехватке памяти в платформе Android. В этом случае для запуска используется вызов fork() или clone() без CLONE_PIDFD.
В ядре 5.3 представлен системный вызов pidfd_open() (https://lwn.net/Articles/789023/), позволяющий получить проверяемый pidfd для произвольного существующего процесса, созданного не через вызов clone() с флагом CLONE_PIDFD. Также добавлена поддержка поллинга pidfd при помощи poll() и epoll(), что позволяет в менеджерах процессов отслеживать завершения произвольных процессов, не опасаясь состояния гонки в случае присвоения PID новому процессу. Механизм уведомления о завершении работы процесса, связанного с pidfd, аналогичен информированию о завершении своего дочернего процесса;
В планировщик задач добавлена поддержка механизма закрепления нагрузки (Utilization clamping (https://lwn.net/Articles/762043/)), позволяющего придерживаться минимального или максимального диапазонов частот, в зависимости от активных на CPU задач. Представленный механизм ускоряет задачи, которые напрямую влияют на качество взаимодействия с пользователем, через запуск этих задач как минимум в нижней границе "запрошенной" частоты. Низкоприоритетные задачи, не сказывающиеся на работе пользователя, запускаются c использованием верхнего лимита "разрешённой" частоты. Лимиты задаются через атрибуты sched_uclamp_util_min и sched_uclamp_util_max в системном вызове sched_setattr().
Добавлена поддержка технологии управления энергопотреблением Intel Speed Select (https://www.intel.com/content/www/us/en/architecture-and-technology/speed-select-technology-article.html), доступной на некоторых серверах с процессорами Intel Xeon. Указанная технология позволяет устанавливать настройки производительности и пропускной способности разделов для разных ядер CPU, что позволяет сделать более приоритетной производительность для задач, выполняемых на определённых ядрах, жертвуя производительностью на других ядрах;
Процессам в пространстве пользователя предоставлена (https://lwn.net/Articles/790920/) возможность ожидания в течение небольшого времени без использования циклов при помощи инструкции umwait. Данная инструкция, вместе с инструкциями umonitor и tpause, будет предложена в готовящихся к выпуску чипах Intel "Tremont", и позволит реализовывать задержки, эффективные с точки зрения энергопотребления и не влияющие на производительность других потоков при использовании Hyper Threading;
Для архитектуры RISC-V добавлена поддержка больших страниц памяти (huge pages);
В механизм трассировки "kprobes" добавлена возможность разыменования указателей ядра в пространство пользователя, что может применяться, например, для оценки содержимого структур, передаваемых в системные вызовы. Также добавлена возможность установки проверок на этапе загрузки.
В файл конфигурации добавлена опция PREEMPT_RT для работы в режиме реального времени. Сам код для поддержки режима реального времени пока не добавлен в ядро, но появление опции является хорошим знаком, что многолетняя эпопея по интеграции (https://www.opennet.ru/opennews/art.shtml?num=43094) патчей Realtime-Preempt близится к финалу;
Добавлен системный вызов clone3() c реализацией более расширяемого варианта интерфейса clone(), допускающего указание большего числа флагов;
Добавлен обработчик bpf_send_signal(), позволяющий BPF-программам отправлять сигналы произвольным процессам;
Для событий perf в окружении гипервизора KVM добавлен новый механизм фильтрации событий, позволяющий администратору определить типы событий, допустимые или не допустимые для мониторинга на стороне гостевой системы;
В механизм верификации eBPF-приложений добавлена возможность обработки программ с циклами, если выполнение цикла ограничено и не может привести к превышению лимита на максимальное число инструкций;
Дисковая подсистема, ввод/вывод и файловые системы
Для файловой системы XFS реализована возможность многопоточного обхода inode (например, при проверке квот). Добавлены новые ioctl BULKSTAT и INUMBERS, предоставляющие доступ к возможностям, появившимся в пятой редакции формата ФС, таким как время рождения inode и возможность задания параметров BULKSTAT и INUMBERS для каждой группы AG (Allocation Groups);
В Ext4 добавлена поддержка (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=4e19d6b65fb4fc42e352ce9883649e049da14743) пустот в каталогах (не привязанных блоков). Обеспечена обработка (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=02b016ca7f99229ae6227e7b2fc950c4e140d74a) флага "i" (immutable) для открытых файлов (запрет записи в ситуации, если флаг был установлен в момент, когда файл уже был открыт);
В Btrfs обеспечено определение быстрой реализации crc32c на всех архитектурах;
В CIFS с кода для поддержки smbdirect снят признак экспериментальной разработки. В SMB3 добавлена возможность использования криптоалгоритмов в режиме GCM. Добавлена новая опция монтирования для извлечения параметров режима из записей ACE (Access Сontrol Entry). Оптимизирована производительность вызова open();
В F2FS добавлена опция для ограничения сборщика мусора при работе в режиме checkpoint=disable. Добавлен ioctl для удаления диапазонов блоков из F2FS, что позволяет реализовать корректировку размера раздела на лету. Добавлена возможность размещения в F2FS файла подкачки с обеспечением прямого ввода/вывода. Для всех пользователей добавлена поддержка закрепления файла и выделения блоков для подобных файлов;
В интерфейс для асинхронного ввода/вывода io_uring добавлена поддержка асинхронных операций sendmsg() и recvmsg();
В файловую систему UBIFS добавлена поддержка сжатия с использованием алгоритма zstd и возможность верификации подписанных образов ФС;
В ФС Ceph добавлена поддержка меток безопасности SELinux для файлов;
Для NFSv4 реализована новая опция монтировния "nconnect=", определяющая число установленных с сервером соединений. Трафик между этими соединениями будет распределяться с использованием балансировки нагрузки. Кроме того, сервером NFSv4 теперь создаётся каталог /proc/fs/nfsd/clients с информацией о текущих клиентах, включая сведения об открытых ими файлах;
Виртуализация и безопасность
В состав ядра включён гипервизор для встраиваемых устройств ACRN (https://www.opennet.ru/opennews/art.shtml?num=51399), который написан с оглядкой на готовность для выполнения задач реального времени и пригодность к использованию в критически важных системах. ACRN обеспечивает минимальные накладные расходы, гарантирует низкие задержки (low latency) и адекватную отзывчивость при взаимодействии с оборудованием. Поддерживается виртуализация ресурсов CPU, ввода/вывода, сетевой подсистемы, операций с графикой и звуком. ACRN может применяться для запуска нескольких изолированных виртуальных машин в электронных блоках управления, приборных панелях, автомобильных информационных системах, потребительских IoT-устройств и другой встраиваемой техники;
В User-mode Linux добавлен (https://git.kernel.org/linus/065038706f77) режим "путешествия во времени", позволяющий замедлить или ускорить время в виртуальном окружении UML для упрощения отладки связанного со временем кода. Кроме того добавлен параметр time-travel-start, позволяющий стартовать системные часы с указанного момента в epoch-формате;
Добавлены новые опции командной строки ядра "init_on_alloc" и "init_on_free", при указании которых включается обнуление выделяемых и освобождаемых областей памяти (заполнение нулями при malloc и free), что позволяет усилить безопасность за счёт дополнительных накладных расходов на инициализацию;
Добавлен новый драйвер virtio-iommu (https://git.kernel.org/linus/edcd69ab9a323b7ac7a86e1c44b6c9c46598391f) с реализацией паравиртализированного устройства, позволяющего отправлять IOMMU-запросы, такие как ATTACH, DETACH, MAP и UNMAP, поверх транспорта virtio без эмуляции таблиц страниц памяти;
Добавлен новый драйвер virtio-pmem (https://git.kernel.org/linus/6e84200c0a2994b991259d19450eee561029bf70), представляющий доступ к устройствам хранения, отражённым в физическое адресное пространство, таким как NVDIMM;
Реализована возможность прикрепления криптографических ключей к пользовательскому или сетевому пространству имён (ключи становятся недоступны за пределами выбранного пространства имён), а также защиты ключей при помощи ACL;
В криптоподсистему добавлена (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=67882e76492483bafa9b1b1648bb031e9abe5185) поддержка очень быстрого алгоритма некриптографичекого хэширования xxhash (https://github.com/Cyan4973/xxHash), скорость которого упирается в производительность памяти;
Сетевая подсистема
Обеспечена обработка адресов IPv4 в диапазоне 0.0.0.0/8, который ранее был недоступен для использования. Введение данной подсети позволит (https://github.com/dtaht/unicast-extensions) распределить ещё 16 млн адресов IPv4;
В Netfilter для nftables добавлена (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c9626a2cbdb20e26587b3fad99960520a023432b) поддержка механизмов аппаратного ускорения фильтрации пакетов за счёт применения добавленного в драйверы Flow Block API (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=da3eeb904ff432ec22cf7b4db17a47647428873a). На сторону сетевых адаптеров могут выноситься целые таблицы правил со всеми цепочками. Включение производится через привязку флага NFT_TABLE_F_HW к таблице. Поддерживаются простые метаданные протоколов 3 и 4 уровней, действия принять/отбросить, сопоставления по IP и сетевым портам отправителя/получателя и типу протокола;
Добавлена (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=3c171f496ef57774f8e5d509923372549734877f) встроенная поддержка отслеживания соединений для сетевых мостов, не требующая применения эмулирующей прослойки br_netfilter;
В nf_tables добавлена (https://git.kernel.org/linus/ad49d86e07a497e834cb06f2b151dccd75f8e148) поддержка модуля SYNPROXY, повторяющего аналогичную функциональность из iptables, а также реализована возможность проверки в правилах по отдельным опциям в заголовке IPv4;
Добавлена возможность прикрепления BPF-программ к системным вызовам setsockopt() и getsockopt(), что, например, позволяет прикрепить свои обработчики доступа к этим вызовам. Кроме того, добавлена новая точка вызова (hook), при помощи которой можно организовать вызов BPF-программы один раз за каждый интервал RTT (round-trip-time, время пинга);
Для IPv4 и IPv6 добавлен (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ab84be7e54fc3d9b248285f1a14067558d858819) новый механизм хранения данных маршрутизации nexthop, нацеленный на увеличение масштабируемости таблиц маршрутизации. Проведённые тесты показали, что при использовании новой системы набор в 743 тысяч маршрутов был загружен в ядро всего за 4.3 секунды;
Для Bluetooth реализована (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=302975cba1a4244d84e645773c82edbcfae1875f) функциональность, необходимая для поддержки LE ping;
Оборудование
Добавлена (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=761fdd5e3327db6c646a09bab5ad48cd42680cd2) поддержка x86-совместимых процессоров компании Zhaoxin (https://ru.wikipedia.org/wiki/Zhaoxin), развиваемых в результате совместного проекта VIA Technologies и муниципалитета Шанхая. Семейство CPU ZX построено на базе архитектуры x86-64 Isaiah, продолжающей развитие технологий VIA Centaur (https://en.wikipedia.org/wiki/Centaur_Technology);
В подсистему DRM (Direct Rendering Manager), а также в графические драйверы amdgpu и i915, добавлена поддержка разбора, обработки и отправка через HDMI-порт метаданных HDR (расширенный динамический диапазон), позволяющего использовать HDR-панели и экраны, способные отображать дополнительные диапазоны яркости;
В драйвер amdgpu добавлена начальная поддержка GPU AMD NAVI (RX5700), которая включает базовый драйвер, код для взаимодействия с экранами (DCN2), поддержку GFX и вычислений (GFX10), SDMA 5 (System DMA0), средства управления питанием и мультимедийные кодировщики/декодировщики (VCN2). В amdgpu также улучшена поддержка карт на базе GPU Vega12 и Vega20, для которых добавлены дополнительные возможности управления памятью и энергопотреблением;
В драйвер amdkfd (для дискретных GPU, такие как Fiji, Tonga, Polaris) добавлена поддержка карт на базе GPU VegaM;
В DRM-драйвере для видеокарт Intel для чипов Icelake реализован (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=02ae8ba9664081a74cafe6662e64b3d7b8b292e6) новый мультисегментный режим гамма-коррекции. Добавлена возможность вывода через DisplayPort в формате YCbCr4:2:0. Добавлены новые прошивки GuC (https://01.org/linuxgraphics/downloads/firmware) для SKL, BXT, KBL, GLK и ICL. Реализована возможность отключения питания экрана в асинхронном режиме. Добавлена (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=1215d28e722ce27172de7708ead6824fcfb19364) поддержка сохранения и восстановления контекста рендеринга для чипов Ironlake (gen5) и gen4 (Broadwater - Cantiga), что позволяет из пространства пользователя восстанавливать состояние GPU при перехода от выполнения одних пакетных операций к другим;
В драйвере Nouveau обеспечено определение чипсета NVIDIA Turing TU116;
Расширены возможности DRM/KMS-драйвера для ускорителей экранных операций ARM Komeda (Mali D71), добавлена поддержка масштабирования, разделения/слияния слоёв, поворота, отложенной записи, AFBC, SMMU и форматов кодирования цвета Y0L2, P010, YUV420_8/10BIT;
В драйвер MSM добавлена поддержка серии A540 GPU Adreno, применяемой в процессорах Qualcomm, а также поддержка DSI-контроллера MSM8998 для Snapdragon 835;
Добавлены драйверы для LCD-панелей Samsung S6E63M0, Armadeus ST0700, EDT ETM0430G0DH6, OSD101T2045-53TS, Evervision VGG804821, FriendlyELEC HD702E, KOE tx14d24vm1bpa, TFC S9700RTWV43TR-01B, EDT ET035012DM6 и VXT VL050-8048NT-C01;
Добавлен (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=3e7f51bd96077acad6acd7b45668f65b44233c4e) драйвер для задействования средств ускорения декодирования видео, доступных в SoC Amlogic Meson;
В драйвере v3d (для GPU Broadcom Video Core V, используемого в Raspberry Pi) появилась поддержка (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d223f98f02099b002903b9b22b56febae16ef80d) диспетчеризации вычислительных шейдеров;
Добавлен (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=038b1a05eae6666b731920e46f47d8e2332e07ff) драйвер для SPI-клавиатур и трекпадов, применяемых в современных моделях ноутбуков Apple MacBook и MacBookPro;
Добавлена (https://github.com/torvalds/linux/commit/47d6a7607443ea43dbc4d0f371bf773540a8f8f4) дополнительная защита ioctl-вызовов, связанных с драйвером floppy, а сам драйвер помечен как оставленный без сопровождения ("orphaned"), что подразумевает прекращение его тестирования. Драйвер пока сохраняется в ядре, но его корректная работа не гарантируется. Драйвер рассматривается как устаревший, так как для его тестирования трудно найти работающее оборудование - все актуальные внешние накопители, как правило, используют интерфейс USB.
Добавлен (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d3df18a97e586702920337056540267807b23f8e) cpufreq-драйвер для плат Raspberry Pi, позволяющий динамически управлять изменением частоты процессора;
Добавлена поддержка новых ARM SoC Mediatek mt8183 (4x Cortex-A73 + 4x Cortex-A53), TI J721E (2x Cortex-A72 + 3x Cortex-R5F + 3 DSPs + MMA) и Amlogic G12B (4x Cortex-A73 + 2x Cortex-A53), а также плат:
Purism Librem5 (https://www.opennet.ru/opennews/art.shtml?num=51436),
Aspeed BMC,
Microsoft Olympus BMC,
Kontron SMARC,
Novtech Meerkat96 (i.MX7),
ST Micro Avenger96,
Google Cheza (Qualcomm SDM845),
Qualcomm Dragonboard 845c (Qualcomm SDM845),
Hugsun X99 TV Box (Rockchip RK3399),
Khadas Edge/Edge-V/Captain (Rockchip RK3399),
HiHope RZ/G2M,
NXP LS1021A-TSN.
Одновременно Латиноамериканский Фонд свободного ПО сформировал (http://www.fsfla.org/ikiwiki/selibre/linux-libre/) вариант полностью свободного ядра 5.3 (http://www.fsfla.org/ikiwiki/selibre/linux-libre/) - Linux-libre 5.3-gnu (http://linux-libre.fsfla.org/pub/linux-libre/releases/5.3-gnu/), очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В новом выпуске отключена загрузка блобов в драйверах qcom, hdcp drm, allegro-dvt и meson-vdec. Обновлён код чистки блобов в драйверах и подсистемах amdgpu, i915, netx, r8169, brcmfmac, rtl8188eu, adreno, si2157, pvrusb2, touchscreen_dmi, звуковом драйвере для skylake, а также в документации к микрокоду.
16.09.2019
http://www.opennet.ru/opennews/art.shtml?num=51447