Оценка пригодности ядра Linux для систем с несколькими мегабайтами ОЗУ
18 апреля 2017 года
Майкл Опденакер (Michael Opdenacker), занимающийся разработкой встраиваемых систем, рассказал о методах, которые позволяют сформировать минимальную сборку ядра и системного окружения, пригодную для применения на системах с несколькими мегабайтами оперативной памяти или используемую в качестве загрузчика других систем. В частности, показано, что несмотря на существенное разрастание кодовой базы ядра и забвение проекта по минимизации ядра, вполне реально урезать современное ядро Linux до состояния, способного работать на системах с 2-6 Мб ОЗУ и требующего 2-4 Мб для размещения на постоянном носителе.
Сокращение размера достигается не только отключением расширенной функциональности ядра ("make tinyconfig"), но и оптимизацией процесса сборки. Например, сборка ядра Linux 4.10 при помощи gcc 6.2 для ARM позволяет на 0.4% сократить размер, по сравнению со сборкой в gcc 4.7. Включение режима "-Os" и оптимизаций на этапе связывания (LTO) в GCC ("gcc -Os -flto") даёт возможность сократить размер на 2.8%. Применение Clang 3.8.1 по сравнению с gcc 6.2 без LTO обеспечивает сокращение размера на 5%, а с LTO на 2.3%. Применение сборки с использованием набора инструкций Thumb ("-mthumb", смесь 16- и 32-разрядных инструкций для ARM) вместо ("-marm", 32-разрядные инструкции) позволяет сократить размер на 6.8%. Сжав ядро методом XZIP можно выиграть 6-10 Кб, а собрав ядро без поддержки ptrace можно сократить размер на ещё 14 Кб.
Проект LLVM Linux, нацеленный на обеспечение сборки ядра при помощи Clang, заброшен в 2015 году, но разработчики из Linaro возродили работу и уже адаптировали патчи для ядра 4.9. В 2012 году для ядра были предложены патчи, использующие LTO для отбрасывания неиспользуемого кода (например, для ARM патчи позволяли сократить размер на 6%), но они не были приняты в состав ядра так как Линус выступает против подобных оптимизаций, которые могут привести к непредсказуемому поведению.
Аналогично показаны способы создания минимального системного окружения, которое требует для полноценной работы 8-16 Мб ОЗУ и, в зависимости от задач, занимает от нескольких сотен килобайт до 8-16 Мб дискового пространства. Окружение строится на основе системной библиотеки musl и универсальном наборе системных утилит toybox, занимающим всего 84KB (BusyBox занимает 100Кб). Для сокращения размера файловой системы рекомендуется использовать initramfs, что позволит также обойтись без инициализации ФС и драйверов хранилища. Для встраиваемых систем с достаточным размером ОЗУ для сокращения размера рекомендовано использовать ФС со сжатием, такие как SquashFS, JFFS2 и ZRAM.
Источники
правитьЛюбой участник может оформить статью: добавить иллюстрации, викифицировать, заполнить шаблоны и добавить категории.
Любой редактор может снять этот шаблон после оформления и проверки.
Комментарии
Если вы хотите сообщить о проблеме в статье (например, фактическая ошибка и т. д.), пожалуйста, используйте обычную страницу обсуждения.
Комментарии на этой странице могут не соответствовать политике нейтральной точки зрения, однако, пожалуйста, придерживайтесь темы и попытайтесь избежать брани, оскорбительных или подстрекательных комментариев. Попробуйте написать такие комментарии, которые заставят задуматься, будут проницательными или спорными. Цивилизованная дискуссия и вежливый спор делают страницу комментариев дружелюбным местом. Пожалуйста, подумайте об этом.
Несколько советов по оформлению реплик:
- Новые темы начинайте, пожалуйста, снизу.
- Используйте символ звёздочки «*» в начале строки для начала новой темы. Далее пишите свой текст.
- Для ответа в начале строки укажите на одну звёздочку больше, чем в предыдущей реплике.
- Пожалуйста, подписывайте все свои сообщения, используя четыре тильды (~~~~). При предварительном просмотре и сохранении они будут автоматически заменены на ваше имя и дату.
Обращаем ваше внимание, что комментарии не предназначены для размещения ссылок на внешние ресурсы не по теме статьи, которые могут быть удалены или скрыты любым участником. Тем не менее, на странице комментариев вы можете сообщить о статьях в СМИ, которые ссылаются на эту заметку, а также о её обсуждении на сторонних ресурсах.