Релиз ядра Linux 4.2
После двух месяцев разработки Линус Торвальдс анонсировал релиз ядра Linux 4.2. Среди наиболее заметных улучшений: интеграция драйвера AMDGPU, поддержка стекового подключения LSM-модулей, новый метод формирования энтропии для генератора псевдослучайных чисел, новый классификатор пакетов Flower, проведена оптимизация ассемблерного кода для архитектуры x86, поддержка туннелей GENEVE, средства шифрования в F2FS, драйвер virtio-gpu с реализацией виртуального GPU, новая подсистема libnvdimm.
В новую версию принято около 13 тысяч исправлений от более чем 1569 разработчиков, размер патча — 64 Мб (в два раза больше, чем патч с ядром 4.1, например, новый драйвер AMDGPU занимает более 400 тысяч строк кода). Изменения затронули 10926 файлов, добавлено 1081330 строк кода, удалено 282089 строк). Около 42% всех представленных в 4.2 изменений связаны с драйверами устройств, примерно 20% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 12% связано с сетевым стеком, 4% — файловыми системами и 4% c внутренними подсистемами ядра.
Из наиболее интересных новшеств можно отметить:
- Дисковая подсистема, ввод/вывод и файловые системы
- В F2FS, развиваемую компанией Samsung высокопроизводительную файловую систему для Flash-накопителей, добавлена возможность шифрования на уровне отдельных файлов и поддержка операций FALLOC_FL_ZERO_RANGE и FALLOC_FL_COLLAPSE_RANGE для управления резервированием пустых областей через вызов fallocate ();
- В ext4 добавлена поддержка опции FALLOC_FL_INSERT_RANGE, позволяющей осуществить подстановку обнулённого блока в существующий файл через вызов fallocate ();
- В XFS появилась возможность прямого доступа к устройствам постоянной памяти (persistent-memory), применяя интерфейс DAX;
- В файловой системе CIFS добавлена экспериментальная поддержка протокола SMB 3.1.1;
- В модуле dm-cache, предназначенном для ускорения доступа к жестким дискам через применение кэширования на SSD-накопителях, добавлена поддержка SMQ-кэширования (stochastic-multi-queue), решающего проблемы с большим потреблением памяти при кэшировании с привлечением нескольких очередей (multi-queue);
- В libata улучшена поддержка NCQ (Native Command Queuing) TRIM. Для включения и отключения NCQ TRIM представлены параметры ncqtrim и noncqtrim;
- Память и системные сервисы
- Код выборки по именам файлов переработан для исключения рекурсии, что позволило сократить нагрузку на стек, повысить надёжность работы сложных систем хранения и убрать лимит на глубину вложенных символических ссылок;
- В подсистему профилирования perf добавлена поддержка функциональности PEBSv3 (Precise Event-Based Sampling), присутствующей в новых процессорах Intel. Улучшена поддержка возможностей Intel PT (аппаратный трассировщик CPU) и Intel CQM (мониторинг качества утилизации кэша). Значительно расширены возможности утилиты perf: в 'perf top' реализована возможность динамического включения/выключения событий, в 'perf probe' добавлена поддержка глобальных масок имён функций и возможность сбора данных о всех аргументах функций, проведена подготовка к внедрению многопоточного варианта команды 'perf report';
- В систему обработки данных от термодатчиков, добавлен новый power-allocator, сочетающий раздельную обработку параметров нагрева отдельных элементов с попыткой поддержания общей температуры системы в заданных границах;
- Многочисленные оптимизации и переработки ассемблерного кода для архитектуры x86 (в дальнейшем часть кода планируют переписать на Си). Переработан и реструктуризирован код для взаимодействия с модулями операций с плавающей запятой (FPU);
- Добавлена новая подсистема ядра «libnvdimm», предоставляющая различные методы доступа к массивам энергонезависимой памяти (NVM, non-volatile memory), сочетающей производительность ОЗУ с возможностью постоянного хранения содержимого. Для процессора энергонезависимая память выглядит как обычное ОЗУ (отображается в пространство системной памяти в виде больших регионов физической памяти), но при этом данные не теряются после прекращения подачи энергии. Для записи данных в NVM-память представлены функции memremap_pmem (), memcpy_to_pmem () и wmb_pmem (). Обеспечена возможность представления регионов NVM-памяти в качестве отдельных виртуальных устройств. Через модуль «BTT» (block translation table) реализован слой для атомарного посекторного доступа к NVM-массивам, представленным в форме блочных устройств;
- Изменён подход к монтированию псевдо-ФС sysfs и /proc. Поддиректории для точек монтирования (например, /sys/debug) теперь специально помечены и монтирование допускается только в них. Добавлены средства для контроля соответствия флагов для уже примонтированных и новых экземпляров псевдо-ФС (для монтирования в контейнерах);
- Виртуализация и безопасность
- Добавлен новый код формирования энтропии для генератора псевдослучайных чисел, основанный на учёте отклонения времени повторного исполнения определённого набора инструкций на CPU (CPU execution time jitter), которое зависит от множества внутренних факторов и непредсказуемо без физического контроля над CPU. Новый код решает проблему с недостаточным числом источников энтропии на встраиваемых устройствах;
- В гипервизор KVM добавлена поддержка множественных адресных пространств и режима системного управления (SMM, System Management Mode). Данные возможности позволяют реализовать поддержку режима верифицированной загрузки (Secure Boot) для гостевых систем;
- Реализована возможность стековой организации модулей LSM (Linux Security Modules), позволяющей выстраивать цепочки обработчиков, задействуя сразу несколько модулей. Например, теперь можно подключить специализированные LSM-модули в качестве надстройки поверх таких систем, как SELinux, Smack, TOMOYO и AppArmor.
- Поддержка устройства virtio-gpu (виртуальный GPU), развиваемого в рамках проекта Virgil. Драйвер предоставляет средства для управления видеорежимами для гостевых систем KVM/QEMU с поддержкой VirtIO. В настоящее время драйвером пока поддерживается только возможность ускорения 2D-графики, поддержка 3D/OpenGL появится в дальнейшем;
- Сетевая подсистема
- Добавлен новый классификатор пакетов «Flower», который позволяет классифицировать пакеты на основе настраиваемой комбинации ключей и масок пакетов;
- Интегрирована поддержка туннелей GENEVE (Generic Network Virtualization Encapsulation);
- В подсистему netfilter добавлена поддержка классификации пакетов по времени их поступления (ingress-time);
- В сокетах Unix-domain обеспечена поддержка системного вызова splice ();
- Добавлен алгоритм контроля перегрузки (congestion-control), учитывающий отклонение величины ожидания (Delay-gradient);
- Оборудование
- В состав ядра принят код драйвера AMDGPU, разработанного для воплощения в жизнь новой стратегии продвижения драйверов для графических процессоров компании AMD, в рамках которой модуль ядра является полностью открытым, а проприетарный драйвер Catalyst будет включать лишь набор проприетарных библиотек, реализующих фирменные варианты OpenGL, OpenCL и т.п. Добавленный в ядро драйвер отвечает за поддержку GPU на основе GCN, начиная с R9 285 «Tonga» (семейство Volcanic Islands) и более новых;
- Возвращена поддержка архитектуры Renesas H8/300, которая несколько лет назад была исключена из ядра из-за заброшенного состояния и отсутствия сопровождающего. Новая реализация переписана и избавлена от ранее наблюдаемых ошибок;
- Расширены возможности драйверов для видеокарт Intel, NVIDIA (Nouveau) и AMD (Radeon);
- Поддержка SATA-контроллеров Broadcom STB AHCI и CEVA AHCI;
- Поддержка третьего поколения блоков управления памятью для процессоров ARM;
- Поддержка беспроводных мышей Logitech M560 и контроллеров движения Sony;
- Поддержка беспроводных чипов Mediatek MT7601U и Atmel WILC1000, а также сетевых контроллеров Cavium ThunderX, Mellanox Technologies ConnectX-4, Texas Instruments DP83867 Gigabit PHY, Cavium LiquidIO и Unisys visornic.
© OpenNet