PDA

Просмотр полной версии : Релиз ядра Linux 5.8


Suicide
03.08.2020, 20:09
После двух месяцев разработки Линус Торвальдс представил (https://lkml.org/lkml/2020/8/2/293) релиз ядра Linux 5.8 (https://kernel.org/). Среди наиболее заметных изменений: детектор состояний гонки KCSAN, универсальный механизм доставки уведомлений в пространство пользователя, поддержка оборудования для inline-шифрования, расширенные механизмы защиты для ARM64, поддержка российского процессора Baikal-T1, возможность раздельного монтирования экземпляров procfs, реализация для ARM64 механизмов защиты Shadow Call Stack и BTI.

Ядро 5.8 стало самым крупным по числу изменений из всех ядер за всё время существования проекта. При этом изменения не связаны с какой-то одной подсистемой, а охватывают разные части ядра и в основном связаны с внутренними переработками и чисткой. Больше всего изменений наблюдается в драйверах. В новую версию принято 17606 исправлений от 2081 разработчиков, которые затронули примерно 20% всех файлов в репозитории с кодом ядра. Размер патча - 65 МБ (изменения затронули 16180 файлов, добавлено 1043240 строк кода, удалено 489854 строк). Для сравнения в ветке 5.7 было внесено 15033 исправлений, а размер патча составлял 39 МБ. Около 37% всех представленных в 5.8 изменений связаны с драйверами устройств, примерно 16% изменений имеют отношение к обновлению кода, специфичного для аппаратных архитектур, 11% связано с сетевым стеком, 3% - с файловыми системами и 4% c внутренними подсистемами ядра.

Основные (https://kernelnewbies.org/Linux_5.8) новшества (https://lwn.net/Articles/822527/):


Виртуализация и безопасность
Обеспечена блокировка загрузки модулей ядра, имеющих секции с кодом, в которых одновременно выставлены биты, разрешающие исполнение и запись. Изменение реализовано в рамках более крупного проекта по избавлению ядра от применения страниц памяти, допускающих одновременно исполнение и запись.

Появилась возможность создания отдельных экземпляров procfs, позволяющих использовать несколько точек монтирования procfs, смонтированных с разными опциями, но отражающими одно пространство имён идентификаторов процессов (pid namespace). Ранее все точки монтирования procfs лишь отзеркаливали одно внутреннее представление и любое изменение параметров монтирования сказывалось на всех остальных точках монтирования, связанных с тем же пространством имён идентификаторов процессов. Из областей, в которых может быть востребовано монтирование с разными опциями отмечается реализация легковесной изоляции для встраиваемых систем с возможностью скрытия в procfs определённых типов процессов и информационных узлов.

Для платформы ARM64 реализована поддержка механизма Shadow-Call Stack (https://clang.llvm.org/docs/ShadowCallStack.html), предоставляемого компилятором Clang для защиты от перезаписи адреса возврата из функции в случае переполнения буфера в стеке. Суть защиты в сохранении после передачи управления функции адреса возврата в отдельном "теневом" стеке и извлечении данного адреса перед выходом из функции.

Для платформы ARM64 добавлена поддержка инструкций ARMv8.5-BTI (https://developer.arm.com/docs/ddi0602/f/base-instructions-alphabetic-order/bti-branch-target-identification) (Branch Target Indicator) для защиты выполнения наборов инструкций, на которые не должны выполняться переходы при ветвлении. Блокирование переходов на произвольные участки кода реализовано для противодействия созданию гаджетов в эксплоитах, использующих приёмы возвратно-ориентированного программирования (ROP - Return-Oriented Programming, атакующий не пытается разместить свой код в памяти, а оперирует уже имеющимися кусками машинных инструкций, завершающихся инструкцией возврата управления, из которых выстраиваются цепочка вызовов для получения нужной функциональности).

Добавлена поддержка оборудования для inline-шифрования блочных устройств (Inline Encryption (https://www.kernel.org/doc/html/latest/block/inline-encryption.html)). Устройства inlinep-шифрования обычно встроены в накопитель, но логически размещается между системной памятью и диском, осуществляя прозрачное шифрование и расшифровку ввода/вывода на основе заданных ядром ключей и алгоритма шифрования.

Добавлен параметр командной строки ядра "initrdmem", позволяющий указать физический адрес размещения initrd в памяти при размещении начального загрузочного образа в ОЗУ.

Добавлены новые capability: CAP_PERFMON для доступа к подсистеме perf и выполнения мониторинга производительности. CAP_BPF (https://git.kernel.org/linus/a17b53c4a4b5), разрешающий выполнение некоторых операций с BPF (например, загрузка BPF-программ), которые раньше требовали прав CAP_SYS_ADMIN (теперь полномочия CAP_SYS_ADMIN разделены на комбинацию CAP_BPF, CAP_PERFMON и CAP_NET_ADMIN).

Добавлено (https://git.kernel.org/linus/5f1f79bbc9e2) новое устройство virtio-mem, позволяющее реализовать горячее подключение и отключение памяти к гостевым системам.

Реализован отзыв операций маппинга в /dev/mem, если драйвер устройства использует перекрывающиеся области памяти.

Добавлена защита от уязвимости CROSSTalk/SRBDS (https://www.opennet.ru/opennews/art.shtml?num=53126), позволяющей восстановить результаты выполнения некоторых инструкций, выполняемых на другом ядре CPU.


Память и системные сервисы
В документ, определяющий правила оформления кода, приняты (https://www.opennet.ru/opennews/art.shtml?num=53342) рекомендации по применению инклюзивной терминологии. Разработчикам не рекомендуется использовать связки 'master / slave' и 'blacklist / whitelist', а также отдельно слово 'slave'. Рекомендации касаются только нового использования данных терминов. Уже имеющиеся в ядре упоминания указанных слов останутся нетронутыми. В новом коде использование отмеченных терминов разрешено если того требует поддержание выдаваемого в пространство пользователя API и ABI, а также при обновлении кода для поддержки существующего оборудования или протоколов, спецификации на которые предписывают использование определённых терминов.

В состав включён отладочный инструмент KCSAN (https://www.kernel.org/doc/html/latest/dev-tools/kcsan.html) (Kernel Concurrency Sanitizer), предназначенный для динамического выявления состояний гонки (https://ru.wikipedia.org/wiki/%D0%A1%D0%BE%D1%81%D1%82%D0%BE%D1%8F%D0%BD%D0%B8%D 0%B5_%D0%B3%D0%BE%D0%BD%D0%BA%D0%B8) внутри ядра. Использование KCSAN поддерживается при сборке в GCC и Clang, и требует добавления специальных модификаций на этапе компиляции для отслеживания доступа к памяти (применяются точки останова, срабатывающие при чтении или изменении памяти). Основное внимание при разработке KCSAN уделено предотвращению ложных срабатываний, масштабируемости и простоте использования.

Добавлен универсальный механизм (https://www.kernel.org/doc/html/latest/watch_queue.html) доставки уведомлений из ядра в пространство пользователя. Механизм основан на штатном драйвере pipe и позволяет эффективно распределять уведомления от ядра по каналам, открытым в пространстве пользователя. Точки приёма уведомлений представляют собой pipe-ы, открытые в специальном режиме и позволяющие накапливать в кольцевом буфере поступающие от ядра сообщения. Чтение осуществляется обычной функцией read(). Владелец канала определяет, какие из источников в ядре необходимо отслеживать и может определить фильтр для игнорирования сообщений и событий определённого типа. Из событий пока поддерживаются только операции с ключами, такие как добавление/удаление ключей и изменение их атрибутов. Указанные события планируют использовать в GNOME.

Продолжено развитие функциональности 'pidfd', помогающей обрабатывать ситуации с повторным использованием PID (pidfd связывается с конкретным процессом и не меняется, в том время как PID может быть привязан к другому процессу после завершения текущего процесса, ассоциированного с этим PID). В новой версии добавлена поддержка использования pidfd для прикрепления процесса к пространствам имён (разрешено указание pidfd при выполнении системного вызова setns). Применение pidfd позволяет одним вызовом управлять прикреплением процесса к нескольким типам пространств имён, существенно сокращая число необходимых системных вызовов и реализуя прикрепление в атомарном режиме (если при прикреплении к одному из пространств имён возникнет сбой, то не подключатся и остальные).

Добавлен новый системный вызов faccessat2(), отличающийся от faccessat() (https://man7.org/linux/man-pages/man2/faccessat.2.html) дополнительным аргументом с флагами, соответствующими рекомендациям POSIX (ранее данные флаги эмулировались в Си-библиотеке, а новый faccessat2 позволяет реализовать их в ядре).

В Cgroup добавлена (https://git.kernel.org/linus/4b82ab4f2883) настройка memory.swap.high, которую можно использовать для замедления задач, занимающих слишком много места в разделе подкачки.

В интерфейс асинхронного ввода/вывода io_uring (https://www.opennet.ru/opennews/art.shtml?num=50631#io_uring) добавлена поддержка системного вызова tee().

Добавлен механизм "BPF iterator (https://lwn.net/Articles/818714/), предназначенный для вывода в пространство пользователя содержимого структур ядра.

Предоставлена (https://git.kernel.org/linus/97abb2b39682) возможность использования кольцевого буфера для обмена данными между BPF-программами.

В механизм padata (https://www.kernel.org/doc/html/latest/core-api/padata.html), предназначенный для организации параллельного выполнения задач в ядре, добавлена поддержка многопоточных задач с балансировкой нагрузки.

В механизм pstore, позволяющий сохранить отладочную информацию о причине краха в области памяти, не теряемые между перезагрузками, добавлен (https://git.kernel.org/linus/649304c936cd) бэкенд для сохранения информации на блочные устройства.

Из ветки ядра PREEMPT_RT перенесена (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=91710728d172) реализация локальных блокировок.

Добавлен (https://git.kernel.org/linus/2b43470add8c) новый API выделения буферов (AF_XDP), нацеленный на упрощение написания сетевых драйверов с поддержкой XDP (eXpress Data Path).

Для архитектуры RISC-V реализована поддержка отладки компонентов ядра при помощи KGDB.

До выпуска 4.8 повышены требования к версии GCC, которая может использоваться для сборки ядра. В одном из следующих выпуском планируется поднять планку до GCC 4.9.


Дисковая подсистема, ввод/вывод и файловые системы
В Device Mapper добавлен (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d3c7b35c20d6) новый обработчик dm-ebs (emulate block size), который может применяться для эмуляции меньшего размера логического блока (например, для эмуляции 512-байтных секторов на дисках с размером сектора 4K).

В файловой системе F2FS появилась поддержка сжатия с использованием алгоритма LZO-RLE.

В dm-crypt добавлена (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=27f5411a718c431c20007e3a2fbba6589942d04f) поддержка шифрованных ключей.

В Btrfs улучшена обработка операций чтения в режиме прямого ввода/вывода. При монтировании ускорена (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=a619b3c7abdd585cdd003effa1773e627aa8a44e) проверка удалённых подразделов и каталогов, оставшихся без родителя.

В CIFS добавлен параметр "nodelete", допускающий штатные проверки прав на сервере, но запрещающий клиенту удалять файлы или каталоги.

В Ext4 улучшена обработка ошибки ENOSPC (https://man7.org/linux/man-pages/man2/creat.2.html) при использовании многопоточности. В xattr добавлена поддержка пространства имён gnu.*, используемого в GNU Hurd.

Для Ext4 и XFS включена поддержка операций DAX (прямой доступ к ФС в обход страничного кэша без применения уровня блочных устройств) в привязке к отдельным файлам и каталогам.

В системный вызов statx() (https://man7.org/linux/man-pages/man2/statx.2.html) добавлен флаг STATX_ATTR_DAX (https://git.kernel.org/linus/83d9088659e8), при указании которого информация извлекается с использованием механизма DAX.

В EXFAT добавлена (https://git.kernel.org/linus/476189c0ef3b658de3f6b89fd0fdeb6dc451b564) поддержка верификации загрузочной области.

В FAT улучшена (https://git.kernel.org/linus/898310032b96c198014a8bbace0fd26259b2db77) упреждающая загрузка элементов ФС. Тестирование медленного 2ТБ USB-накопителя показало сокращение времени прохождения теста с 383 до 51 сек.


Сетевая подсистема
В код управления работой сетевых мостов добавлена (https://git.kernel.org/linus/45c9cbec425c) поддержка протокола MRP (https://en.wikipedia.org/wiki/Media_Redundancy_Protocol) (Media Redundancy Protocol), позволяющего обеспечить отказоустойчивость, закольцевав несколько Ethernet-коммутаторов.

В систему управления трафиком (Tc) добавлено (https://git.kernel.org/linus/a51c328df310) новое действие "gate", дающее возможность определить временные интервалы для обработки и отбрасывания определённых пакетов.

В ядро и утилиту ethtool добавлена поддержка функций тестирования присоединённого сетевого кабеля и самодиагностики сетевых устройств.

В IPv6-стек добавлена поддержка алгоритма MPLS (Multiprotocol Label Switching) для маршрутизации пакетов с использованием многопротокольной коммутации по меткам (для IPv4 MPLS поддерживался и ранее).

Добавлена поддержка передачи пакетов IKE (Internet Key Exchange) и IPSec поверх TCP (RFC 8229 (https://tools.ietf.org/html/rfc8229)) для обхода возможных блокировок UDP.

Добавлено (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=aa4d16e44f60) сетевое блочное устройство rnbd, позволяющее организовать удалённый доступа к блочному устройству при помощи транспорта RDMA (InfiniBand, RoCE, iWARP) и протокола RTRS.

В TCP-стеке добавлена (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=ccd0628fca440268711560a1dbacc727b4f9e214) поддержка сжатия диапазонов в ответах выборочного подтверждения (selective acknowledgment, SACK).

Для IPv6 реализована (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=d29245692a44d71d5e2e0770463184a693696232) поддержка TCP-LD (RFC 6069 (https://tools.ietf.org/html/rfc6069), Long Connectivity Disruptions).


Оборудование
В DRM-драйвере i915 для видеокарт Intel включена по умолчанию поддержка чипов Intel Tiger Lake (GEN12), для которых также реализована (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=8ca6d0237d1696060cd4f5a3ee93ee001c1a9d5b) возможность использования системы SAGV (System Agent Geyserville) для динамической подстройки частоты и напряжения в зависимости от требований к энергопотреблению или производительности.

В драйвер amdgpu добавлена поддержка пиксельного формата FP16 и реализована возможность работы с шифрованными буферами в видеопамяти (TMZ, Trusted Memory Zone).

Добавлена поддержка датчиков энергопотребления процессоров AMD Zen и Zen2, а также датчиков температуры AMD Ryzen 4000 Renoir. Для AMD Zen и Zen2 обеспечена поддержка извлечения информации об энергопотреблении через интерфейс RAPL (https://lore.kernel.org/lkml/20200515215733.20647-1-eranian@google.com/) (Running Average Power Limit).

В драйвер Nouveau добавлена поддержка формата модификаторов NVIDIA. Для gv100 реализована возможность использования чересстрочных режимов развёртки. Добавлено определение vGPU.

В драйвер MSM (Qualcomm) добавлена поддержка GPU Adreno A405, A640 и A650.

Добавлен (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=9e1ed9fb1eb0a4bc43a26365c592d3095286038b) внутренний фреймворк для управления ресурсами DRM (Direct Rendering Manager).

Добавлена поддержка смартфонов Xiaomi Redmi Note 7 и Samsung Galaxy S2, а также ноутбуков Elm/Hana Chromebook.

Добавлены драйверы для LCD-панелей: ASUS TM5P5 NT35596, Starry KR070PE2T, Leadtek LTK050H3146W, Visionox rm69299, Boe tv105wum-nw0.

Добавлена поддержка ARM-плат и платформ Renesas "RZ/G1H", Realtek RTD1195, Realtek RTD1395/RTD1619, Rockchips RK3326, AMLogic S905D, S905X3, S922XH, Olimex A20-OLinuXino-LIME-eMMC, Check Point L-50, , Beacon i.MX8m-Mini, Qualcomm SDM660/SDM630, Xnano X5 TV Box, Stinger96, Beaglebone-AI.

Добавлена поддержка MIPS-процессора Loongson-2K (сокращённый Loongson64). Для CPU Loongson 3 добавлена поддержка виртуализации с использованием гипервизора KVM.

Добавлена (https://www.opennet.ru/opennews/art.shtml?num=53231) поддержка российского процессора Baikal-T1 и основанной на нём системы на кристалле BE-T1000 (https://www.baikalelectronics.com/products/168/). Процессор Baikal-Т1 содержит два суперскалярных ядра P5600 MIPS 32 r5, работающих на частоте 1.2 ГГц. Чип содержит кэш L2 (1 Мб), контроллер памяти DDR3-1600 ECC, 1 порт 10Gb Ethernet, 2 порта 1Gb Ethernet, контроллер PCIe Gen.3 х4, 2 порта SATA 3.0, USB 2.0, GPIO, UART, SPI, I2C. Процессор предоставляет аппаратную поддержку виртуализации, инструкции SIMD и интегрированный аппаратный ускоритель криптографических операций, поддерживающий ГОСТ 28147-89. Чип разработан с использованием лицензированного у компании Imagination Technologies блока процессорного ядра MIPS32 P5600 Warrior.

Одновременно латиноамериканский Фонд свободного ПО сформировал (http://www.fsfla.org/ikiwiki/selibre/linux-libre/) вариант полностью свободного ядра 5.8 (http://www.fsfla.org/ikiwiki/selibre/linux-libre/) - Linux-libre 5.8-gnu (http://linux-libre.fsfla.org/pub/linux-libre/releases/5.8-gnu/), очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В новом выпуске отключена загрузка блобов в драйверах для Atom ISP Video, MediaTek 7663 USB/7915 PCIe, Realtek 8723DE WiFi, Renesas PCI xHCI, HabanaLabs Gaudi, Enhanced Asynchronous Sample Rate Converter, Maxim Integrated MAX98390 Speaker Aimplifier, Microsemi ZL38060 Connected Home Audio Processor, и I2C EEPROM Slave. Обновлён код чистки блобов в драйверах и подсистемах Adreno GPU, HabanaLabs Goya, x86 touchscreen, vt6656 и btbcm.

03.08.2020

https://www.opennet.ru/opennews/art.shtml?num=53479​

altblitz
03.08.2020, 22:40
Linux 5.8 Формально добавляет руководство по инклюзивной терминологии



На данном этапе эти рекомендации, являющиеся частью стиля кодирования ядра Linux, заключаются в том, чтобы избегать нового использования слов "master" и "slave" в коде ядра, а также избегать "blacklist" и "whitelist". Это предназначено для нового кода, продвигающегося вперед или модифицирующего существующий код, но до тех пор, пока он не сломает ABI кернела.

Для имен символов и документации избегайте нового использования 'master / slave' (или 'slave' независимо от 'master') и 'blacklist / whitelist'.

Рекомендуется заменить 'master / slave':

'{primary,main} / {secondary,replica,subordinate}'

'{initiator,requester} / {target,responder}'

'Spinus (https://antichat.com/members/326989/) / говна кусок пидарас нищеброд абиженный дерёвня балбес'

'{controller,host} / {device,worker,proxy}'

'Triton_Mgn (https://antichat.com/members/267403/) / нищеброд говноед пидарас кретин'

'leader / follower'

'vek-85 (https://antichat.com/members/41739/) / хуесос нищук засранец имбецил'

'director / performer'

'quite gray (https://antichat.com/members/294671/) / пидарас гавноед сцыкун идиот'

Рекомендуются замены для 'blacklist/whitelist':

'denylist / allowlist'

'blocklist / passlist'

В дереве исходных текстов ядра, в основном в сетевом коде ядра, упоминается примерно 19.5k "slave". Строка "master" упоминается примерно 26.9k раз. Для "чёрного списка" имеется около 888 упоминаний при проверке в текущем Git-дереве. В настоящее время в Linux около 69.3k текстовых файлов с примерно 3.54 миллиона строк комментариев к коду и 20.1 миллиона строк кода (вместе с 3.6 миллионами пустых строк).

https://www.phoronix.com/scan.php?page=news_item&px=Linux-5.8-Inclusive-Terminology

CyberTro1n
04.08.2020, 02:24
altblitz said:
↑ (https://antichat.live/posts/4403353/)
https://www.phoronix.com (https://www.phoronix.com/scan.php?page=news_item&px=Linux-5.8-Inclusive-Terminology)


(Https://www.dartphooonix.net)))