Релиз ядра Linux 4.9
12 декабря 2016 года
После двух месяцев разработки Линус Торвальдс представил релиз ядра 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 (Архивная копия от 21 сентября 2019 на Wayback Machine), очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В новом выпуске обеспечена возможность работы без блобов для видеокарт Radeon RV7xx. Очищены от блобов драйверы sun8i, ziirave_wdt, greybus, а также реализация Bluetooth для чипов Marvell. Обновлён код чистки блобов для драйверов amdgpu, b43, b43legacy, mwifiex, wlcore и imx7s.
Источники править
Любой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.