После двух месяцев разработки Линус Торвальдс анонсировал релиз ядра Linux 3.17. Среди наиболее заметных улучшений: новые системные вызовы getrandom и seccomp, возможность обращения к областям памяти через файловый дескриптор (memfd), поддержка ограничения операций с файлом через дескриптор, включена по умолчанию реализация Render Nodes, поддержка средств синхронизации dma-buf, прекращена поддержка архитектур POWER3 и rs64.

В новую версию принято 12354 исправлений от 1300 разработчиков, размер патча - 54 Мб (изменения затронули 10605 файлов, добавлено 653577 строк кода, удалено 668166 строк). Около 46% всех представленных в 3.17 изменений связаны с драйверами устройств, примерно 18% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 12% связано с сетевым стеком, 5% - файловыми системами и 3% c внутренними подсистемами ядра.

Из наиболее интересных новшеств можно отметить:

  • Память и системные сервисы
    • Поддержка техники маппинга памяти memfd, при которой область памяти идентифицируется через файловый дескриптор, который может передаваться между процессами. По сути можно выделить память как по malloc, но обращаться к ней как с файлом, по файловому дескриптору. Управление производится через системный вызов memfd_create();
    • Представлена техника запечатывания файла (file sealing), которая позволяет ограничить выполняемые над файлом операции, например, запретить на уровне файлового дескриптора изменение содержимого файла, увеличение или уменьшение размера, т.е. можно передать дескриптор другому процессу защитив данные от изменения. С практической стороны данная функциональность необходима для заморозки содержимого memfd, чтобы после передачи файлового дескриптора не позволить другим процессам изменять связанную с memfd область памяти. File sealing и memfd являются ключевыми компонентами, необходимыми для реализации kdbus (аналог D-Bus внутри ядра);
    • Включена по умолчанию технология Render Nodes, подразумевающая разделение монолитных устройств /dev/dri/card{num} на две категории: Rendering Nodes (/dev/dri/renderD{num}), отвечающие за аппаратное ускорение рендеринга и обсчет вычислительных заданий GPGPU, и ModeSetting Nodes (/dev/dri/modeset{num}), обеспечивающие переключение видеорежимов и управление экраном. Таким образом предоставлены более гибкие средства для управления правами доступа и возможность выполнения вычислений на GPU или рендеринга без вывода на экран и без привязки к активному дисплею. До реализации Render Nodes все операции рендеринга и смены видеорежимов выполнялись через один интерфейс, что приводило к невозможности независимого выставления прав на выполнение операций ускорения рендеринга и переключение видеорежимов. Поддержка Render Nodes присутствует в драйверах i915, Radeon и Nouveau;
    • Доступна переписанная реализация API DMA-BUF, позволяющего организовать совместное использования буферов драйверами и различными подсистемами (V4L2, DRI и т.п.). API расширен средствами для синхронизации DMA-буферов ("DMA-BUF Fences") между разными устройствами (cross-device synchronization) и координации взаимодействия между ними. Например, при использовании единого буфера для драйверов web-камеры и видеокарты, DMA-BUF Fences позволяет дождаться заполнения буфера web-камерой перед отрисовкой GPU, чтобы избежать вывода не полностью выведенного в буфер изображения. API доступен для всех модулей ядра и экспортируется в категории EXPORT_SYMBOL, а не только для распространяемых под лицензией GPL (EXPORT_SYMBOL_GPL), что позволяет решить проблемы с организацией взаимодействия свободных и проприетарных драйверов при организации работы гибридных графических систем. Например, в проприетарном драйвере NVIDIA может быть реализована поддержка технологии Optimus, дающей возможность на лету переключаться между встроенной энергоэффективной видеокартой на базе GPU Intel и дискретной картой NVIDIA (использование DMA-BUF в драйвере NVIDIA требуется для организации записи во фреймбуфер драйвера Intel); .
    • В утилиту perf добавлена возможность трассировки обращений к невыделенным страницам памяти (page-fault) и генерации связанной с такими обращениями статистики. В команде "perf timechart" реализована генерация диаграмм, отображающих события ввода/вывода;
    • Внесена серия исправлений, связанных с решением проблемы 2038 года, которая приведёт к переполнению 32-разрядных эпохальных счётчиков времени;
  • Сетевая подсистема
    • В netfilter прекращена поддержка цели "ULOG", которая давно объявлена устаревшей (c 2006 года рекомендуется использовать "NFLOG");
    • Убран гриф экспериментальной разработки (дерево staging) со стека USB/IP, позволяющего организовать доступ к удалённым USB-устройствам, подключенным к другим компьютерам, поверх сети TCP/IP;
    • Улучшена поддержка протоколов SMB2 и SMB3, в которые добавлена поддержка режима "multi-credit", который позволяет ускорить доступ к большим файлам;
  • Дисковая подсистема, ввод/вывод и файловые системы
    • Для работы файловой системы XFS теперь необходима сборка ядра с 64-разрядным значением числа секторов. Добавлен раздел XFS в sysfs с параметрами для тестирования файловой системы;
    • В клиенте NFS добавлена поддержка выборок на основе механизма синхронизации RCU (Read-copy-update), позволивших ускорить нахождение файлов при наличии информации в кэше;
    • Начальная поддержка Multiqueue SCSI, рассчитанного на организацию многопоточного доступа к данным на многоядерных системах и позволяющего эффективно использовать возможности современных SSD-накопителей. Архитектура Multiqueue SCSI основана на двухуровневой модели очередей: на первом уровне функционируют очереди для передачи запросов ввода/вывода, привязанные к каждому CPU. Из данных очередей запросы направляются в очереди второго уровня, которые координируют обращение к оборудованию. В зависимости от конфигурации системы, числа CPU и накопителей соотношение между очередями первого и второго уровня может составлять от 1 к 1 до N к M.
    • В Ext4 и Btrfs отмечены только незначительные исправления и чистки;
  • Виртуализация и безопасность
    • Добавлен системный вызов kexec_file_load(), позволяющий выполнить проверку по цифровой подписи для нового ядра, перед его запуском с использованием механизма kexec. Ранее функцию загрузки нового ядра из уже запущенного ядра Linux (kexec) приходилось отключать при использовании UEFI Secure Boot, так как невозможно было гарантировать сохранение цепочки доверия;
    • В криптографическую подсистему добавлена поддержка детерминированного генератора псевдослучайных чисел, соответствующего спецификации NIST SP800-90A. Также обеспечена возможность разбора подписанных сообщений PKCS#7 и проверки цифровых подписей;
    • Добавлен системный вызов getrandom(), который является аналогом системного вызова getentropy, присутствующего в OpenBSD. Getrandom предоставит надёжную защиту от атак, основанных на исчерпании доступных файловых дескрипторов. При отсутствии свободных дескрипторов невозможно задействовать /dev/urandom, поэтому библиотеками активируется запасной вариант, использующий менее надёжный PRNG. Getrandom предоставит возможность получения случайных чисел от системного PRNG даже в условиях отсутствия свободных файловых дескрипторов.
    • В подсистему LSM (linux security module) добавлен новый hook kernel_fw_from_file(), который можно использовать для проверки целостности бинарных прошивок перед их загрузкой ядром;
    • Добавлен новый системный вызов seccomp для управления режимом работы и фильтрами механизма ограничения доступа к системным вызовам для приложений. Новый системный вызов позволяет решить проблемы с использованием Seccomp filter для многопоточных приложений (ранее фильтры Seccomp привязывались только на уровне процесса через prctl(PR_SET_SECCOMP, SECCOMP_MODE_FILTER, filter));
    • Ядра для архитектуры ARM64 теперь могут быть собраны с флагом "-fstack-protector" для выявления повреждений стека;
  • Аппаратные архитектуры
    • Прекращена поддержка архитектур POWER3 и rs64, связанный с которыми код уже достаточно давно находился в неработоспособном состоянии;
    • Прекращена поддержка систем Samsung S5P6440, S5P6450 и S5PC100;
    • Для архитектуры ARM64 добавлена поддержка четырёхуровневых таблиц страниц памяти, что позволило значительно расширить размер адресуемой виртуальной памяти;
    • Гипервизор KVM адаптирован для big-endian ARM-систем;
  • Оборудование
    • В DRM-подсистему добавлена поддержка технологии DisplayPort 1.2 MST (Multi-Stream Transport), позволяющей подключать несколько мониторов через одно соединение Display Port. В настоящее время MST доступен для чипов Intel на основе Haswell (драйвер i915);
    • В DRM-драйвере Nouveau устранены проблемы с использованием GPU Kepler, добавлена поддержка режима Zero Bandwidth Clear для GPU Fermi, Kepler и Maxwell;
    • В DRM-драйвер Radeon добавлена поддержка чипов "Hawaii" (Radeon R9 290);
    • В DRM-драйвере Intel проведена подготовка к поддержке Atom SoC Cherry Trail, добавлена поддержка Universal plane. для драйвера Intel (i915) и может использоваться на чипах Haswell;
    • Добавлен драйвер для контроллера Xbox One;
    • Улучшена поддержка средств для управления яркостью экрана на ноутбуках, поставляемых с Windows 8;
    • В драйвере b43 добавлена поддержка новых беспроводных адаптеров на чипах Broadcom;
    • Поддержка SoC Broadcom BCM7XXX, Mediatek MT6589 и Hisilicon HiX5HD2;
    • В звуковой подсистеме ALSA обеспечена возможность работы базового драйвера в конфигурациях, в которых к одному звуковому интерфейсу привязано несколько кодеков;
    • Поддержка звуковых карт Asus Xonar Essence STX IIи Поддержка звуковых кодеков Cirrus Logic CS4265, Realtek ALC286 и ALC5670, DSP Intel Broadwell Wildcatpoint, звуковых контроллеров Hardkernel Odroid-X2 и Odroid-U3;
    • Поддержка планшетов на базе 4 версии протокола Wacom. Поддержка тачпадов "ForcePads", используемых в HP Elitebook 1040;
    • Поддержка SATA-контроллеров NVIDIA Tegra124 AHCI, Qualcomm APQ8064/IPQ806x SerDes/PHY, Marvell Berlin SATA PHY и STMicroelectronics MIPHY365X SATA PHY;
    • Поддержка Ethernet-контроллеров Marvell Armada 375;


Источник: http://www.opennet.ru/opennews/art.shtml?num=40755