После двух месяцев разработки Линус Торвальдс анонсировал (https://lkml.org/lkml/2015/8/30/96) релиз ядра Linux 4.2 (http://kernel.org). Среди наиболее заметных улучшений: интеграция драйвера 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 внутренними подсистемами ядра.
Из наиболее интересных новшеств (http://kernelnewbies.org/Linux_4.2) можно отметить:
-
Дисковая подсистема, ввод/вывод и файловые системы
- В F2FS, развиваемую компанией Samsung высокопроизводительную файловую систему для Flash-накопителей, добавлена возможность шифрования на уровне отдельных файлов и поддержка операций FALLOC_FL_ZERO_RANGE и FALLOC_FL_COLLAPSE_RANGE для управления резервированием пустых областей через вызов fallocate();
- В ext4 добавлена поддержка опции FALLOC_FL_INSERT_RANGE (https://lwn.net/Articles/629965/), позволяющей осуществить подстановку обнулённого блока в существующий файл через вызов fallocate();
- В XFS появилась возможность прямого доступа к устройствам постоянной памяти (persistent-memory), применяя интерфейс DAX;
- В файловой системе CIFS добавлена экспериментальная поддержка протокола SMB 3.1.1;
- В модуле dm-cache, предназначенном для ускорения доступа к жестким дискам через применение кэширования на SSD-накопителях, добавлена (http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.g... поддержка SMQ-кэширования (stochastic-multi-queue), решающего проблемы с большим потреблением памяти при кэшировании с привлечением нескольких очередей (multi-queue);
-
Память и системные сервисы
- Код выборки по именам файлов переработан для исключения рекурсии, что позволило сократить нагрузку на стек, повысить надёжность работы сложных систем хранения и убрать лимит на глубину вложенных символических ссылок;
- В подсистему профилирования perf добавлена (http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.g...поддержка функциональности PEBSv3 (Precise Event-Based Sampling), присутствующей в новых процессорах Intel. Улучшена поддержка возможностей Intel PT (аппаратный трассировщик CPU) и Intel CQM (мониторинг качества утилизации кэша). Значительно расширены возможности утилиты perf: в 'perf top' реализована возможность динамического включения/выключения событий, в 'perf probe' добавлена поддержка глобальных масок имён функций и возможность сбора данных о всех аргументах функций, проведена подготовка к внедрению многопоточного варианта команды 'perf report';
- В систему обработки данных от термодатчиков, добавлен новый power-allocator (https://lkml.org/lkml/2014/12/5/434), сочетающий раздельную обработку параметров нагрева отдельных элементов с попыткой поддержания общей температуры системы в заданных границах;
- Переписан ассемблерный код для архитектуры x86, переработан (http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.g... и реструктуризирован код для взаимодействия с модулями операций с плавающей запятой (FPU);
- Добавлена новая подсистема ядра "libnvdimm (https://www.kernel.org/doc/Documentation/nvdimm/nvdimm.txt)&... предоставляющая различные методы доступа к массивам энергонезависимой памяти (NVM, non-volatile memory), сочетающей производительность ОЗУ с возможностью постоянного хранения содержимого. Для процессора энергонезависимая память выглядит как обычное ОЗУ (отображается в пространство системной памяти в виде больших регионов физической памяти), но при этом данные не теряются после прекращения подачи энергии. Для записи данных в NVM-память представлены функции memremap_pmem(), memcpy_to_pmem() и wmb_pmem(). Обеспечена возможность представления регионов NVM-памяти в качестве отдельных виртуальных устройств. Через модуль "BTT" (block translation table) реализован слой для атомарного посекторного доступа к NVM-массивам, представленным в форме блочных устройств;
- Изменён подход к монтированию псевдо-ФС sysfs и /proc. Поддиректории для точек монтирования (например, /sys/debug) теперь специально помечены и монтирование допускается только в них. Добавлены средства (https://lwn.net/Articles/647757/) для контроля соответствия флагов для уже примонтированных и новых экземпляров псевдо-ФС (для монтирования в контейнерах);
-
Виртуализация и безопасность
- Добавлен (https://lwn.net/Articles/642166/) новый код формирования энтропии для генератора псевдослучайных чисел, основанный на учёте отклонения времени повторного исполнения определённого набора инструкций на CPU (CPU execution time jitter), которое зависит от множества внутренних факторов и непредсказуемо без физического контроля над CPU. Новый код решает проблему с недостаточным числом источников энтропии на встраиваемых устройствах;
- В гипервизор KVM добавлена поддержка множественных адресных пространств и режима системного управления (SMM (https://ru.wikipedia.org/wiki/System_Management_Mode), System Management Mode). Данные возможности позволяют реализовать поддержку режима верифицированной загрузки (Secure Boot) для гостевых систем;
- Реализована возможность стековой организации (https://lwn.net/Articles/635771/) модулей LSM (Linux Security Modules), позволяющей выстраивать цепочки обработчиков, задействуя сразу несколько модулей. Например, теперь можно подключить специализированные LSM-модули в качестве надстройки поверх таких систем, как SELinux, Smack, TOMOYO и AppArmor.
- Поддержка устройства virtio-gpu (виртуальный GPU), которое пока ограничено возможностью ускорения 2D-графики;
-
Сетевая подсистема
- Добавлен новый классификатор пакетов "Flower", который позволяет классифицировать пакеты на основе настраиваемой комбинации ключей и масок пакетов;
- Интегрирована поддержка туннелей GENEVE (http://tools.ietf.org/html/draft-gross-geneve-02) (Generic Network Virtualization Encapsulation);
- В подсистему netfilter добавлена поддержка классификации пакетов по времени их поступления (ingress-time);
- В сокетах Unix-domain обеспечена поддержка системного вызова splice() (https://en.wikipedia.org/wiki/Splice_%28system_call...
- Добавлен алгоритм контроля перегрузки (congestion-control), учитывающий отклонение величины ожидания (Delay-gradient (https://lwn.net/Articles/645115/));
-
Оборудование
- В состав ядра принят код драйвера AMDGPU (https://www.opennet.ru/opennews/art.shtml?num=42078), разработанного для воплощения в жизнь новой стратегии продвижения драйверов для графических процессоров компании AMD, в рамках которой модуль ядра является полностью открытым, а проприетарный драйвер Catalyst будет включать лишь набор проприетарных библиотек, реализующих фирменные варианты OpenGL, OpenCL и т.п. Добавленный в ядро драйвер отвечает за поддержку GPU на основе GCN, начиная с R9 285 "Tonga" (семейство Volcanic Islands) и более новых;
- Возвращена поддержка архитектуры Renesas H8/300, которая несколько лет назад была исключена из ядра из-за заброшенного состояния и отсутствия сопровождающего. Новая реализация пер...
URL: https://lkml.org/lkml/2015/8/30/96
Новость: https://www.opennet.ru/opennews/art.shtml?num=42843