Релиз ядра Linux 4.15
После двух с половиной месяцев разработки Линус Торвальдс представил релиз ядра Linux 4.15. Среди наиболее заметных изменений: защита от атак Meltdown и Spectre, поддержка архитектуры RISC-V, интеграция прослойки DC (Display Core) в драйвер amdgpu, контроллер ресурсов CPU для cgroup2, поддержка технологии AMD Secure Encrypted Virtualization, оптимизация энергопотребления на системах с SATA ALPM, поддержка протокола ThunderboltIP, удаление звуковой подсистемы OSS.
В новую версию принято около 15 тысяч исправлений от 1600 разработчиков, размер патча — 46 Мб (изменения затронули 13177 файлов, добавлено 611097 строк кода, удалено 287446 строк). Около 51% всех представленных в 4.15 изменений связаны с драйверами устройств, примерно 16% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 12% связано с сетевым стеком, 4% — файловыми системами и 3% c внутренними подсистемами ядра. 11.3% изменений внесено сотрудниками компании Intel, 10.7% изменений подготовлено сотрудниками AMD, 6.7% — Red Hat, 5.2% — Google, 3.4% — Linaro, 3.2% — IBM, 2.7% — Oracle, 2.2% — ARM, 2.1% — SUSE.
Основные новшества:
- Виртуализация и безопасность
- В дополнение к появившейся в ядре 4.14 поддержке технологии AMD SME (Secure Memory Encryption), позволяющей автоматически зашифровывать и расшифровывать страницы памяти при записи и чтения из DRAM, в новой версии ядра реализована начальная поддержка механизма AMD Secure Encrypted Virtualization, который предоставляет средства шифрования памяти для виртуальных машин. AMD Secure Encrypted Virtualization позволяет защитить виртуальные машины от компрометации со стороны гипервизора или адмнинистратора хост системы. Суть метода защиты в интеграции в архитектуру виртуализации AMD-V возможности для прозрачного шифрования памяти виртуальных машин, при которой доступ к расшифрованным данным имеет только текущая гостевая система, а остальные виртуальные машины и даже гипервизор при попытке обращения к этой памяти получают зашифрованные данные. В версии 4.15 добавлены компоненты для использования Secure Encrypted Virtualization на стороне гостевой системы, компоненты для создания и управления защищёнными гостевыми системами появятся в одном из следующих выпусков ядра Linux;
- Добавлена поддержка режима «User Mode Instruction Prevention» (UMIP), предоставляемого процессорами Intel. При включении данного режима на уровне CPU в пространстве пользователя запрещается выполнение некоторых инструкций, таких как SGDT, SLDT, SIDT, SMSW и STR, которые могут применяться в атаках, нацеленных на повышение привилегий в системе. Для корректной работы эмуляторов, таких как Wine и DOSEMU2, инструкции SGDT, SIDT и SMSW при включении режима эмулируются;
- Включены последние наработки для блокирования атак Meltdown и Spectre. Для противодействия атаке Meltdown (CVE-2017–5754) на системах x86 с процессорами Intel (процессоры AMD данной атаке не подвержены) добавлена технология PTI (Page Table Isolation), обеспечивающая разделение таблиц страниц памяти ядра и пространства пользователя при переключении контекста во время системного вызова. Для процессоров PowerPC для защиты от Meltdown добавлен код на основе применения инструкции RFI (Return from Interrupt) для сброса кэша L1-D.
Для блокирования эксплуатации второго варианта уязвимости Spectre (CVE-2017–5715) добавлен механизм retpoline, основанный на применении специальной последовательности инструкций, исключающей вовлечение механизма спекулятивного выполнения для косвенных переходов (для работы защиты также требуется сборка версией GCC 7.3, в которой появилась поддержка режима »-mindirect-branch=thunk-extern»). Включение средств для обеспечения защиты от первого варианта атаки Spectre (CVE-2017–5753) и кода для блокирования Meltdown на процессорах ARM отложено до выпуска 4.16.
Так как механизмы защиты приводят к снижению производительности, предусмотрены опции для их отключения, которые могут применяться на системах с минимальным риском атаки, например на однопользовательских рабочих станциях. Для отключения PTI во время загрузки ядру можно передать опцию pti=off, а для отключения retpoline — опцию «spectre_v2=off». В состав ядра также добавлен диагностический вызов в sysfs для быстрого определения степени устранения уязвимостей Meltdown и Spectre, который привязан к директории /sys/devices/system/cpu/vulnerabilities/:
$ grep . /sys/devices/system/cpu/vulnerabilities/* /sys/devices/system/cpu/vulnerabilities/meltdown:Mitigation: PTI /sys/devices/system/cpu/vulnerabilities/spectre_v1:Vulnerable /sys/devices/system/cpu/vulnerabilities/spectre_v2:Vulnerable: Minimal generic SM retpoline
- В Xen реализован фронтэнд для протокола PV Calls, позволяющего перенаправлять POSIX-вызовы, инициированный из приложения на стороне гостевой системы (DomU), для обработки на стороне хост-системы (Dom0) или другой гостевой системы;
- Добавлена реализация криптографического хэша OSCCA SM3, стандартизированного для учреждений Китая;
- Интерфейс /sys/kernel/security/evm расширен возможностью информирования о загрузки RSA-ключа для блокирования загрузки других ключей в случае компрометации (ключ можно загрузить только один раз);
- Дисковая подсистема, ввод/вывод и файловые системы
- В XFS добавлна начальная поддержка проверки целостности файловой системы на лету (online), которая пока не готова для широкого использования. В XFS также осуществлён переход на структуру b+tree для встроенного списка экстентов, которая позволяет избежать выделения крупных непрерывных блоков и исключить подтормаживания в условиях применения огромных списков экстентов (например, при работе с сильно фрагментированными файлами);
- В EXT4 улучшена масштабируемость генерации inode на SMP-системах. Добавлена поддержка изменения размера на лету для ФС, в которых используется bigalloc;
- В Btrfs добавлена возможность указания уровня сжатия для zlib (-o compress=zlib:9). Добавлена дополнительная эвристика для быстрой приблизительной оценки степени сжимаемости данных. Проведена оптимизация операции send для больших файлов. Добавлена новая версия ioctl «extent to inode mapping», позволяющая ценой снижения точности получить больше данных для постобработки в пространстве пользователя, например, для оценки состояния утилитами дефрагментации или дедупликации. Реализована отладочная опция ref-verify для верификации учёта ссылок на экстенты;
- В OverlayFS добавлена возможность применения индексации при использовании Btrfs в качестве ФС для базового слоя. В модулях безопасности Smack обеспечена возможность работы с многослойной файловой системой OverlayFS;
- В блочном драйвере для устройств NVMe появилась встроенная поддержка multipath, позволяющая применять распараллеливание ввода/вывода для высокопроизводитльных систем;
- В системном вызове mmap () реализованы флаги MAP_SYNC и MAP_SHARED_VALIDATE для обеспечения прямой записи в ФС на устройствах энергонезависимой памяти. MAP_SYNC предоставляет механизм, позволяющий приложениям в пространстве пользователя управлять сбросом кэша для энергонезависимой памяти. При установке MAP_SYNC метаданные для файла в ФС сбрасываются на накопитель до возвращения ядром fault-обработчика для mmap, что гарантирует соответствие представления раскладки файла для приложения и ядра. Флаг MAP_SHARED_VALIDATE обеспечивает проверку поддержки MAP_SYNC в mmap () для выбранной ФС;
- В cramfs обеспечена поддержка работы с ФС, отражённой напрямую в память (например, в NVRAM). В сочетании с применением несжатых областей памяти данная возможность позволяет организовать «выполнение на месте» (execute-in-place) без дополнительного копирования в ОЗУ. Добавлена поддержка mmap и произвольного позиционирования блоков с данными;
- В файловой системе AFS добавлена поддержка пространств имён сетевой подсистемы (network namespaces) и обеспечена доступность на запись mmap-областей;
- В f2fs улучшена поддержка квот, реализована система мягкого резервирования блоков, расширены сведения о состоянии ФС в sysfs, добавлена поддержка динамического размера встраиваемых блоков xattr (ранее применялся фиксированный размер), обеспечено применение операций discard для диапазонов блоков;
- В device mapper модуль log-writes добавлена поддержка механизма DAX (прямой доступ к ФС в обход страничного кэша без применения уровня блочных устройств);
- Для loop-устройств обеспечена работа с учётом cgroup;
- Сетевая подсистема
- В сетевую подсистему добавлена поддержка протокола «ThunderboltIP», используемого для передачи IP-пакетов через интерфейс на базе хост-контроллера Thunderbolt;
- Добавлена поддержка планировщиков потока для протокола SCTP. В настоящее время доступно три планировщика: FCFS, priority и round-robin;
- Большинство sysctl-настроек, связанных с TCP (sysctls tcp_*), теперь учитывают ограничения сетевого пространства имён (network namespace);
- В подсистему управления сетевыми очередями добавлен модуль CBS (credit-based shaper) с реализацией алгоритма резервирования пропускной способности для разных классов трафика, определённого в главе 8.6.8.2 стандарта 802.1Q-2014;
- Для TCP подготовлена реализации очереди повторной передачи пакетов на базе структуры RB-tree, которая позволяет минимизировать задержки при обработке очередей огромного размера (например, с размером окна перегрузки в 1GB на каналах 100Gb);
- В механизм определения потери пакетов RACK, который отталкивается от времени передачи, добавлена поддержка адаптивного окна упорядочивания, позволяющие добиться повышения пропускной способности в условиях нарушения порядка прихода пакетов. Ранее применявшийся алгоритм определения потери и нарушения порядка следования пакетов FACK, работа которого была основана на анализе последовательности прихода пакетов, отключен по умолчанию в пользу более эффективного механизма RACK;
- Добавлена опция сокетов TCP_FASTOPEN_KEY для назначения разных ключей быстрого открытия TCP-соединений для разных слушающих сокетов;
- Память и системные сервисы
- Включены патчи для оптимизации энергопотребления на системах с SATA AHCI-контроллерами, поддерживающими функцию ALPM (Aggressive Link Power Management). ALPM присутствует в системах с процессорами Intel на базе микроархитектур Haswell, Broadwell и Skylake. До сих порт на данных системах в Linux наблюдались проблемы c включением глубоких режимов энергосбережения из-за невозможности выставить параметры управления питанием для вывода интегрированной подсистемы SATA из активного состояния. Данные параметры не описаны в документации, а использование наугад приводило к проблемам с повреждением данных. В принятом в состав ядра 4.15 патче удалось подобрать параметры, при которых не замечено проблем, а время автономной работы при некоторых видах нагрузки существенно увеличивается;
- Для cgroup реализован контроллер ресурсов CPU (CPU resource controller) для управления расходованием ресурсов CPU группой задач, который завершил формирование функциональности единой унифицированной иерархии cgroup (Cgroup unified hierarchy или cgroup2). Сgroup2 был представлен в ядре 2.6.24 и объявлен стабильным в 4.5, но поддерживал только контроллеры памяти и ввода/вывода. Для реализации контроллера CPU требовалась поддержки гибкого управления потоками процесса (cgroup.type threaded), которая появилась только в ядре 4.14. В новом выпуске для cgroup2 также реализован код для учёта потребления ресурсов CPU, который может работать без включения контроллера ресурсов CPU;
- В инфраструктуру LivePatch, предоставляющую универсальный API для динамического применения патчей к работающему ядру (без перезагрузки и без остановки работы приложений), добавлена поддержка механизма теневых переменных («shadow variables»), позволяющего добавлять дополнительные данные в структуры ядра, что необходимо для горячего применения патчей, требующих изменения структуры данных. Кроме того, представлен callback-механизм для вызова кода ядра до или после применения патча к объекту (например, когда патч затрагивает глобальные данные или ассемблерный код);
- Расширены возможности, связанные с BPF: Утилита bpftool расширена средствами для проверки и манипуляции BPF-программами. Добавлены хуки для подключения LSM-модулей безопасности для организации контроля доступа к объектам BPF. Представлен новый контроллер устройств на основе BPF, использующий интерфейс cgroup2;
- Лимит на число таблиц сопоставления UID или GID для пространства идентификаторов пользователей (User namespaces) поднят с 5 до 340;
- В zRAM, подсистемы для хранения раздела подкачки в памяти в сжатом виде, добавлена поддержка алгоритма Zstd, обеспечивающего одно из лучших соотношений уровня сжатия к производительности. Zlib убран из списка рекомендованных алгоритмов;
- Поддержка архитектур
- Обеспечена базовая поддержка архитектуры RISC-V RISC-V, достаточная для загрузки, но пока недостаточная для практического использования в силу отсутствия драйверов устройств. RISC-V предоставляет открытую и гибкую систему машинных инструкций, позволяющую создавать микропроцессоры для произвольных областей применения, не требуя при этом отчислений и не налагая условий на использование. RISC-V позволяет создавать полностью открытые SoC и процессоры. В настоящее время на базе спецификации RISC-V разными компаниями и сообществами развивается 7 вариантов ядер микропроцессоров (Rocket, ORCA, PULPino, OPenV/mriscv, VexRiscv, Roa Logic RV12, SCR1) и три SoC (lowRISC, Rocket Chip, Briey), которые разрабатываются под различными свободными лицензиями (BSD, MIT, Apache 2.0);
- Для процессоров AMD Zen Ryzen, Threadripper и EPYC обеспечена корректная обработка данных с датчиков температуры;
- В код для поддержки архитектуры OpenRISC добавлена поддержка многопроцессорных систем (SMP);
- Для ахритектуры ARM64 добавлена поддержка механизма SVE (Scalable Vector Extension), предоставляющего расширенные инструкции для векторной обработки данных, дополняющие набор NEON средствами для ускорения операций векторизации для научных вычислений;
- Для архитектуры SPARC реализована поддержка механизма vDSO (virtual dynamic shared objects), предоставляющего в пространство пользователя ограниченный набор системных вызовов, доступный без переключения контекста;
- Оборудование
- В DRM-драйвер AMDGPU добавлена прослойка AMD DC (Display Core), в которой представлен переработанный код для управления отображением, необходимый для обеспечения поддержки нового поколения GPU (uGPU) Vega и Raven. DC также адаптирован для управления видеорежимами и других GPU (CIK, VI, Polaris), уже ранее поддерживаемых драйвером AMDGPU. По умолчанию DC включен только для GPU Vega и Raven, а для остальных требует явного указания опции «amdgpu.dc=1». Кроме того, в AMDGPU также добавлен ряд новшеств, таких как поддержка DisplayPort MST (Multi-Stream Transport) и средства для организации вывода звука через HDMI и DisplayPort. Размер изменений в AMDGPU составил более 132 тысяч строк кода.
- В DRM-драйвере Intel объявлена стабильной поддержка GPU чипов Coffee Lake. Добавлена поддержка датчиков температуры int340x, используемых в чипах Cannon Lake и Coffee Lake, реализована поддержка Display IPC (Isochronous Priority Control), обеспечена поддержка технологии Transparent Huge Page, появилась возможность управления приоритетом контекста из пространства пользователя (I915_CONTEXT_PARAM_PRIORITY);
- В В DRM-драйвере Nouveau появилась поддержка средства для мониторинга температуры графических карт NVIDIA GeForce GTX 1000 (Pascal);
- Добавлена поддержка ARM SoC и плат Allwinner R40 (Banana Pi M2 Ultra и Berry), CubieBoard 6 (Actions S500), Qualcomm MSM8974/Snapdragon 800 (Fairphone 2), Broadcom Hurricane 2, Khadas VIM2 (Amlogic S912), NanoPi NEO Plus2, Pistachio (NXP i.MX6), Renesas R-Car V3M, Amlogic Meson-AXG A113D;
- Добавлена поддержка звуковой подсистемы APU AMD Stoney Ridge и AMD Raven Ridge;
- Добавлена поддержка пятого поколения SATA-контроллеров Cavium;
- Реализована шина ac97 с реализацией модели устройство/драйвер для чипов с поддержкой звуковых кодеков AC97. Шина предоставляет средства для автоматического обнаружения устройств AC97;
- Удалён код для обеспечения поддержки звуковой подсистемы OSS (Open Sound System). Возможность сборки драйверов OSS (Open Sound System) была отключена по умолчанию в выпуске ядра 4.12. В нынешнем ядре драйверы OSS из состава ядра. В качестве причин удаления упоминается плохое сопровождение, невостребованность и желание избавиться от вызовов set_fs (), которые применяются в данных драйверах. Пользователям, которым необходим API OSS рекомендуется использовать уровень эмуляции OSS, предоставляемый звуковой подсистемой ALSA.
Одновременно Латиноамериканский Фонд свободного ПО сформировал вариант полностью свободного ядра 4.15 — Linux-libre 4.15-gnu, очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В новом выпуске отключена загрузка несвободных прошивок в драйверах для сенсорных экранов и brcmstb (Broadcom STB SoC). Обновлён код чистки блобов в драйверах AMDGPU, i915, adreno, tegra, silead dmi и atomisp. Прекращена чистка драйверов ap1302 и oss, в связи с их удалением из ядра.
© OpenNet