После двух месяцев разработки Линус Торвальдс представил (https://lkml.org/lkml/2017/7/2/164) релиз ядра Linux 4.13 (https://www.kernel.org/). Среди наиболее заметных изменений: в состав включены планировщики ввода/вывода BFQ и Kyber, для live-патчей реализована гибридная модель обеспечения непротиворечивости, добавлен модуль dm-integrity, интегрирован фреймворк TEE (Trusted Execution Environment), в MD RAID5 добавлена поддержка частичного лога чётности, в blk-throttle обеспечена поддержка "мягких" лимитов, в поставку добавлена утилита "AnalyzeBoot".В новую версию принято более 13 тысяч исправлений от 1500 разработчиков,
размер патча - 89 Мб, что примерно в два раза больше, чем патч для ядра 4.11 (изменения затронули 12364 файлов, добавлено 1300537 строк кода, удалено 266937 строк). Около 45% всех представленных в 4.12
изменений связаны с драйверами устройств, примерно 16% изменений имеют
отношение к обновлению кода специфичного для аппаратных архитектур, 13% связано с сетевым стеком, 3% - файловыми системами и 3% c внутренними подсистемами ядра.
Основные (http://kernelnewbies.org/Linux_4.12) новшества (https://lwn.net/Articles/722512/):
-
Дисковая подсистема, ввод/вывод и файловые системы
- Для многоуровневой системы очередей (multiqueue) реализованы (https://lwn.net/Articles/720675/) планировщики ввода/вывода BFQ (Budget Fair Queueing) и Kyber, специально рассчитанные на организацию многопоточного доступа к данным на многоядерных системах. Ранее реализация multiqueue считалась незавершённой из-за отсутствия планировщиков, специально созданных для работы с многоуровневыми очередями. BFQ манипулирует распределением между процессами бюджетов на ввода/вывод и позволяет добиться хороших показателей интерактивной отзывчивости при использовании дисковых носителей или медленных SSD-накопителей. Kyber минималистичен (около 1000 строк кода), оптимизирован для работы с быстрыми SSD-накопителями и манипулирует двумя основными очередями - очередь для синхронных запросов (операции чтения) и очередь для асинхронных запросов (операции записи);
- В модуль управления пропускной способностью ввода/вывода blk-throttle добавлено новый лимит "low", который можно использовать для задания мягких ограничений. Группа (cgroup) может превысить low-ограничение, но только при условии, что все активные группы уже достигли данного лимита. Через настройки можно корректировать период выборки, используемый контроллером cgroup, для тонкого контроля над нагрузкой на CPU;
- В подсистему LightNVM добавлен обработчик "pblk", который позволяет работать с SSD-накопителями типа open-channel (https://en.wikipedia.org/wiki/Open-channel_SSD) (не имеют прошивки) как с обычными блочными устройствами;
- В MD RAID5 добавлена поддержка возможности Partial Parity Log (https://raw.githubusercontent.com/torvalds/linux/master/Docu... (PPL), которая позволяет снизить вероятность повреждения данных в случае работы с рассинхронизированным массивом, один из накопителей в котором не соответствует данным на других дисках, а массив находится в состоянии "degraded", т.е. отсутствует возможность пересчитать блоки чётности;
- Для Device Mapper реализован новый модуль dm-integrity (https://raw.githubusercontent.com/torvalds/linux/master/Docu... который обеспечивает эмуляцию блочного устройства с дополнительными метками х в секторах, в которых может сохраняться информация для контроля целостности данных;
- Удалён (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/lin... устаревший драйвер hd для жестких дисков с нестандартным интерфейсом, используемым на заре рождения ПК до появления интерфейса IDE. Драйвер был написан Линусом и поставлялся начиная с версии ядра 0.01;
- Реализована новая ioctl-команда GETFSMAP, которую можно использовать для анализа физического размещения экстентов в файловой системе. Например, при помощи GETFSMAP можно определить данные какого файла связаны с указанным физическим блоком. В настоящее время GETFSMAP поддерживается для XFS и ext4;
-
Виртуализация и безопасность
- В состав включен фреймворк TEE (Trusted Execution Environment), предоставляющий средства для задействования воможностей процессоров, таких как ARM TrustZone (https://www.arm.com/products/security-on-arm/trustzone), для организации выполнения защищённых окружений, аппаратно изолированных даже от ядра. Например, подобные окружения могут применяться (https://www.opennet.ru/opennews/art.shtml?num=44718) для изоляции обработчиков ключей шифрования.
- В Xen обеспечена возможность применения сетевой файловой системы 9pfs (https://xenbits.xen.org/docs/unstable/misc/9pfs.html), разработанной для Plan 9. При помощи 9pfs в системах виртуализации можно организовать передачу данных из одной виртуальной машины к другой;
- В гипервизор KVM добавлена поддержка механизма виртуализации "VZ", присутствующего на процессорах MIPS. Для архитектуры x86 прекращена поддержка механизма назначения устройств, вместо которого следует применять интерфейс VFIO;
-
Сетевая подсистема
- В системном вызове epoll_wait() обеспечен переход на схему polling-опроса сетевых сокетов при высокой нагрузке для снижения задержек при приёме пакетов;
- Прекращена поддержка использования параллельного NFS (pNFS) поверх устройств объектных хранилищ, которая оказалась невостребована и длительное время находится без сопровождения;
-
Память и системные сервисы
- Для инфраструктуры, предоставляющей универсальный API для динамического применения к работающему ядру патчей без перезагрузки и без остановки работы приложений,
добавлена (https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/lin... поддержка гибридной модели (https://www.opennet.ru/opennews/art.shtml?num=41651) обеспечения непротиворечивости, комбинирующей метод отслеживания непротиворечивости через анализ стека (kPatch) с механизмом оценки отдельных задач (kGraft). Ранее доступный в ядре код позволял создавать лишь простые патчи для горячего устранения некоторых типов уязвимостей, но не мог применятся для более сложных изменений, затрагивающих замену функций или изменение семантики данных. По сравнению с kPatch гибридная модель позволяет избежать задержек во время наложения патча, может применяться в ситуациях выполнения подменяемой функции и предоставляет более предсказуемый прогноз успешности выполнения операции. По сравнению с kGraft гибридный метод более прост в реализации и оказывает меньшее влияние на процессы (не требует отправки сигнала спящим задачам).
- В системный вызов prctl() добавлены две новые операции: ARCH_SET_CPUID для включения отслеживания инструкций CPUID и ARCH_GET_CPUID для получения текущего состояния отслеживания. Операции поддерживаются только для систем x86 и могут быть полезны для трассировки приложений, которые пытаются перехватить и эмулировать CPUID;
- В виртуальной машине BPF реализована возможность вложенного (каскадного) использования map-структур. В состав ядра включен встроенный тестовый фреймворк для программ BPF, активируемый командой BPF_PROG_TEST_RUN в системном вызове bpf(). Обеспечена поддержка JIT-компиляции для архитектуры SPARC64;
- В поставку добавлена утилита "AnalyzeBoot", позволяющая сформировать HTML-отчёт, отражающий хронологию загрузки различных компонентов ядра;
- Значительно переработан код для доступа к данным пространства пользователя из ядра, который избавлен от множества привязок, специфичных для конкретных архитектур;
- Прекращена поддержка архитектуры AVR32, которая уже прекратила своё существование, а в ядре не сопровождалась на должном уровне;
- Добавлен новая опция трассировки "function-fork", которая позволяет ограничить события трассировки только заданны...
URL: https://lkml.org/lkml/2017/7/2/164
Новость: http://www.opennet.ru/opennews/art.shtml?num=46799