Прошло два месяца активной работы над новой версией ядра, и сегодня Линус Торвальдс наконец-то представил ядро Linux 4.9 [1]. Наиболее заметными измерениями можно назвать инструменты для диагностики и блокирования переполнений стека ядра, а также включение поддержки SELinux в OverlayFS, плюс реализация шины Gerybus, чего хотелось многим.
Что касается статистики, то она, как всегда, обширна. В новой версии было принято 15 тысяч исправлений от 1400 разработчиков. Общий размер патча составляет 45 Мб. Изменения в патче затронули 11042 файлов, с добавлением 632157 строк кода и удалением 354728 строк. Не является сюрпризом и то, что большая часть (около 42%) представленных в этой версии изменений так либо иначе связаны с драйверами устройств. Еще 19% изменений связаны с обновлением кода для различных аппаратных архитектур, 12% — сетевой стек, 5% — файловые системы, 4% — подсистемы ядра.
Ну а теперь немного чуть подробнее о том, что же является значимыми изменениями [2] в новой версии ядра [3].
Сетевая подсистема
- Наконец-то в ядро добавлена реализация алгоритма контроля перегрузки TCP, который предложила корпорация Google. Речь идет о так называемом BBR (Bottleneck Bandwidth and RTT), который успешно применяется для того, чтобы сократить задержки передачи данных для трафика с таких ресурсов, как google.com и YouTube;
- В netfilter был добавлен модуль генерации случайных чисел. Этот модуль рекомендуется использовать для выбора случайного назначения пакета, например, это может быть рэндомное распределение по очередям;
- Представлен новый механизм настройки сетевого mesh-протокола B.A.T.M.A.N. («Better Approach To Mobile Adhoc Networking), реализованный на основе интерфейса netlink;
- Плюс ко всему в netfilter добавили механизм „quota“, где реализованы байтовые квоты. В качестве примера можно привести возможность установки квоты в 100 Мб, где после того, как исчерпан лимит трафика для этого правила, действие самого правила прекратится.
Безопасность и виртуализация
- Здесь, главным образом, нужно выделить добавление нескольких изменений с реализацией механизма виртуального маппинга стека ядра (CONFIG_VMAP_STACK), который предоставляет целый ряд инструментов для определения и блокирования переполнений стека. Все сказанное актуально для архитектуры х86. Новая возможность, скорее всего, станет проблемой для злоумышленников, которые планируют эксплуатировать уязвимости в ядре. Эти изменения позволяют сократить число операций по распределению памяти, повысить безопасность и реализовать различные средства для того, чтобы осуществить диагностику выхода за границы стека. Все это реализовано благодаря разработчикам, минимизировавшим задержку за счет оптимизаций и кэширования;
- Для SELinux добавили поддержку многослойных файловых систем — это, в первую очередь, OverlayFS. Они используются для построения окружений в системах так называемой контейнерной изоляции;
- Также реализованы такие системные вызовы, как pkey_alloc(), pkey_free() и pkey_mprotect(), где добавлена поддержка специфического механизма PKU (Memory Protection Keys for Userspace), который работает в будущих моделях процессоров Intel.
Системные сервисы и память
- Здесь основным изменением является добавление подсистемы Greybus. Она разработана специально для того, чтобы обеспечить взаимодействие компонентов модульного смартфона Ara [4] (да, про него не забыли!). Так вот, Greybus позволяет использовать внутреннюю шину для взаимодействия аппаратных компонентов, которые подключаются по мере необходимости. Здесь есть поддержка маршрутизации вызовов и приватного взаимодействия. А это позволяет двум компонентам взаимодействовать друг с другом в закрытом режиме. Возможно, энтузиасты проекта модульного смартфона теперь смогут продолжить работу;
- Добавлен новый набор файлов в /sys/kernel/irq, где описывается состав таблицы обработчиков прерываний. Новый набор позиционируется, как замена /proc/interrupts;
- Появилась опция CONFIG_DEBUG_TEST_DRIVER_REMOVE, которая позволяет протестировать работоспособность выгрузки драйвера устрйоства через выполнение цикла загрузки, выгрузки и повторной загрузкий драйвера на начальном этапе — инициализации устройства. Все это работает в автоматическом режиме;
- Также разработчики продолжили развивать средства форматирования документации к ядру.
Файлы и диски
- Модуль FUSE получил поддержку списков контроля доступа, которые соответствуют POCIX ACL;
- В файловую систему XFS добавлена поддержка ряда общих экстентов, которые позволяют нескольким владельцам использовать совместно информацию о непрерывных областях данных. Эта возможность позволяет реализовать в XFS вызова copy_file_range() ;
- Ну а в NFS-сервер разработчики добавили поддержку операции COPY, которая определена в спецификации NFS4.2 и позволяет выполнить копирование содержимого файла без перемещения информации от сервера к клиенту и обратно.
Аппаратное обеспечение
- В драйвере AMDGPU появилась поддержка (пока экспериментальная) семейства GPU Southern Islands на базе микроархитектуры GCN 1.0. Добавлены инструменты для работы с виртуальными дисплеями [5];
- Добавлена поддержка систем платформы Mellanox Technologies [6];
- Также добавлена поддержка процессоров Loongson 1C;
- Теперь поддерживаются контроллеры USB 3.0 Broadcom Northstar и контроллеров USB 2.0 Rockchip/Innosilicon.
Что же, спасибо Линусу и всему сообществу разработчиков — теперь ждем новых свершений, которые позволяют развивать Linux.
Автор: King Servers
Источник [7]