实现查看内核启动的时候每个函数花费的时间

在uboot的环境变量中 添加如下信息,就可以在内核启动的时候查看到每个函数花费的时间

添加: initcall_debug=1

Linux version 3.10.40

1. 使用说明

Documentation/kernel-parameters.txt中的说明如下:

initcall_debug  [KNL] Trace initcalls as they are executed.  Useful

for working out where the kernel is dying during

startup.

说明initcall_debug是一个内核参数,可以跟踪initcall,用来定位内核初始化的问题。在cmdline中增加initcall_debug后,内核启动过程中会增加如下形式的日志,在调用每一个init函数前有一句打印,结束后再有一句打印并且输出了该Init函数运行的时间,通过这个信息可以用来定位启动过程中哪个init函数运行失败以及哪些init函数运行时间较长。

calling  init_workqueues+0x0/0x414 @ 1

initcall init_workqueues+0x0/0x414 returned 0 after 0 usecs

除了在启动过程中会增加日志外,在系统休眠唤醒过程中也会增加如下形式的日志,可以用来定位休眠唤醒失败及休眠唤醒时间太长的问题。

calling  xxxxxx.dma+ @ 6, parent: xxx.0

call xxxxxx.dma+ returned 0 after 2 usecs

2. 相关代码

./init/main.c中声明变量的地方如下,通过core_param,可以通过/sys/module/kernel/parameters/initcall_debug在用户空间获取initcall_debug的状态,另外cmdline能起作用依赖的应该也是这行代码,关于core_param的实现也很复杂,以后再研究。

bool initcall_debug;

core_param(initcall_debug, initcall_debug, bool, 0644);

do_one_initcall函数根据initcall_debug决定是直接调用启动init函数还是调用do_one_initcall_debug,do_one_initcall_debug中在调用init函数时增加日志及计算函数运行时间。

./kernel/power/main.c中根据initcall_debug设定pm_print_times_enabled,./drivers/base/power/main.c中根据pm_print_times_enabled在系统休眠唤醒中打印日志。

遗留问题:

1. core_param的实现原理

2. 内核中他几个地方判断initcall_debug变量,增加日志输出的作用

查看内核中每个函数花费的时间 initcall_debug相关推荐

  1. php源码 时间慢8小时 etc gmt,PHP 中 Date 函数与实际时间相差8小时的解决方法

    PHP 中的 date() 函数显示的时间是格林威治时间,和北京时间正好相差8个小时,其他时间相关的函数,如 strtotime() 也有相同的问题,同样可以通过下面的方法来解决: 1. 修改php. ...

  2. 查看dll中的函数(方法)

    https://jingyan.baidu.com/article/5553fa82b953b365a23934b7.html 查看dll中的函数(方法) 听语音

  3. linux 内核flush,armv8(aarch64)linux内核中flush_dcache_all函数详细分析

    /* *  __flush_dcache_all() *  Flush the wholeD-cache. * Corrupted registers: x0-x7, x9-x11 */ ENTRY( ...

  4. linux mktime函数的实现,Linux内核中mktime()函数算法分析

    Linux内核中的mktime()函数位于kernel/time.c内 该函数主要用于内核启动时,将CMOS中的 年-月-日 时:分:秒 信息转换为距离1970-01-01 00:00:00的秒数 具 ...

  5. mysql timestampdiff datediff_MySql中 DATEDIFF 函数 和 TIMESTAMPDIFF 时间 函数

    在 MySql中对于时间处理方式比较多,不过最近在用到 DATEDIFF 函数 和 TIMESTAMPDIFF 时间 函数的时候发现了点以前没注意的地方: 不多说了 看例子 : SELECT DATE ...

  6. php时间函数不准确,PHP中DATE函数与实际时间相差8小时的解决办法

    一.问题原因 从php5.1.0开始,php.ini里加了date.timezone这个选项,并且默认情况下是关闭的.DATE()函数显示的时间都是格林威治标准时间,和北京时间相差正好8个小时.其他时 ...

  7. optee内核中malloc函数的原理介绍

    文章目录 1.链接文件和汇编文件的对比分析 2.malloc和calloc 3.optee中的内核栈 ★★★ 友情链接 : 个人博客导读首页-点击此处 ★★★ 1.链接文件和汇编文件的对比分析 可用查 ...

  8. php 中间代码,PHP内核中用户函数、内部函数和中间代码的转换

    昨天和一朋友在邮件中讨论这样一个问题:zend_internal_function,zend_function,zend_op_array这三种结构是可以相互转化的,这三者的转化是如何进行的呢? 以此 ...

  9. python查看dll中所有函数_Python中的函数

    初识函数 我们的程序的代码块很快变得越来越大,需要一些方法分成小代码块,便于组织,便于编写和阅读 程序分解成较小代码块有三种方法: 1.函数(function)实现具体功能的代码块,向代码的积木,可以 ...

最新文章

  1. 【存储知识学习】第三章磁盘原理与技术3.4硬盘接口技术和SCSI硬盘接口--《大话存储》阅读笔记
  2. pycharm里怎么关闭一个项目_【周末分享】一个完整的项目复盘到底要怎么做?...
  3. flash可以编辑html文本吗,flash中怎么插入并编辑文字字体样式?
  4. Android官方开发文档Training系列课程中文版:通过NFC共享文件之发送文件到另一台设备
  5. “产学合作勇创新·协同育人书新篇”贵州理工大数据学院数据科学训练营结题答辩报告会圆满举行...
  6. 带宽检测工具iftop
  7. DOM基础操作(三)
  8. python运行cmd命令和opencv搭建_Python环境搭建之OpenCV
  9. There is no getter for property named 'userId' in 'class java.lang.String'
  10. 学生选课管理系统(Java)
  11. 前端安全问题的解决方法
  12. 2017 十款最佳iPhone渗透APP及工具
  13. 单点登录系统设计分析
  14. 使用 f2py 包装 Fortran MPI 程序
  15. edge浏览器打开html文件路径被拆分,Edge浏览器显示网页排版错位
  16. Samba文件服务器的配置
  17. 在 R 中计算 MSE
  18. 全国数字地质图1:20W shp格式【保姆级别下载教程】
  19. 实战解密热门js加密v6
  20. krpano tools随记

热门文章

  1. JVM内存模型、指令重排、内存屏障概念解析
  2. Dubbo 源码分析 - 集群容错之 Cluster
  3. AbstractQueuedSynchronizer 原理分析 - 独占/共享模式
  4. JavaScript中getter/setter的实现
  5. 详解Tomcat配置JVM参数步骤
  6. 成为一名更好的程序员:如何阅读源代码
  7. mysql dba系统学习(16)mysql的mysqldump备份 mysql dba系统学习(17)mysql的备份和恢复的完整实践
  8. 从零开始学习jQuery (十) jQueryUI常用功能实战
  9. 鸟哥的Linux私房菜(服务器)- 第十三章、文件服务器之一:NFS 服务器
  10. 2017-2018-2 『网络对抗技术』Exp1:PC平台逆向破解 20165335