Релиз ядра Linux 3.16
После двух месяцев разработки Линус Торвальдс анонсировал релиз ядра Linux 3.16. Среди наиболее заметных улучшений: единая унифицированная иерархия cgroup, доработка нового слоя блочных устройств blk-mq, JIT-компиляция BPF-фильтров seccomp, TCP Fast Open поверх IPv6, ускорение работы драйвера Radeon. В новую версию принято около 11 тысяч исправлений от 1300 разработчиков, размер патча — 37 Мб (изменения затронули 9809 файлов, добавлено 514025 строк кода, удалено 267461 строк). Около 42% всех представленных в 3.16 изменений связаны с драйверами устройств, примерно 24% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 12% связано с сетевым стеком, 5% — файловыми системами и 5% c внутренними подсистемами ядра.
Из наиболее интересных новшеств можно отметить:
Память и системные сервисы Новая версия интерфейса cgroup, в котором представлена единая унифицированная иерархия cgroup (Cgroup unified hierarchy), пришедшая на смену гибкой, но не получившей практическое применение, поддержке произвольного числа иерархий cgroup, определяющих применение правил к группам процессов (например, одна иерархия для распределения ресурсов CPU, а другая для регулирования потребления памяти). Изначально применяемый подход приводил к трудностям организации взаимодействия между обработчиками разных иерархий и к дополнительным затратам ресурсов ядра при применении правил для процесса, упоминаемого в разных иерархиях. Унифицированная иерархия cgpoup пока добавлена в качестве опции, для включения которой при монтировании cgroup следует использовать флаг __DEVEL__; В работающем на уровне ядра коде EFI обеспечена поддержка обработки символов Unicode и добавлена возможность сохранения и загрузки состояния регистров FPU при обращении к EFI, так как прошивки EFI могут использовать FPU; Начальная поддержка EFI для ARM64 (aarch64); Сетевая подсистема Обеспечена поддержка режима быстрого открытия TCP-соединений (TFO — TCP Fast Open) для соединений, установленных поверх IPv6. Режим TFO позволяет сократить число шагов установки соединения за счёт комбинирования в один запрос первого и второго шагов классического 3-этапного процесса согласования соединения и даёт возможность отправки данных на начальном этапе установки соединения. В сетевых сокетах для протокола SCTP обеспечена поддержка нагруженного пулинга, активируемого через опцию SO_BUSY_POLL и позволяющего сократить задержки при получении данных с сетевых интерфейсов с очень интенсивным трафиком; Добавлен внутренний API для программной поддержки TSO (TCP segmentation offload) в драйверах. API уже задействован в драйверах mvneta, mv643xx_eth и fec; Дисковая подсистема, ввод/вывод и файловые системы Доведена до готовности запланированная функциональность нового блочного слоя blk-mq (multiqueue block layer), рассчитанного на организацию многопоточного доступа к данным на многоядерных системах и позволяющего эффективно использовать возможности современных SSD-накопителей. Архитектура нового блочного слоя основана на двухуровневой модели очередей: на первом уровне функционируют очереди для передачи запросов ввода/вывода, привязанные к каждому CPU. Из данных очередей запросы направляются в очереди второго уровня, которые координируют обращение к оборудованию. В зависимости от конфигурации системы, числа CPU и накопителей соотношение между очередями первого и второго уровня может составлять от 1 к 1 до N к M. Из переведённых на blk-mq драйверов отмечается драйвер для Flash-чипов Micron с интерфейсом PCI (mtip32xx). В ядре 3.17 ожидается поддержка Multiqueue SCSI. В файловой системе Btrfs представлен новый ioctl-вызов BTRFS_IOC_TREE_SEARCH_V2 для поиска заданных ключей в ФС. BTRFS_IOC_TREE_SEARCH_V2 является более гибким вариантом вызова BTRFS_IOC_TREE_SEARCH, позволяющий использовать буфер большего размера при получении результатов поиска (ранее использовался фиксированный буфер в 3992 байт); Интегрированы патчи для увеличения надёжности локального (loopback) монтирования NFS-разделов. Переработан код NFS для обработки внешнего представления данных (XDR), что позволило обеспечить поддержку ACL, размером более 4Кб, и возвращать результаты readdir () блоками более 4Кб; Виртуализация и безопасность Обеспечена возможность установки атрибутов доступа только для чтения (RO) и запрета исполнения (NX) для областей данных модулей ядра, на начальном этапе их загрузки, ещё до начала разбора параметров модуля; Добавлена поддержка JIT-компиляции для BPF-фильтров, используемых в подсистеме seccomp, используемой для контроля обращения к системным вызовам; В виртуальных сетевых интерфейсах Xen обеспечена поддержка множественных очередей (multi-queue), что позволило добиться значительного повышения производительности. В реализацию Xen для архитектуры ARM добавлена поддержка приостановки и возобновления работы гостевых систем (suspend/resume); В гипервизор KVM добавлена начальная поддержка little-endian процессоров POWER8. Для архитектуры s390 внесены оптимизации в работу KVM, обеспечена возможность миграции виртуальных окружений и поддержка GDB; В модуль расширенной верификации (EVM) добавлена опция для учёта расширенных атрибутов (xattrs) в рассчитанном для файла значении HMAC (Hash-based message authentication code). В частности, при расчёте HMAC теперь могут быть добавлены атрибуты SMACK64EXEC, SMACK64TRANSMUTE и SMACK64MMAP; Аппаратные архитектуры Для архитектуры ARM добавлена поддержка ждущего режима (hibernation); Для 64-разрядной little-endian архитектуры PowerPC добавлена поддержка ELFv2 ABI и представлена новая обвязка для загрузчика; Поддержка 64-разрядного варианта виртуального процессора Goldfish, нацеленного на обеспечение эмуляции платформы Android и используемый при разработке под данную платформу; Переработана поддержка многопроцессорности для Allwinner A31 SoC. Добавлена поддержка SMP для Marvell Armada 375 и 38x SoC; Оборудование В DRM-драйвере Nouveau добавлена поддержка устройств NVIDIA Tesla K40 GK110B и начальная поддержка NVIDIA Tegra K1 GK20A; В DRM-дравер Radeon внесены изменения, ускоряющие доступ к памяти для GPU, использующих виртуальную память (GPUVM). В итоге, наблюдается повышение производительности графической подсистемы при использовании свободного драйвера вместе с GPU на основе архитектуры GCN; В драйверах для управления подсветкой экрана ноутбуков по умолчанию задействован интерфейс ACPI video вместо ранее используемого ACPI backlight, что позволило решить проблемы с работой на устройствах с некорректно функционирующими Win8 BIOS; Поддержка новых ARM Soc: ST Microelectronics STiH407; Freescale i.MX6SX; Samsung EXYNOS 3250, 5260, 5410, 5420, 5800; LSI Axxia AXM55xx. Поддержка звуковых контроллеров NVIDIA Tegra HD Audio и звуковых плат Google Snow. Добавлена порция новых кодеков: Realtek ALC5651, ALC5677, Analog Devices ADAU1361, ADAU1761, ADAU1381, ADAU1781, Cirrus Logic CS42L56, Intel Baytrail MAX98090; Поддержка интерфейса SSI (Synchronous Serial Interface, адаптация RS422 для использования в сенсорах); Добавлен драйвер для модема, поставляемого в коммуникаторе Nokia N900; Поддержка новых сетевых контроллеров: Broadcom BCM7xxx Ethernet, STMicroelectronics ST21NFCA NFC, Renesas R-Car SoC CAN, Geschwister Schneider USB/CAN, Xilinx CAN, Hisilicon HIX5HD2, AMD SoC 10GbE Ethernet.
© OpenNet