После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 4.9. Среди наиболее заметных изменений: средства для диагностики и блокирования переполнений стека ядра, поддержка SELinux в OverlayFS, поддержка алгоритма контроля перегрузки BBR, поддержка POSIX ACL в FUSE, механизм квот в netfilter, реализация шины Greybus.

В новую версию принято около 16 тысяч исправлений от 1719 разработчиков, размер патча - 45 Мб (изменения затронули 11042 файлов, добавлено 632157 строк кода, удалено 354728 строк). Отмечается, что ядро 4.9 побило рекорд по числу изменений, принятых в рамках одного выпуска. Около 42% всех представленных в 4.9 изменений связаны с драйверами устройств, примерно 19% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 12% связано с сетевым стеком, 5% - файловыми системами и 4% c внутренними подсистемами ядра. 11.6% изменений внесено сотрудниками компании Intel, столько же подготовлено сотрудниками Linaro. Разработчики Red Hat внесли 5.7% изменений, Google - 3.3%, Samsung - 3.3%, AMD - 2.9%, IBM - 2.5%.

Основные новшества:

  • Виртуализация и безопасность
    • Для архитектуры x86 добавлен набор изменений с реализацией механизма виртуального маппинга стека ядра (CONFIG_VMAP_STACK), предоставляющего средства для определения и блокирования переполнений стека. Ожидается, что новая возможность станет серьёзным барьером для эксплуатации уязвимостей в ядре. Суть изменения в переносе стеков ядра в область vmalloc(), что позволяет сократить число операций распределения памяти, повысить безопасность и реализовать средства для диагностики выхода за границы стека. Обратной стороной использования vmalloc() для стека ядра являются дополнительные накладные расходы, вносящие задержку при создании процессов. Данную задержку удалось минимизировать благодаря оптимизациям и дополнительному кэшированию;
    • В SELinux обеспечена поддержка многослойных файловых систем, таких как OverlayFS, используемых для построения окружений в системах контейнерной изоляции;
    • Добавлены новые системные вызовы pkey_alloc(), pkey_free() и pkey_mprotect(), предоставляющие поддержку реализованного в серверных моделях процессоров Intel на базе микроархитектуры Skylake механизма PKU (Memory Protection Keys for Userspace), который можно применять для защиты доступа к страницам памяти из пространства пользователя, без изменения таблиц страниц памяти при изменении домена защиты. Например, указанные системные вызовы можно использовать для дополнительной защиты размещения в памяти ключей шифрования, предоставив возможность чтения только для одного потока в многопоточной программе шифрования;
    • В систему сборки добавлена возможность использования плагина GCC "latent_entropy", предложенного проектом grsecurity и предоставляющего средства для сбора дополнительных случайных параметров на начальном этапе загрузки для последующей инициализации энтропии для генератора случайных чисел;
    • Добавлены настройки, позволяющие ограничить число пространств имён и других объектов (cgroup, точки монтирования, ipc), создаваемых из пространства имён идентификаторов пользователей. Настройки позволяют защититься от некоторых видов локальных DoS-атак (например, создание дополнительной нагрузки на CPU через монтирование большого числа ФС в контейнере);
  • Сетевая подсистема
    • В состав ядра включена реализация предложенного компанией Google алгоритма контроля перегрузки TCP (congestion control) - BBR (Bottleneck Bandwidth and RTT), успешно применяемого для увеличения пропускной способности и сокращения задержек передачи данных для трафика с google.com и YouTube. BBR требует внесения изменений только на стороне отправителя, программное обеспечение сетевой инфраструктуры и принимающей стороны остаётся без изменений. Вместо использования потери пакетов как индикатора перегрузки, в BBR применяются методы моделирования канала связи, прогнозирующие имеющуюся пропускную способность через последовательные проверки и оценку времени приема-передачи (RTT), но не доводя до потери пакетов или задержек в передаче. На начальной стадии соединения BBR оценивает потолок пропускной способности канала, затем снижает интенсивность отправки для разгрузки очереди и переходит в режим корректировки, то повышая, то снижая интенсивность отправки, балансируя между максимальной пропускной способностью и незаполненностью очереди пакетов;
    • В netfilter добавлен новый механизм "quota" с реализацией байтовых квот (правило срабатывает только до истечения квоты). Например, можно задать для правила квоту в 100Мб и после того как под правило подпадёт 100 Мб трафика, действие этого правила прекратится;
    • В netfilter добавлен модуль для генерации случайных чисел, который можно использовать для выбора случайного назначения пакета (например, для случайного распределения по очередям);
    • Реализован новый JIT-компилятор для BPF, который может загружать программы BPF для выполнения на сетевых интерфейсах с процессорами Netronome. В ядре 4.9 данная возможность пока используется только в модуле классификации cls_bpf;
    • Для сетевого mesh-протокола B.A.T.M.A.N. ("Better Approach To Mobile Adhoc Networking), позволяющего создавать децентрализованные сети, каждый узел в которых связан через соседние узлы, подготовлен новый механизм настройки на основе интерфейса netlink;
    • Для UDP-сокетов добавлен флаг SOCK_DESTROY, который ранее поддерживался для TCP. SOCK_DESTROY позволяет системному администратору принудительно закрыть сокет через интерфейс "netlink socket diag";
    • Проведены оптимизации обработки программных прерываний, которые позволили снизить нагрузку на CPU и дали возможность обрабатывать значительно больше сетевых данных на слабых процессорах. На тестовой маломощной системе производительность обработки UDP-пакетов увеличилась с 2000 до 900 тысяч пакетов в секунду;
  • Память и системные сервисы
    • В состав включена подсистема Greybus, разработанная для обеспечения взаимодействия компонентов модульного смартфона Ara. Greybus предоставляет внутреннюю шину для взаимодействия между аппаратными компонентами, подключаемыми по мере необходимости. В отличие от шин USB и PCIe, в Greybus предоставлена поддержка маршрутизации вызовов и приватного взаимодействия, что позволяет двум компонентам взаимодействовать друг с другом, не позволяя другим компонентам отследить данное взаимодействие. Несмотря на то, что компания Google свернула проект Ara, Greg Kroah-Hartman сумел убедить разработчиков ядра в целесообразности включения данной подсистемы в основное ядро;
    • Представлен новый набор файлов в /sys/kernel/irq, описывающих состав таблицы обработчиков прерываний. Новый набор позиционируется как замена /proc/interrupts, боле простая для разбора в приложениях;
    • Добавлена опция CONFIG_DEBUG_TEST_DRIVER_REMOVE, позволяющая автоматически протестировать работоспособность выгрузки драйвера устройства через выполнение цикла загрузки, выгрузки и опять загрузки драйвера на этапе инициализации устройства;
    • Продолжено развитие средств для форматирования документации к ядру с использованием разметки reStructuredText (RST) и пакета Sphinx. В новой версии ядра обеспечена корректная генерация документации в формате PDF. В новом формате представлена первая порция переработанных документов об API для программирования драйверов, а также инструментах для разработки ядра, особенностях процесса разработки и организации работы в сообществе;
    • Переработан алгоритм выбора режимов производительности (P-state) для процессоров Atom, что привело к увеличению производительности в некоторых тестах и видах нагрузки;
    • В систему трассировки ядра добавлена поддержка хронометрированных выборок (timed sampling). По мнению Брендана Грега (Brendan Gregg), одного из разработчиков DTrace, с появлением "timed sampling" средства для анализа производительности на базе BPF достигли уровня функциональности DTrace;
  • Дисковая подсистема, ввод/вывод и файловые системы
    • В модуле FUSE, предоставляющем средства для создания файловых систем, работающих в пространстве пользователя, появилась поддержка списков контроля доступа, соответствующих POSIX ACL;
    • В файловую систему XFS добавлена поддержка общих экстентов (shared extents), позволяющих нескольким владельцам совместно использовать сведения о непрерывных областях данных (например, разные файлы могут использовать общие экстенты). Данная возможность открывает двери для реализации в XFS вызова copy_file_range() и таких возможностей как дедупликация данных;
    • В NFS-сервер добавлена поддержка операции COPY, определённой в спецификации NFS4.2 и позволяющей выполнить копирование содержимого файла без перемещения данных по сети от сервера к клиенту и обратно, если исходный и целевой файлы размещаются на одном сервере;
    • В OverlayFS добавлена поддержка расширенных атрибутов файлов (xattrs);
    • В подсистеме MD RAID для увеличения производительности вычислений контрольных сумм для RAID 6 задействованы оптимизации на базе инструкций AVX512. Устранена потенциальная взаимная блокировка. Для RAID на базе SSD-накопителей обеспечена установка флага использования устройств без вращающихся дисков. Для RAID 5 и 6 откорректировано значение параметра max_hw_sectors, что должно незначительно поднять производительность;
    • В Btrfs и Ext4 отмечается только исправление ошибок. В F2FS проведена работа по увеличению производительности;
    • В файловой системе ubifs, предназначенной для использования на Flash-накопителях, обеспечена поддержка OverlayFS и возможность использования опции O_TMPFILE;
  • Оборудование
    • В драйвер AMDGPU добавлена экспериментальная поддержка семейства GPU Southern Islands на базе микроархитектуры GCN 1.0. Реализованы средства для работы с виртуальными дисплеями, которые позволяют обеспечить работу других модулей ядра или компонентов пространства пользователя в условиях, когда вместо аппаратного экрана, вывод осуществляется на виртуальный экран. Улучшена реализация кода для сброса GPU. Добавлена поддержка предварительной инициализации буферов VRAM. Добавлена поддержка Powerplay для чипов Iceland Islands;
    • Для DRM-драйвера (Direct Rendering Manager) Nouveau не отмечено изменений. В драйвере Intel проведён рефакторинг наименований GEM, добавлена поддержка "dma-buf fencing" и улучшена поддержка устройств с интерфейсом DisplayPort. В драйвере vc4 (для Raspberry Pi) снижена нагрузка на CPU при выполнении 3D-операций и решены проблемы с HDMI;
    • Поддержка новых SoC: Broadcom BCM47189 и BCM53573, Broadcom BCM958525er, BCM958522er, BCM988312hr, BCM958623hr и BCM958622hr, Qualcomm DragonBoard 820c, Marvell Armada 8040, Renesas r8a7796, ZTE ZX296718;
    • Официальная поддержка 29 устройств на базе архитектуры ARM, включая Raspberry Pi Zero, Orange Pi PC Plus, Orange Pi 2, Orange Pi Plus 2E, Orange Pi Lite, Olimex A33-Olinuxino, Nano Pi Neo, Netgear WNR854T, LG Nexus 5, beagleboard-x15 rev B1, Rockchip Tronsmart Orion r86, Empire Electronix M712 и iNet d978 Rev.
    • Добавлена поддержка систем на базе платформы Mellanox Technologies, таких как MSX6710, MSX8720, MSB7700, MSN2700, MSX1410, MSN2410, MSB7800, MSN2740 и MSN2100;
    • Поддержка контроллеров USB 3.0 Broadcom Northstar и контроллеров USB 2.0 Rockchip/Innosilicon;
    • Поддержка звуковых кодеков Realtek RT5660/RT5663/RT5668 и X-Powers AC100;
    • Поддержка сетевых адаптеров Microsemi VSC85x, Thunder RGX/RGMII, Qualcomm EMAC gigabit Ethernet и Qualcomm Atheros QCA8K. Также добавлена поддержка сетевых адаптеров ENA (Elastic Network Adapter), используемых компанией Amazon в инфраструктуре Elastic Compute Cloud (EC2) для организации связи между узлами EC2;
    • Поддержка процессоров Loongson 1C;
    • Добавлена поддержка шины EBI2 (External Bus Interface 2), используемой компанией Qualcomm в мобильных платформах для связывания Flash-памяти, экранов и другой периферии;
    • Поддержка подсистемы ISH (Intel Integrated Sensor Hub), применяемой для организации доступа к различным датчикам на мобильных устройствах и ноутбуках с процессорами Intel Cherrytrail и Skylake;
    • Добавлен набор для тестирования прошивок (FWTS, firmware test suite), предназначенный для тестирования взаимодействия между прошивкой UEFI и операционной системой.

Латиноамериканский Фонд свободного ПО оперативно сформировал вариант полностью свободного ядра 4.9 - Linux-libre 4.9-gnu, очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В новом выпуске обеспечена возможность работы без блобов для видеокарт Radeon RV7xx. Очищены от блобов драйверы sun8i, ziirave_wdt, greybus, а также реализация Bluetooth для чипов Marvell. Обновлён код чистки блобов для драйверов amdgpu, b43, b43legacy, mwifiex, wlcore и imx7s.

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