查看内核中每个函数花费的时间 initcall_debug
实现查看内核启动的时候每个函数花费的时间
在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相关推荐
- php源码 时间慢8小时 etc gmt,PHP 中 Date 函数与实际时间相差8小时的解决方法
PHP 中的 date() 函数显示的时间是格林威治时间,和北京时间正好相差8个小时,其他时间相关的函数,如 strtotime() 也有相同的问题,同样可以通过下面的方法来解决: 1. 修改php. ...
- 查看dll中的函数(方法)
https://jingyan.baidu.com/article/5553fa82b953b365a23934b7.html 查看dll中的函数(方法) 听语音
- linux 内核flush,armv8(aarch64)linux内核中flush_dcache_all函数详细分析
/* * __flush_dcache_all() * Flush the wholeD-cache. * Corrupted registers: x0-x7, x9-x11 */ ENTRY( ...
- linux mktime函数的实现,Linux内核中mktime()函数算法分析
Linux内核中的mktime()函数位于kernel/time.c内 该函数主要用于内核启动时,将CMOS中的 年-月-日 时:分:秒 信息转换为距离1970-01-01 00:00:00的秒数 具 ...
- mysql timestampdiff datediff_MySql中 DATEDIFF 函数 和 TIMESTAMPDIFF 时间 函数
在 MySql中对于时间处理方式比较多,不过最近在用到 DATEDIFF 函数 和 TIMESTAMPDIFF 时间 函数的时候发现了点以前没注意的地方: 不多说了 看例子 : SELECT DATE ...
- php时间函数不准确,PHP中DATE函数与实际时间相差8小时的解决办法
一.问题原因 从php5.1.0开始,php.ini里加了date.timezone这个选项,并且默认情况下是关闭的.DATE()函数显示的时间都是格林威治标准时间,和北京时间相差正好8个小时.其他时 ...
- optee内核中malloc函数的原理介绍
文章目录 1.链接文件和汇编文件的对比分析 2.malloc和calloc 3.optee中的内核栈 ★★★ 友情链接 : 个人博客导读首页-点击此处 ★★★ 1.链接文件和汇编文件的对比分析 可用查 ...
- php 中间代码,PHP内核中用户函数、内部函数和中间代码的转换
昨天和一朋友在邮件中讨论这样一个问题:zend_internal_function,zend_function,zend_op_array这三种结构是可以相互转化的,这三者的转化是如何进行的呢? 以此 ...
- python查看dll中所有函数_Python中的函数
初识函数 我们的程序的代码块很快变得越来越大,需要一些方法分成小代码块,便于组织,便于编写和阅读 程序分解成较小代码块有三种方法: 1.函数(function)实现具体功能的代码块,向代码的积木,可以 ...
最新文章
- 【存储知识学习】第三章磁盘原理与技术3.4硬盘接口技术和SCSI硬盘接口--《大话存储》阅读笔记
- pycharm里怎么关闭一个项目_【周末分享】一个完整的项目复盘到底要怎么做?...
- flash可以编辑html文本吗,flash中怎么插入并编辑文字字体样式?
- Android官方开发文档Training系列课程中文版:通过NFC共享文件之发送文件到另一台设备
- “产学合作勇创新·协同育人书新篇”贵州理工大数据学院数据科学训练营结题答辩报告会圆满举行...
- 带宽检测工具iftop
- DOM基础操作(三)
- python运行cmd命令和opencv搭建_Python环境搭建之OpenCV
- There is no getter for property named 'userId' in 'class java.lang.String'
- 学生选课管理系统(Java)
- 前端安全问题的解决方法
- 2017 十款最佳iPhone渗透APP及工具
- 单点登录系统设计分析
- 使用 f2py 包装 Fortran MPI 程序
- edge浏览器打开html文件路径被拆分,Edge浏览器显示网页排版错位
- Samba文件服务器的配置
- 在 R 中计算 MSE
- 全国数字地质图1:20W shp格式【保姆级别下载教程】
- 实战解密热门js加密v6
- krpano tools随记
热门文章
- JVM内存模型、指令重排、内存屏障概念解析
- Dubbo 源码分析 - 集群容错之 Cluster
- AbstractQueuedSynchronizer 原理分析 - 独占/共享模式
- JavaScript中getter/setter的实现
- 详解Tomcat配置JVM参数步骤
- 成为一名更好的程序员:如何阅读源代码
- mysql dba系统学习(16)mysql的mysqldump备份 mysql dba系统学习(17)mysql的备份和恢复的完整实践
- 从零开始学习jQuery (十) jQueryUI常用功能实战
- 鸟哥的Linux私房菜(服务器)- 第十三章、文件服务器之一:NFS 服务器
- 2017-2018-2 『网络对抗技术』Exp1:PC平台逆向破解 20165335