Intel представил сокращённый вариант сетевого стека для Linux

Разработчик из компании Intel представил для обсуждения и рецензирования в списке рассылки разработчиков ядра Linux упрощённую реализацию сетевого стека, рассчитанную на использование на маломощных встраиваемых системах. Разработка выполнена в процессе экспериментов по запуску Linux на системах с небольшим объёмом оперативной и постоянной памяти, таких как платы на базе процессоров Intel Quark, в которых может поставляться 2–4 Мб памяти. В текущем виде, включение в сборку сетевого IPv4-стека Linux приводит к увеличению размера примерно на 400 Кб, что ставит крест на использовании традиционного стека на системах с 2 Мб памяти. Применение легковесного сетевого стека LWIP, работающего в пространстве пользователя, приводит к увеличению потребности в памяти каждого связанного с ним приложения примерно на 100 Кб. По мнению разработчиков, штатный сетевой стек ядра Linux сам по себе достаточно компактный, но раздувается из-за большого числа поддерживаемых функций.

Главная идея разработчиков из Intel связана с предоставлением возможности сборки урезанной версии сетевого стека, содержащей только минимально необходимую функциональность. Многие из расширенных возможностей штатного сетевого стека Linux востребованы только на серверных системах и могут быть удалены без негативного влияния на работу клиентских приложений. Такой урезанный стек может успешно конкурировать с LWIP.

Так как применение ifdef для исключения каждой порции излишнего кода отмечено как очень трудоёмкая задача, при создании патча разработчики Intel активно полагаются на использование техники оптимизации на этапе связывания (LTO). Основные ссылки на вызов опциональных компонентов экранируются через ifdef, а весь оставшийся без вызова используемый код чистится силами компилятора. Для некоторых возможностей, которые невозможно просто удалить, созданы упрощённые аналоги. В итоге, применение подготовленного патча с включением LTO-оптимизаций позволило сократить размер полнофункционального сетевого стека до 170 Кб.

Планируется подготовить три опции сборки:

Урезанный универсальный стек; Подмножество стека для работы клиентских приложений. Из стека будет удалена поддержка таких возможностей, как fastopen, ping-сокетов, RPX, XPS и GRO offload, сокращен размер всех hash-таблиц, задействованы упрощённые таблицы маршрутизации, прекращено использование mmap, прекращено накопление TCP-метрик и статистики для SNMP; Максимально урезанный стек для встраиваемых систем, требующий запуска специально адаптированных приложений. При включении данной опции будет удалена поддержка rtnetlink (оставлен только ioctl), ethtool, LPF-фильтров и raw-сокетов.

©  OpenNet