0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

几种统计内核启动耗时的方法

麦辣鸡腿堡 来源:嵌入式Linux充电站 作者: Vincent 2023-10-04 15:01 次阅读

启动耗时统计

printk time

打开kernel配置:

kernel hacking --- >
[*] Show timing information on printks

打开后,每个printk的前面都会显示时间戳

主要用来测量内核启动过程各个阶段的耗时

initcall_debug

众所周知,kernel启动时会执行不同等级的initcall,而每个initcall的耗时也是可以统计的。

kernelcmdline中加入参数initcall_debug=1

initcall_debug=1
setargs_nand=setenv bootargs console=${console} earlyprintk=${earlyprintk} root=${nand_root} initcall_debug=${initcall_debug} init=${init}

开启后,就能打印每个initcall函数调用及耗时。

bootgraph

内核自带了一个工具用于统计启动时间:scripts/bootgraph.pl

使用该工具需要打开内核配置CONFIG_PRINTK_TIME=y,并且在cmdline中加上"initcall_debug=1"

系统启动之后,执行命令:

dmesg|perl $(kernel_dir)/script/bootgraph.pl > out.svg

用浏览器查看out.svg文件,可以看到内核启动过程中各个阶段的耗时。

这个工具有点类似于perf的火焰图,可以统计启动各阶段的耗时。

bootchart

除了内核自带的工具,也有开源的工具可用:bootchart

bootchart是一个用于linux启动过程性能分析的开源软件工具,在系统启动过程自动收集CPU占用率、进程等信息,并以图形方式显示分析结果,可用作指导优化系统启动过程。

  • 修改kernel cmdline。将其中的init修改为“init=/sbin/bootchartd”。
  • 收集信息。bootchartd会从/proc/stat/proc/diskstat/proc/[pid]/stat中采集信息,经过处理后保存为bootchart.tgz文件
  • 转换图片。在pc上通过pybootchartgui.py工具将bootchart.tgz转换为bootchart.png,方便分析

最后也会成图片供做分析,例如:

图片

bootchar主要用来测量挂载文件系统到主应用程序启动过程中的耗时

gpio+示波器

可以找一个在系统启动过程中空闲的GPIO,在适当位置设置GPIO电平。

通过示波器抓取波形可以得到各阶段耗时。

通常该方法被用来 测量整个启动的耗时,或者各阶段的耗时 ,该方法也是用的比较多的。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 示波器
    +关注

    关注

    113

    文章

    6205

    浏览量

    184570
  • 内核
    +关注

    关注

    3

    文章

    1366

    浏览量

    40236
  • Linux
    +关注

    关注

    87

    文章

    11233

    浏览量

    208985
收藏 人收藏

    评论

    相关推荐

    请问DM8168上怎么统计算法程序的耗时

    大家好!请问,CCSv6单独连接DM8168上的DSP C674x后,已经可以运行算法程序,不过怎么统计该算法程序的耗时
    发表于 02-20 10:45

    几种Linux下后台启动jar包的方法介绍

    ,但是窗口被锁定,当我们关闭窗口或Ctrl + C打断程序运行时,程序就会退出,这肯定不是我们想要的,下面我介绍几种Linux下后台启动jar包的方法
    发表于 07-22 08:02

    统计的学习方法

    统计学习方法感知机
    发表于 07-15 10:33

    内核是如何启动

    UbuntuLTS16.04_x64系统 *参考资料:《嵌入式Linux应用开发手册》*/目录内核启动流程分析之编译体验与配置1、解压缩2、打补丁3、配置3.1 方法一:修改...
    发表于 12-20 07:15

    Cortex-M3内核HardFault错误调试定位方法有哪几种

    STM32程序进入HardFault_Handler故障的原因有哪些?Cortex-M3内核HardFault错误调试定位方法有哪几种
    发表于 01-27 07:03

    分辨矩阵法耗时推算

    分辨矩阵法耗时推算:针对粗集理论的分辨矩阵方法求解知识约简过程中时空性能上存在的问题,提出分辨矩阵法耗时推算的原理和算法,包括2 个耗时段的推算及推算结果的可靠
    发表于 10-17 23:06 17次下载

    几种启动电路图

    几种启动电路图
    发表于 01-20 22:44 5397次阅读
    <b class='flag-5'>几种</b>软<b class='flag-5'>启动</b>电路图

    linux内核启动内核解压过程分析

    linux启动内核解压过程分析,一份不错的文档,深入了解内核必备
    发表于 03-09 13:39 1次下载

    Linux内核文档:ARM-启动

    Linux内核文档:ARM-启动
    发表于 10-30 10:15 6次下载
    Linux<b class='flag-5'>内核</b>文档:ARM-<b class='flag-5'>启动</b>

    用户与内核空间数据交换的方式之一:内核启动参数

    Linux 提供了一种通过 bootloader 向其传输启动参数的功能,内核开发者可以通过这种方式来向内核传输数据,从而控制内核启动行为。
    发表于 05-14 15:42 490次阅读

    内核级HOOK的几种实现方法与应用说明

    实现内核级HOOK 对于拦截、分析、跟踪系统内核起着致关重要的作用。实现的方法不同意味着应用侧重点的不同。如想要拦截NATIVE API 那么可能常用的就是HOOKSERVICE TABLE 的
    发表于 11-10 17:35 5次下载

    电机软启动几种方式_电机软启动最简单的方法

    电机软启动是一种通过逐渐升高电机电压和电流,减小电机启动时的电流冲击,保护电机和电网,提高电机的使用寿命和运行效率的控制方式。常见的电机软启动方式包括以下几种:   电压降低
    发表于 03-09 09:35 9671次阅读

    Linux内核常用的几种镜像文件

    简述几种常用的内核镜像文件:vmlinux、Image、zImage、bzImage、uImage、bootpImage、XIPImage等等。
    发表于 06-23 11:49 1.2w次阅读
    Linux<b class='flag-5'>内核</b>常用的<b class='flag-5'>几种</b>镜像文件

    Linux内核启动流程(下)

    本篇是通用内核启动阶段,一般是C语言实现。
    发表于 06-23 14:08 523次阅读
    Linux<b class='flag-5'>内核</b><b class='flag-5'>启动</b>流程(下)

    如何在内核启动secondary cpu

    启动secondary cpu 内核启动secondary cpu之前当然需要为其准备好执行环境,因为内核中cpu最终都将由调度器管理,故此时调度子系统应该要初始化完成。 同时cpu
    的头像 发表于 12-05 15:46 559次阅读
    如何在<b class='flag-5'>内核</b>中<b class='flag-5'>启动</b>secondary cpu