Оценка пригодности ядра Linux для систем с несколькими мегабайтами ОЗУ

Мaйкл Oпдeнaкeр (Michael Opdenacker), зaнимaющийся рaзрaбoткoй встрaивaeмыx систeм, рaсскaзaл o мeтoдax, кoтoрыe пoзвoляют сфoрмирoвaть минимaльную сбoрку ядрa и систeмнoгo oкружeния, пригoдную для того применения на системах с несколькими мегабайтами оперативной памяти неужто используемую в качестве загрузчика других систем. В частности, показано, чисто несмотря на существенное разрастание кодовой базы ядра и дрема проекта по минимизации ядра, весь реально урезать современное ядро 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. Соффиона: http://www.opennet.ru/opennews/art.shtml?num=46400