云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

数据库服务器_站群服务器_高性价比

小七 141 0

Yocto/OpenEmbedded Bitbake构建可视化

随着像Yocto项目和OpenEmbedded这样的生态系统在嵌入式设备开发中越来越流行,底层bitbake构建工具的使用也在增加。Bitbake是一个强大的工具,用于管理、构建和集成完整的操作系统映像,通过包和分发管理活动,如获取源代码、配置、交叉编译、安装。与所有的软件构建系统一样,bitbake的速度和性能至关重要,是提高生产率和质量的关键因素。这一点在我与Yocto和bitbake社区的主要贡献者和用户交谈时也得到了多次验证,在那里有很多关于如何提高性能的关注和持续的讨论。因此,一个有效的问题是,我们能否理解bitbake构建当前的行为,并从中确定哪里或是否有改进的机会?在这篇文章中,我将解释我理解bitbake构建性能的过程,并提供一些有用的实用程序,我希望bitbake社区能够从中受益,因为不断地追求额外的构建性能!今天在bitbake构建可视化和性能分析方面有什么可用的?在遵循了Yocto项目快速启动指南并对bitbake构建过程及其构件进行了一些探索之后,我在/tmp下找到了一个名为buildstats的文件夹。此文件夹具有以下结构:buildstats/(例如core-image-sato-qemux86)///do_compile do_configure::do_unpack查看其中一个do_u文件(例如do_compile)会显示出很多有趣的数据:>cat do\u compile Event:TaskStarted Started:1367381613.31 xkbcomp-1.2.4-r8.0:do_compile:运行时间:3.25秒CPU使用率:23.3EndIOinProgress:0 EndReadsComp:0::StartTimeWrite:1725266628 startTimeIO:1725869092 StartWritesComp:0状态:通过结束:1367381616.57因此对于每个任务,我们可以获得开始时间、结束时间和其他一些可能有用的数据,有趣!bitbake或Yocto项目社区中是否有人已经使用这些数据进行了一些分析和分析?事实证明,有一个名为pybootchart的实用程序可以生成静态SVG可视化,作为bitbake构建中所有任务的垂直列表。随着我使用electronicsinsight的强大功能来分析构建性能,pybootchart的这种可视化方式无法根据所呈现的数据量进行扩展,而且提供的额外可操作指标和报告很少,这些指标和报告将帮助我了解我的瓶颈和改进机会在哪里。所以一个有趣的问题是,有没有一种方法可以利用electronicsinsight来可视化和理解bitbake构建行为和性能,使用bitbake buildstats数据?事实证明,实现一个可以将所有这些数据转换为与electronicsinsight兼容的注释文件的脚本是相当简单的,我们可以用它来理解可操作的好处,比如bitbake并发的影响,以及整个任务的逐时报告。下面详细介绍了如何访问public CloudBees GitHub上提供的这个脚本存储库。使用electronicsight可可视化和理解bitback并发的效果bitbake支持至少两个级别的并行性-通过bitbake任务执行机制(BBNUMBER_THREADS)中的多线程以及将-j标志传递给要进行的底层调用(PARALLEL\u make)。当运行在具有20GB RAM和良好磁盘性能的8核物理服务器上时,下面的三个屏幕截图来自使用不同并发级别的bitbake构建(y轴上的并发线程,x轴上的时间,以及由不同颜色框表示的单个任务):**\u BB_NUMBER_THREADS=8/PARALLEL_MAKE=8:BB_NUMBER_THREADS=12/PARALLEL_MAKE=12:BB_NUMBER_THREADS=16/PARALLEL_MAKE=16**:正如您在这个特定方框上看到的这三种不同的构建配置,8路并发提供了最佳性能大约74分钟,线程上的分布看起来很拥挤。当您扩展并发性时,构建过程中有两个阶段,大约在~32m和~50m处,间隙或空闲线程表示序列化-显然,这指出了如果我尝试优化此构建,我将开始分析的区域。当使用这样的注释运行electronicsinsight时,很容易指出哪些任务可能是序列化的罪魁祸首。除了通过以上三个截图展示electronicsight bitbake构建的可视化效果之外,我并不打算对此进行详尽的分析点。使用electronicsight可以按时间分布了解相关任务electronicsight有一个内置的报告,可以用来可视化您的构建在哪里花费的热图时间,称为"工作时间按类型"报告。这种对不同工作类型的自动分类是通过一些巧妙的识别和映射来完成的,这些工作是在工具的保护下进行的。不幸的是,目前,electronicsight中的这些类别是固定的,不能自定义。为了启用这种分类,我在转换脚本中构建了一些映射逻辑,其中最重要的任务到作业的映射如下所示。让我们来看看我们得到了什么:正如您所看到的,do\u configure、do\u compile和do\u package任务组合在一起大约占整个运行时的77个。我必须承认,dougonfigure任务的相对重要性(平均运行时间为25s)让我有点惊讶,并且有兴趣进一步探讨。在上下文中,这个构建中其他重要的bitbake任务是:文件系统I/O:dou install Exist:do_package_write_rpm Code gen:do_populate_sysrootThis is cool!如何使用此工具来可视化并更好地理解我自己的bitbake构建?它真的简单:electronicsight是作为免费CloudBees Accelerator Developer Edition的一部分捆绑下载将bitbakebuildstats数据转换为与electronicsight兼容的注释的脚本可从public CloudBees GitHub下载存储库。在你的bitbake构建环境,只需运行从GitHub下载的以下脚本,并在electronicsight中打开生成的注释文件:bitbake\u buildstats_annogenerator使用此工具还可以做什么?electronicsight是一个非常强大的构建优化、故障排除和分析工具。bitbake-to-annotation转换中还可以构建许多其他功能脚本:嵌入每个bitbake任务的stdout,为了便于搜索和故障排除利用bitbake buildstats任务文件中的其他数据点来进一步度量和数据可视化,您觉得这有用吗使用此工具的反馈?别犹豫让我们知道!构建加速和持续交付如果构建和测试需要太长时间才能完成,那么持续交付就不是连续的。进一步了解CloudBees Accelerator如何将构建和测试速度提高20倍,从而提高软件上市时间、基础设施利用率和开发人员生产率。