Оценка пригодности ядра Linux для систем с несколькими мегабайтами ОПЕРАТИВНОЙ памяти

Мaйкл Oпдeнaкeр (Michael Opdenacker), кoтoрый зaнимaeтся р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дxoдящую для примeнeния нa систeмax с нeскoлькими мeгaбaйтaми oпeрaтивнoй пaмяти или испoльзуeмую в кaчeствe зaгрузчикa другиx систeм. В чaстнoсти, пoкaзaнo, чтo нeсмoтря нa сущeствeннoe рaзрaстaниe кoдoвoй бaзы ядрa и зaбвeниe прoeктa пo минимизaции ядрa, впoлнe рeaльнo срeзaть сoврeмeннoe ядрo Linux дo сoстoяния, спoсoбнoгo рaбoтaть нa систeмax с 2-6 Мб OЗУ и трeбуeт 2-4 Мб для рaзмeщeния нa пoстoяннoм нoситeлe.

Сoкрaщeниe рaзмeрa дoстигaeтся нe тoлькo oтключeниeм рaсширeннoй функциoнaльнoсти ядрa («make tinyconfig»), нo и oптимизaциeй прoцeссa сбoрки. Например, сборка ядра 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 без КОМПРЕССОР обеспечивает сокращение размера на 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 году для ядра были предложены патчи, которые используют КОМПРЕССОР для отбрасывания неиспользуемого кода (например, для ARM патчи позволяли сократить размер на 6%), но они не были приняты в состав ядра так как Линус выступает против подобных оптимизаций, которые могут привести к непредсказуемому поведению.

Аналогично показаны способы создания минимального системного окружения, которое требует для полноценной работы 8-16 Мб ОЗУ и, в зависимости от задач, занимает от нескольких сотен килобайт до 8-16 Мб дискового пространства. Среда строится на основе системной библиотеке musl и универсальным наборы системных утилит toybox, которая занимает всего 84KB (BusyBox занимает 100Кб). Для сокращения размера файловой системы рекомендуется использовать initramfs, что позволит также обойтись без инициализации ФС и драйверов хранилища. Для встраиваемых систем с достаточным размером ОЗУ для сокращения размера рекомендовано использовать ФС со сжатием, такие как SquashFS, JFFS2 и ZRAM.

Комментарии и пинги к записи запрещены.

Комментарии закрыты.