使用bitbake加速项目构建时间的方法?

Nea*_*iel 15 python embedded build openembedded bitbake

我正在一个项目中工作,这个项目有许多bitbake食谱并且需要花费很多时间 - 在某些情况下长达13个小时.我是bitbake的新手,我要求某种方式:

  • 检查哪些包需要更多构建
  • 检查很长的依赖项(我已经使用过bitbake -g)
  • 检查是否存在任何循环依赖关系以及如何解决它们
  • 检查是否有未使用的配方以及如何安全地移除它们

或任何使用任何工具来更好地管理和理解食谱的建议.

或者通常用于加速构建过程的任何方法/方法.

欢迎提出建议和确切技术.

编辑日期07/08/2013:

找到这个用于跟踪依赖关系的有用工具

https://github.com/scottellis/oe-deptools

描述:

./oey.py -h

Usage: ./oey.py [options] [package]

Displays OE build dependencies for a given package or recipe.
Uses the pn-depends.dot file for its raw data.
Generate a pn-depends.dot file by running bitbake -g <recipe>.

Options:
-h      Show this help message and exit
-v      Show error messages such as recursive dependencies
-r      Show reverse dependencies, i.e. packages dependent on package
-f      Flat output instead of default tree output
-d <depth>      Maximum depth to follow dependencies, default and max is 10
-s      Show child package dependencies that are already listed
        as direct parent dependencies.

Provide a package name from the generated pn-depends.dot file.
Run the program without a package name to get a list of
available package names.
Run Code Online (Sandbox Code Playgroud)

小智 18

这是一个非常广泛的问题!

首先,这里是关于如何在使用openembedded/yocto项目时检查构建性能和依赖关系的摘要.这回答了问题的第一部分.

什么包需要更多时间来构建?

使用buildstatspybootchartgui工具产生的构建图.

细节:

USER_CLASSES += "buildstats"在您的$BUILDIR/conf/local.conf 文件中设置.这将转储详细的性能数据 $BUILDDIR/tmp/buildstats/<DATE>.接下来使用pybootchartgui.py脚本(in poky/scripts/pybootchartgui)生成图表.这将帮助您本地化构建中可能存在的瓶颈.当然,如果你有很多食谱可以烘烤,那么你的图表将是巨大的.要删除一些噪音,请使用-m MINTIME命令行选项.

例如:

poky/scripts/pybootchartgui/pybootchartgui.py -m 600 $BUILDDIR/tmp/buildstats/201312310904
Run Code Online (Sandbox Code Playgroud)

将仅显示运行时间超过10分钟(600秒)的任务(do_compile,do_fetch等).

如何检查包依赖?

要探索特定包的依赖关系,请使用depexp实用程序.例如,要探索eglibc使用的依赖关系:

bitbake -g -u depexp eglibc
Run Code Online (Sandbox Code Playgroud)

这将更好地理解每个配方在运行和编译时所依赖的内容.

如何检查是否存在任何循环依赖关系以及如何解决它们?

bitbake会自动检测循环依赖关系并在发生此类事件时输出错误消息.错误消息包含导致此循环依赖项的包的名称.

如何检查是否有未使用的配方以及如何安全地将其删除?

bitbake自动计算依赖关系,不会构建目标不需要的包.如果您在图片中发现了一些不需要的包,并且希望将其删除:

  1. 使用bitbake -g -u depexp <TARGET>检查包被如何拉
  2. 修改图层中所需的配方(例如,通过创建bbappend)以手动消除依赖关系

提高整体构建性能

最后,提供了一些如何提高整体构建性能的技巧.这回答了问题的第二部分.

  • 清理你的依赖(bitbake -g -u depexp <TARGET>是你的朋友).减少建设时间会减少.
  • bitbake可以自动缓存构建输出并将其用于将来的构建,这个缓存称为"共享状态缓存",SSTATE_DIR并由您的变量控制local.conf.
  • 在您的设置中设置BB_NUMBER_THREADSPARALLEL_MAKE变量local.conf以匹配您的计算机资源.这些变量分别控制并行运行的任务数以及应该并行运行的进程数'make'(-j 选项).
  • 将"build"目录放在自己的磁盘上.
  • 使用不带日记功能的ext4文件系统以及这些安装选项:noatime,barrier=0,commit=6000.警告:这会使您的硬盘在断电时不可靠.不要在这个硬盘上存储任何有价值的东西.
  • 使用-dev和/或-dbg包构建映像会大大增加do_rootfs任务时间.确保在需要时启用它们(请参阅 EXTRA_IMAGE_FEATURES您的信息local.conf).
  • openembedded和yocto都支持icecream(分布式编译).请参阅icecc课程和这篇文章.
  • 买一台更快的机器;)

参考文献:

Yocto构建性能Wiki

Bitbake GUI工具