После двух месяцев разработки Линус Торвальдс анонсировал релиз ядра Linux 4.1. Среди наиболее заметных улучшений: поддержка шифрования в ФС Ext4, новая виртуальная файловая система tracefs, экспериментальная реализация распределённого RAID 1, поддержка MPLS, однопользовательский режим для встраиваемых систем, блочное устройство PMEM для энергонезависимой памяти, интеграция наработок Intel по виртуализации GPU. Также вышел Linux-libre 4.1 — модификация ядра Linux от латиноамериканского фонда Свободного ПО (FSFLA), очищенная от проприетарных компонентов и документации к ним.
В новую версию принято около 12 тысяч исправлений от более чем 1500 разработчиков, размер патча - 33 Мб (изменения затронули 10094 файлов, добавлено 454027 строк кода, удалено 253880 строк). Около 41% всех представленных в 4.1 изменений связаны с драйверами устройств, примерно 21% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 13% связано с сетевым стеком, 6% - файловыми системами и 5% c внутренними подсистемами ядра. 11.2% изменений внесено сотрудниками компании Intel, 9.2% - Red Hat, 3.7% - SUSE, 3.3% - Linaro, 3.3% - IBM, 3.1% - Google, 2.9% - Samsung, 2.4% - Renesas Electronics, 1.9% - Texas Instruments, 1.4% - Broadcom, 1.3% - Oracle, 1.3% - Cisco, 1.1% - ARM.
Из наиболее интересных новшеств можно отметить:
Дисковая подсистема, ввод/вывод и файловые системы
В файловую систему Ext4 добавлена поддержка шифрования отдельных частей ФС, например, отдельных директорий. Шифруется только содержимое и имена файлов, а метаданные о файлах, такие как размер и права доступа, остаются видимыми. Ключ шифрования определяется во время монтирования ФС. Настройки шифрования выполняются посредством xattr. Новые файлы или директории могут быть зашифрованы отдельно или автоматически, в случае если они создаются в уже зашифрованной директории.
Зашифрованные данные размещаются с использованием метода AES-256-XTS, для имён файлов применяется AES-256-CBC. Для каждого inode генерируется свой уникальный 512-битовый ключ шифрования, что позволяет блокировать атаки в ситуациях, когда злоумышленнику известна часть зашифрованного содержимого. По сравнению с применением надстроек, таких как dm-crypt и eCryptFS, интеграция поддержки шифрования непосредственно в драйвер ФС, позволяет добиться более высокой производительности, использовать текущий код для обработки прав доступа и обеспечить возможность работы с незашифрованной частью файлов на устаревших системах.
В подсистему MD (RAID) добавлена экспериментальная возможность управления массивами RAID 1, распределёнными по узлам кластера при помощи DLM (Distributed Lock Manager);
Проведена работа по увеличению производительности программного RAID5/6 и процесса ресинхронизации. В RAID5/6 добавлена поддержка пакетных операций блоками в 4К. Оптимизирован цикл операций чтение-модификация-запись для больших RAID 6, содержащих более 6 дисков. Обеспечено динамическое изменение размера кэша RAID 6.
Обеспечена возможность использования XFS в качестве слоя OverlayFS, благодаря добавлению в XFS поддержки флага RENAME_WHITEOUT. Кроме того, в XFS для вызова fallocate() добавлен флаг FALLOC_FL_INSERT_RANGE, позволяющий приложениям добавлять пустые области в файл.
В Btrfs добавлено несколько важных исправлений, которые решили проблемы с работой файловых систем, размером более 20 Тб и файлов больше 3 Тб.
Добавлена новая специализированная виртуальная ФС tracefs, предназначенная для упрощения доступа из пространства пользователя к данным трассировки ядра Linux. ФС по умолчанию монтируется в директорию /sys/kernel/debug/tracing и применяется в ситуациях, когда использование debugfs невозможно из соображений безопасности (подсистемы ядра могут выводить через debugfs закрытые сведения). Tracefs позволяет администратору получить возможность использования только интерфейса трассировки, без открытия доступа к другим возможностям debugfs, а также обеспечить поддержку создания буферов трассировки через использование системных вызовов mkdir и rmdir.
Добавлен драйвер PMEM с реализацией блочного устройства для хранения данных в энергонезависимой памяти (NVM, non-volatile memory), сочетающей производительность ОЗУ с возможностью постоянного хранения содержимого. Для процессора энергонезависимая память выглядит как обычное ОЗУ (отображается в пространство системной памяти в виде больших регионов физической памяти), но при этом данные не теряются после прекращения подачи энергии. При этом подобная память пока медленнее обычного ОЗУ при выполнении операций записи. Чтобы отделить энергонезависимую память от обычного ОЗУ на первом этапе поддержки данной технологии решено представить новый вид памяти как блочное устройство.
В Device-Mapper добавлена новая цель "dm-log", через которую можно организовать сохранение на блочное устройство логов всех операций, например, с целью отладки работы файловой системы.
Device-Mapper теперь может работать в качестве блочного устройства с многоуровневой моделью очередей (multiqueue), рассчитанной на организацию многопоточного доступа к данным на многоядерных системах и позволяющего эффективно использовать возможности современных SSD-накопителей. По умолчанию данный режим отключен и требует явного указания в настройках ядра параметра CONFIG_DM_MQ_DEFAULT.
Память и системные сервисы
Добавлена возможность сборки ядра без поддержки многопользовательских операций с использованием в системе только пользователя root. Возможность предназначена для создания урезанных минималистичных решений для встраиваемых систем, для которых важен каждый килобайт сэкономленной памяти.
Добавленная в прошлом выпуске базовая инфраструктура, предоставляющая универсальный API для горячего наложения патчей на ядро, расширена поддержкой архитектуры S/390.
В планировщике задач переработан код отслеживания нагрузки, который теперь не зависит от скорости CPU при расчёте создаваемой процессом нагрузки. Новый подход даёт возможность принимать более эффективные решения по балансировке нагрузки в условиях непостоянной тактовой частоты и при использовании на асимметричных системах, сочетающих различные типы CPU.
Добавлена новая опция загрузки ядра "efi=debug", при которой выводится дополнительная отладочная информация при загрузке на системах с EFI;
Для шины I2C реализована возможность работы Linux в роли slave-узла на контроллерах с поддержкой slave-режима;
В утилиту perf добавлена возможность прикрепления eBPF-обработчиков к проверочным вызовам внутри ядра (kprobes). Появилась поддержка аппаратной трассировки (PT, Processor Trace) и мониторинга качества работы кэша (CQM, Cache QoS Monitoring), представленных в следующем поколении CPU Intel Broadwell.
Виртуализация и безопасность
В состав подсистемы прямого рендеринга (DRM) интегрирован менеджер виртуальной графической памяти ("virtual GEM"), необходимый для организации работы виртуальных графических устройств, который можно использовать для организации программного рендеринга.
Добавлена поддержка виртуального GPU (vGPU), развиваемого компанией Intel в рамках проекта XenGT, предоставляющего решение для полной виртуализации GPU и обеспечения работы прослойки для взаимодействия из гостевых систем с реальными GPU Intel. XenGT подразумевает поддержание отдельных виртуальных GPU для каждого виртуального окружения, за которыми закрепляется часть критичных для обеспечения высокой производительности ресурсов реального GPU. Виртуальный GPU позволяет использовать внутри гостевых систем обычные видеодрайверы, не требующие вмешательства гипервизора для обеспечения должной производительности.
В подсистему Smack добавлен новый режим доступа bring-up (метка "b"), предназначенный для отладки конфигураций защиты. Режим реализован в качестве компромисса между пожеланиями пользователей, желающими получить разрешительный режим, и принципиальной позицией автора Smack. В итоге, для правил добавлена новая метка "b", при которой в случае успешного срабатывания добавляется подробная запись в лог, а в случае сбоя генерируется событие аудита.
На архитектуре MIPS в систему виртуализации KVM добавлена поддержка режима SIMD и устройства для вычислений с плавающей запятой. На архитектуре ARM в KVM добавлена поддержка подстановки прерываний через вызов irqfd();
Для подсистемы virtio представлен новый драйвер virtio-input, обеспечивающий сбор и перенаправление событий от устройств ввода в виртуальные устройства.
Сетевая подсистема
Реализация механизма MPLS для маршрутизации пакетов с использованием многопротокольной коммутации по меткам;
В стек IPv6 добавлена поддержка RFC-7217 (генерация неизменных идентификаторов интерфейса, без привязки к MAC-адресу).
В модуль классификации сетевого трафика cls_bpf добавлена поддержка использования обработчиков пакетов, оформленных в виде расширенных BPF-программ (eBPF). С практической стороны, данное нововведение позволяет создавать произвольные фильтры трафика на языке Си, а затем транслировать их в eBPF для выполнения в ядре внутри виртуальной машины BPF. Поддержка eBPF также добавлена в модуль act_bpf, что позволяет производить изменение данных в пакетах, используя новую функцию bpf_skb_store_bytes(). Из новшество также отмечается возможность доступа из eBPF к выборочным полям структур данных сокетов.
Оборудование
Для архитектуры ARM64 представлена поддержка ACPI (необходимость поддержки ACPI для ARM вызывала вопросы, так как для определения оборудования на системах ARM обычно используется механизм device tree).
Для архитектуры MIPS добавлена поддержка XPA-адресации, позволяющей манипулировать адресами физической памяти длиной до 40 бит на 32-разрядных системах.
В DRM/KMS-драйвере Nouveau добавлена поддержка аппаратного ускорения для карт GeForce GTX 750, работающего без использования элементов бинарных прошивок.
В драйвер Radeon добавлена поддержка многопоточной передачи данных через порт DisplayPort (MST, Multi-Stream Transport). Поддержка MST необходима для подключения мониторов высокого разрешения (4K/5K), которые подключаются к системе через два порта DisplayPort.
Расширены возможности драйверов для видеокарт Intel, в том числе осуществлён переход на использование механизмов атомарного управления видеорежимами и включена поддержка DRRS (dynamic refresh rate switching).
Проведена реорганизация звуковой системы HD-audio, которая переведена на новую шину "hdaudio", упрощающую управление устройствами.
В Video4Linux добавлена поддержка тюнеров TechnoTrend TT-connect S2-4600 DVB-S/S2 и Hauppauge HVR-955Q ATSC/QAM, демодуляторов LG Electronics LGDT3306A, видеоподсистемы Xilinx.
Поддержка SoC-плат IMG Pistachio, Marvell Armada 39x, Annapurna Labs Alpine и Xilinx ZynqMP.