После двух месяцев разработки Линус Торвальдс анонсировал релиз ядра Linux 4.3. Среди наиболее заметных изменений: удаление обособленного драйвера ФС ext3, отключение поддержки режима VM86, средства для наследования capabilities, включение по умолчанию сборки с IPv6, реализация виртуальных таблиц маршрутизации, сетевой планировщик "overflow", возможность обработки page fault в пространстве пользователя, дополнительная защита от fork-бомб, фреймворки для разработки драйверов NVMEM и MOST, зависимость от openssl-devel при сборке с поддержкой верификации модулей по цифровым подписям.

В новую версию принято около 11 тысяч исправлений от более чем 1500 разработчиков, размер патча - 42 Мб (изменения затронули 10388 файлов, добавлено 643628 строк кода, удалено -333888 строк). Около 48% всех представленных в 4.3 изменений связаны с драйверами устройств, примерно 18% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 11% связано с сетевым стеком, 3% - файловыми системами и 4% c внутренними подсистемами ядра.

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

  • Дисковая подсистема, ввод/вывод и файловые системы
    • Из состава ядра исключён драйвер ext3, так как он является дублирующим - функции работы с разделами ext3 имеются в драйвере ext4, который полностью обратно совместим с прошлым поколением ФС и может использоваться в качестве прозрачной замены драйвера ext3;
    • Параметр discard_max_bytes теперь доступен на запись, что позволяет ограничивать максимальный размер операций discard для блочного устройства. Опция даёт возможность увеличить отзывчивость в условиях обилия крупных discard-операций за счёт их разбиения на более мелкие;
    • Для файловой системы F2FS реализован ioctl F2FS_GARBAGE_COLLECT для внепланового вызова операции сборки мусора из пространства пользователя;
    • Большая порция незначительных исправлений для файловых систем Btrfs, ext4 и XFS; Из улучшений Btrfs можно выделить реализацию флага BTRFS_RBIO_REBUILD_MISSING для RAID 5/6 и поддержку контроллеров blkio. В ext4 и xfs отмечены только исправления.
  • Память и системные сервисы
    • Осуществлено блокирование поддержки устаревшего 16-разрядного виртуального режима адресации VM86, в условиях, когда значение vm.mmap_min_addr не равно нулю. Разработчики столкнулись с дилеммой: с одной стороны режим VM86 может быть использован для совершения атак и его сохранение негативно повлияет на безопасность, но с другой стороны VM86 востребован для работы DOS-эмуляторов, т.е. подпадает под один из главных принципов разработки ядра - сохранение неизменности программных интерфейсов для приложений пространства пользователя. В итоге, было достигнуто компромиссное решение: блокировать работу VM86 только при установке ненулевых значений нижнего лимита маппинга памяти (vm.mmap_min_addr), при которых DOS-эмуляторы заведомо неработоспособны. Так как vm.mmap_min_addr по умолчанию установлен в 4096, то для большинства конфигураций VM86 будет отключен. При необходимости запуска DOS-эмулятора, пользователи должны установить vm.mmap_min_addr в ноль и тогда VM86 будет автоматически активирован.
    • В состав ядра принят API userfaultfd для реализации обработчиков обращений к невыделенным страницам памяти (page faults) в пространстве пользователя. Обработка "page faults" в пространстве пользователя необходима для оптимизации выполнения live-миграции гостевых окружений KVM без остановки работы гостевой системы. Для ускорения миграции гостевое окружение может быть переключено на новый хост c оставлением рабочей памяти на старом хосте. При обращении к ещё не перенесённой памяти в новом окружении будет сгенерирован "page fault", на основании которого специальный обработчик в пространстве пользователя загрузит отсутствующий блок памяти по сети и разместит в адресном пространстве гостевой системы. Подобный подход позволит обойтись без реализации протокола live-миграции на стороне ядра.
    • Возможность прикрепления eBPF-обработчиков к контрольным проверкам uprobes (userspace probes), используемым для анализа поведения выполняемых в пространстве пользователя приложений. Указанная возможность позволяет применять BPF для трассировки кода в пространстве пользователя.
    • В состав набора исходных текстов ядра включена библиотека libbpf, предоставляющая средства для работы со скриптами BPF. В настоящее время библиотека уже задействована в утилите perf;
    • В cgroups добавлен механизм "PIDs controller" для противодействия наводнению системы процессами (защита от fork-бомб). PIDs controller даёт возможность задать лимит на максимальное число процессов в группе, при превышении которого блокируется создание новых задач через вызовы fork() и clone();
    • Для архитектуры MIPS реализована поддержка системы контрольных проверок uprobes (userspace probes);
    • Реализованы средства для отслеживания редко используемых (idle) страниц памяти, что может применяться для оптимизации распределения памяти между контейнерами и виртуальными машинами;
    • Добавлен новый системный вызов membarrier() для установки барьеров на память для всех работающих в системе потоков;
  • Виртуализация и безопасность
    • Возможность наследования capabilities дочерними процессами, запускаемыми через execve(). Основная идея в предоставлении привилегированным процессам, работающим не под пользователем root, возможности запускать другие программы, передавая им ограниченный набор расширенных прав. Для включения наследования применяется маска PR_CAP_AMBIENT, указываемая для подлежащих наследованию capabilities;
    • В ptrace() добавлена новая операция PTRACE_O_SUSPEND_SECCOMP, позволяющая заморозить выполнение фильтров seccomp, что может применяться для заморозки процессов, находящихся в режиме seccomp. Операция доступна только для процессов с привилегиями CAP_SYS_ADMIN в первичном пространстве идентификаторов процессов;
    • В подсистему Smack добавлена возможность привязки меток к адресам IPv6;
    • В подсистему SELinux добавлена поддержка проверки вызовов ioctl() в разрезе отдельных команд;
    • Правила аудита теперь могут привязываться к процессам на основе привязки к запущенному исполняемому файлу;
    • Реализована поддержка режима "privileged access never", доступного в новых процессорах ARM/ARM64 и позволяющего ограничить доступ кода, работающего на уровне ядра, к адресам в пространстве пользователя;
    • В proc добавлен новый файл /proc/kpagecgroup, который содержит информацию о привязке cgroups к страницам физической памяти;
    • Верификация модулей по цифровым подписям переведена на формат PKCS#7, что требует наличия openssl-devel при сборке ядра с поддержкой цифровых подписей;
  • Сетевая подсистема
    • Ядро теперь по умолчанию собирается со встроенной поддержкой IPv6 (ранее IPv6 собирался в виде модуля ядра), что привело к увеличению размера базовой сборки ядра на 270Кб;
    • В сетевую подсистему добавлена поддержка инфраструктуры для создания легковесных туннелей "lwtunnel", реализующих технику инкапсуляции потока без использования отдельного сетевого интерфейса и связанных с ним накладных расходов;
    • Начальная поддержка виртуальных таблиц маршрутизации VRF (Virtual Routing and Forwarding), позволяющих организовать работу нескольких доменов маршрутизации на одной системе. Например, VRF можно использовать для создания изолированных контейнеров с отдельными таблицами маршрутизации;
    • В подсистему Open vSwitch добавлен модуль для взаимодействия с механизмом ядра по отслеживанию состояния соединений (conntrack);
    • Добавлена возможность ILA (Identifier Locator Addressing), предназначенная для организации обращения к задачам, мигрирующим с одной машины на другую. Суть метода в присвоении каждой задаче уникального идентификатора, не привязанного к конкретному местоположению в сети, но ассоциированного с определённым адресом IPv6;
    • Новый сетевой планировщик "overflow" для распределения нагрузки в условиях виртуализации серверов. Суть алгоритма в направлении сетевых соединений к серверу с наибольшим весом и переходом к следующему серверу при достижении заданного для текущего узла лимита активных сетевых соединений.
  • Оборудование
    • В ветку staging добавлена новая подсистема MOST (Media Oriented Systems Transport), предоставляющая средства для создания сетевых и мультимедийных драйверов на основании спецификаций MOST, развиваемых для автомобильных систем;
    • Добавлен NVMEM Framework (Non Volatile Memory layer), предоставляющий API для разработки драйверов для устройств постоянной памяти, таких как eeprom и efuses;
    • Расширены возможности DRM-драйвера для видеокарт Intel: включена по умолчанию поддержка чипов Gen9 (Skylake), которая признана стабильной;
    • Расширены возможности DRM-драйвера для видеокарт NVIDIA (Nouveau): выполнена внутренняя переработка и чистка кода, улучшены средства управления питанием для GPU GT200, добавлена начальная поддержка GM20B (Tegra X1);
    • Расширены возможности DRM-драйвера для видеокарт AMD (Radeon): начальная поддержка AMD Radeon R9 Fury (Fiji), решены проблемы с Maxwell DisplayPort;
    • В DRM-драйвер vmwgfx для систем виртуализации VMware добавлена возможность использования OpenGL 3.3 в гостевых системах (раннее поддерживался OpenGL 2.1);
    • Для архитектуры s390 реализована поддержка режима "fake NUMA", позволяющая представить крупную систему в форме набора эмулируемых узлов NUMA, упрощающих партицирование нагрузки;
    • Поддержка криптографических акселераторов Allwinner Security System и Intel DH895xCC;
    • Поддержка звуковых кодеков Cirrus Logic CS4349, Realtek ALC298 и STI SAS;
    • Поддержка отечественной DVB-S2/T2/C2-платы NetUP Universal DVB CI.


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