Релиз ядра Linux 4.3

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

В новую версию принято около 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), что позволяет создавать произвольные обработчики на языке Си, а затем транслировать их в eBPF для выполнения в ядре внутри виртуальной машины BPF.
    • Добавлен механизм "PIDs controller" для противодействия наводнению системы процессами (защита от fork-бомб);
    • Для архитектуры MIPS реализована поддержка системы контрольных проверок uprobes (userspace probes), используемой для анализа поведения выполняемых в пространстве пользователя приложений;
  • Виртуализация и безопасность
    • Возможность наследования capabilities дочерними процессами, запускаемыми через execve(). Основная идея в предоставлении привилегированным процессам, работающим не под пользователем root, возможности запускать другие программы, передавая им ограниченный набор расширенных прав. Для включения наследования применяется маска PR_CAP_AMBIENT, указываемая для подлежащих наследованию capabilities;
    • В ptrace() добавлена новая операция PTRACE_O_SUSPEND_SECCOMP, позволяющая заморозить выполнение фильтров seccomp, что может применяться для заморозки процессов, находящихся в режиме seccomp. Операция доступна только для процессов с привилегиями CAP_SYS_ADMIN в первичном пространстве идентификаторов процессов;
    • В подсистему Smack добавлена возможность привязки меток к адресам IPv6;
    • В подсистему SELinux добавлена поддержка проверки вызовов ioctl() в разрезе отдельных команд;
    • Правила аудита теперь могут привязываться к процессам на основе привязки к запущенному исполняемому файлу;
  • Сетевая подсистема
    • Ядро теперь по умолчанию собирается со встроенной поддержкой IPv6 (ранее IPv6 собирался в виде модуля ядра), что привело к увеличению размера базовой сборки ядра на 270Кб;
    • В сетевую подсистему добавлена поддержка инфраструктуры для создания легковесных туннелей "lwtunnel", реализующих технику инкапсуляции потока без использования отдельного сетевого интерфейса и связанных с ним накладных расходов;
    • Начальная поддержка виртуальных таблиц маршрутизации VRF (Virtual Routing and Forwarding), позволяющих организовать работу нескольких доменов маршрутизации на одной системе. Например, VRF можно использовать для создания изолированных контейнеров с отдельными таблицами маршрутизации;
    • В подсистему Open vSwitch добавлен модуль для взаимодействия с механизмом ядра по отслеживанию состояния соединений (conntrack);
    • Добавлена возможность ILA (Identifier Locator Addressing), предназначенная для организации обращения к задачам, мигрирующим с одной машины на другую в крупных датацентрах. Суть метода в присвоении каждой задаче уникального идентификатора, не привязанного к конкретному местоположению в сети, но ассоциированного с определённым адресом IPv6;
    • Новый сетевой планировщик "overflow" для распределения нагрузки в условиях виртуализации серверов. Суть алгоритма в направлении сетевых соединений к серверу с наибольшим весом с переходом к следующему серверу при достижении заданного для текущего узла лимита активных сетевых соединений.
  • Оборудование
    • Расширены возможности 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);

© OpenNet