Релиз ядра Linux 4.3
2 ноября 2015 года
После двух месяцев разработки Линус Торвальдс анонсировал релиз ядра 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 (Архивная копия от 19 сентября 2015 на Wayback Machine)" для противодействия наводнению системы процессами (защита от 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.
Источники[править]
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии[править]
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.