Релиз ядра Linux 4.12

После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 4.13. Среди наиболее заметных изменений: в состав включены планировщики ввода/вывода 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 внутренними подсистемами ядра.

Основные новшества:

  • Дисковая подсистема, ввод/вывод и файловые системы
    • Для многоуровневой системы очередей (multiqueue) реализованы планировщики ввода/вывода BFQ (Budget Fair Queueing) и Kyber, специально рассчитанные на организацию многопоточного доступа к данным на многоядерных системах. Ранее реализация multiqueue считалась незавершённой из-за отсутствия планировщиков, специально созданных для работы с многоуровневыми очередями. BFQ манипулирует распределением между процессами бюджетов на ввода/вывод и позволяет добиться хороших показателей интерактивной отзывчивости при использовании дисковых носителей или медленных моделей SSD-накопителей. Kyber минималистичен (около 1000 строк кода), оптимизирован для работы с быстрыми SSD-накопителями и манипулирует двумя основными очередями — очередь для синхронных запросов (операции чтения) и очередь для асинхронных запросов (операции записи);
    • В модуль управления пропускной способностью ввода/вывода blk-throttle добавлено новый лимит «low», который можно использовать для задания мягких ограничений. Группа (cgroup) может превысить low-ограничение, но только при условии, что все активные группы уже достигли данного лимита. Через настройки можно корректировать период выборки, используемый контроллером cgroup, для тонкого контроля над нагрузкой на CPU;
    • В подсистему LightNVM добавлен обработчик «pblk», который позволяет работать с SSD-накопителями типа open-channel (не имеют прошивки) как с обычными блочными устройствами;
    • В MD RAID5 добавлена поддержка возможности Partial Parity Log (PPL), которая позволяет снизить вероятность повреждения данных в случае работы с рассинхронизированным массивом, один из накопителей в котором не соответствует данным на других дисках, а массив находится в состоянии «degraded», т.е. отсутствует возможность пересчитать блоки чётности;
    • Для Device Mapper реализован новый модуль dm-integrity, который обеспечивает эмуляцию блочного устройства с дополнительными метками х в секторах, в которых может сохраняться информация для контроля целостности данных;
    • Удалён устаревший драйвер hd для жестких дисков с нестандартным интерфейсом, используемым на заре рождения ПК до появления интерфейса IDE. Драйвер был написан Линусом и поставлялся начиная с версии ядра 0.01;
    • Реализована новая ioctl-команда GETFSMAP, которую можно использовать для анализа физического размещения экстентов в файловой системе. Например, при помощи GETFSMAP можно определить данные какого файла связаны с указанным физическим блоком. В настоящее время GETFSMAP поддерживается для XFS и ext4;
  • Виртуализация и безопасность
    • В состав включен фреймворк TEE (Trusted Execution Environment), предоставляющий средства для задействования воможностей процессоров, таких как ARM TrustZone, для организации выполнения защищённых окружений, аппаратно изолированных даже от ядра. Например, подобные окружения могут применяться для изоляции обработчиков ключей шифрования.
    • В Xen обеспечена возможность применения сетевой файловой системы 9pfs, разработанной для Plan 9. При помощи 9pfs в системах виртуализации можно организовать передачу данных из одной виртуальной машины к другой;
    • В гипервизор KVM добавлена поддержка механизма виртуализации «VZ», присутствующего на процессорах MIPS. Для архитектуры x86 прекращена поддержка механизма назначения устройств, вместо которого следует применять интерфейс VFIO;
  • Сетевая подсистема
    • В системном вызове epoll_wait () обеспечен переход на схему polling-опроса сетевых сокетов при высокой нагрузке для снижения задержек при приёме пакетов;
    • Прекращена поддержка использования параллельного NFS (pNFS) поверх устройств объектных хранилищ, которая оказалась невостребована и длительное время находится без сопровождения;
  • Память и системные сервисы
    • Для инфраструктуры, предоставляющей универсальный API для динамического применения к работающему ядру патчей без перезагрузки и без остановки работы приложений, добавлена поддержка гибридной модели обеспечения непротиворечивости, комбинирующей метод отслеживания непротиворечивости через анализ стека (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», которая позволяет ограничить события трассировки только заданным набором процессов с автоматическим добавлением запущенных дочерних процессов в этот набор;
    • Представлена новая функция для распределения памяти компонентами ядра — kvmalloc (), которая вначале пытается выделить память через kmalloc (), но при необходимости откатывается на vmalloc (). Применение kvmalloc () позволяет избавиться от большой порции дублирующегося кода по откату на vmalloc ();
  • Оборудование
    • Обеспечена корректная поддержка подключения устройств через 24-контактный разъём USB type-C, разработанный параллельно со спецификацией USB 3.1;
    • Для архитектуры PowerPC реализована возможность работы с виртуальным адресным пространством, размером доя 512 Тб. Размер процесса по умолчанию ограничен 128 Тб, но ограничение можно снять через передачу соответствующих опций при вызове mmap ();
    • Для архитектуры ARM64 добавлена поддержка сохранения дампов состояния при крахе ядра (crash-dump);
    • Добавлена поддержка PCI-контроллеров, которые могут работать в режиме Endpoint;
    • Отключена сборка звуковых драйверов OSS (Open Sound System). В одном из следующих выпусков ожидается удаление данных драйверов для состава ядра. В качестве причин удаления упоминается плохое сопровождение, невостребованность и желание избавиться от вызовов set_fs (), которые применяются в данных драйверах;
    • Добавлен новый драйвер абстрактного виртуального мультимедийного контроллера («virtual media controller»), который демонстрирует возможности интерфейсов ядра по доступу к мультимедийным устройствам и может использоваться для тестирования пользовательских приложений. Драйвер создан по аналогии с реализацией виртуальной камеры «vivid» с примером правильного написания V4L-драйверов;
    • В DRM-драйвер (Direct Rendering Manager) Nouveau добавлена поддержка аппаратного ускорения для GPU GTX 1000 «Pascal» (GTX 1050, 1060, 1070 и 1080), при установке соответствующих проприетарных прошивок от NVIDIA. Переработан код для загрузки прошивок NVIDIA с использованием верификации. Решены проблемы с GPU GTX 970;
    • В DRM-драйвере AMDGPU реализована начальная поддержка ещё не выпущенного GPU Radeon RX Vega, добавлена возможность использования встроенных в GPU датчиков и многоуровневых таблиц страниц памяти;
    • В DRM-драйвере для GPU Intel включено по умолчанию применение атомарного переключения видеорежимов, позволяющего разом, в рамках одной атомарной операции, изменить несколько параметров графического режима;

© OpenNet