Ответ 1
Это очень широкий вопрос!
Во-первых, вот краткое описание того, как проверять производительность сборки и зависимости при использовании проекта openembedded/yocto. Это отвечает на первую часть вопроса.
Какие пакеты занимают больше времени?
Используйте buildstats с помощью инструмента pybootchartgui, создайте диаграмму сборки.
Подробнее:
Установите USER_CLASSES += "buildstats"
в $BUILDIR/conf/local.conf
файл. Это приведет к сбою подробных данных о производительности в
$BUILDDIR/tmp/buildstats/<DATE>
. Затем используйте pybootchartgui.py
script (в
poky/scripts/pybootchartgui
) для создания диаграммы. Это поможет вам
локализовать возможные узкие места в сборке. Конечно, если у вас есть
много рецептов, чтобы испечь, ваш график будет огромным. Чтобы удалить некоторый шум
используйте опцию командной строки -m MINTIME
.
Например:
poky/scripts/pybootchartgui/pybootchartgui.py -m 600 $BUILDDIR/tmp/buildstats/201312310904
будет отображать только задачи (do_compile, do_fetch и т.д.), которые занимают больше времени чем 10 минут (600 секунд) для запуска.
Как проверить зависимости пакетов?
Чтобы изучить зависимости конкретного пакета, используйте depexp утилита. Например, для изучения зависимостей eglibc используйте:
bitbake -g -u depexp eglibc
Это даст лучшее понимание того, что каждый рецепт зависит от как при запуске, так и во время компиляции.
Как проверить, есть ли какие-либо циклические зависимости и как их решить?
bitbake автоматически определяет круговые зависимости и выводит сообщение об ошибке, когда такое происходит. Сообщение об ошибке содержит имя пакетов, вызывающих эту циклическую зависимость.
Как проверить, есть ли рецепты, которые не используются, и как их безопасно удалить?
bitbake автоматически вычисляет зависимости и не будет создавать пакеты, которые не нужны вашей цели. Если вы обнаружили в своем изображении некоторые нежелательные пакеты, и вы хотите их удалить:
- используйте
bitbake -g -u depexp <TARGET>
, чтобы проверить, как пакет втягивается - изменить необходимые рецепты в вашем слое (например, создав bbappend), чтобы устранить зависимость вручную
Улучшение общей производительности сборки
Наконец, некоторые советы о том, как улучшить общую производительность сборки. Это отвечает на вторую часть вопроса.
- Очистите свои зависимости (
bitbake -g -u depexp <TARGET>
- ваш друг). Строительство меньше материала занимает меньше времени. - Bitbake может автоматически кэшировать выходные данные сборки и использовать ее для
будущие сборки, этот кеш называется "кэшем разделяемого состояния" и
управляемый переменной
SSTATE_DIR
вlocal.conf
. - Задайте переменные
BB_NUMBER_THREADS
иPARALLEL_MAKE
вlocal.conf
для соответствия вашим машинные ресурсы. Эти переменные контролируют, сколько задач выполняется параллельно и сколько процессов "make" должно выполняться параллельно (-j
) соответственно. - Поместите каталог "build" на свой собственный диск.
- Используйте файловую систему без файловой системы ext4 и с этим монтированием
options:
noatime,barrier=0,commit=6000
. ПРЕДУПРЕЖДЕНИЕ. Это делает ваш hdd ненадежны в случае потерь мощности. Не храните ничего из значение на этом hdd. - создание изображений с пакетами
-dev
и/или-dbg
увеличивает do_rootfs время задачи значительно. Убедитесь, что вы включили их (см.EXTRA_IMAGE_FEATURES
вlocal.conf
) только, если это необходимо. - openembedded и yocto поддерживают icecream (распределенная компиляция). См. Класс icecc и этот пост.
- Купить более быструю машину;)
Литература: