在分析Linu内核启动的过程中,发现一段“不平常”的日志,感觉产生这段日志的代码肯定是“不可思议”的。因此就大致分析了一下:

日志如下:

[ 0.000000] console [ttyMT0] enabled

[ 2.157770] Calibrating delay loop... 1694.10 BogoMIPS (lpj=4235264)

更精细的日志如下:

[    0.000000] start:sched_clock_init.

[    2.100505] end  :sched_clock_init.

与这段日志有关的代码是:

void sched_clock_init(void)

{

/*printk(KERN_CRIT “start:sched_clock_init.\n”)*/

sched_clock_running = 1;

/*printk(KERN_CRIT “end  :sched_clock_init.\n”)*/

}

难道这一句简简单单的赋值就会花费两秒是的时间??那么就分析一下相关的代码:sched_clock_running作用和printk的实现。

1.      sched_clock_running的作用

分析发现,调用sched_clock_running的地方仅仅有函数sched_clock_cpu():

u64 sched_clock_cpu(int cpu)

{

if (unlikely(!sched_clock_running))

return 0;

return sched_clock();

}

很明显,如果sched_clock_running为0(unlikely已经说明sched_clock_running很少为0),则返回0;如果不为0,调用sched_clock返回当前的调度时钟时间(相对系统起始的时间,单位为纳秒)。

函数sched_clock_cpu()被大约四个函数调用cpu_clock() / local_clock / update_rq_clock() / ttwu_queue()。

综上可知,执行sched_clock_init之前,获取的调度时钟时间都是0,执行sched_clock_init之后,取得的调度时钟时间都是有非零值的。

2.      Printk()的实现

Printk的实现都在文件./kernel/printk.c中。Printk() ->  vprintk(),而在vprintk()会通过cpu_clock()获取时间。而有上可知,能否打印时间是和sched_clock_init有没有被执行是有直接关系的。

3.      结论

通过分析,可以知道,日志中显示的两秒的差距不是因为执行语句花费了两秒,而是因为在该语句之前,没有获取到有效的调度时钟时间。

转载于:https://www.cnblogs.com/youngerchina/p/5624440.html

Printk与sched_clock_init的一点分析相关推荐

  1. 三国志11的一点分析

    三国志11的一点分析 张嘉华 newzjh@126.com QQ:188318005 由于很多朋友问到我三国志11的渲染问题,今天只好自己用GA加Fraps,还有RPGViewer分析了一下,并把分析 ...

  2. RootKit.Win32.RESSDT.o/Trojan-Downloader.Win32.Agent.mjp 的一点分析

    RootKit.Win32.RESSDT.o/Trojan-Downloader.Win32.Agent.mjp 的一点分析 endurer 原创 2008-04-10 第1版 就是某夏露官方网传播的 ...

  3. OllyDBG反汇编快速找到程序入口一点分析

    出处:http://hi.baidu.com/0soul/blog/item/b62f8f08c2c3c42c6b60fbbe.html 先声明下:这个和脱壳没关系,不是找壳里面的程序入口哦,只是程序 ...

  4. 矢量归一化_关于LRL矢量的一点分析

    [1].Laplace-Runge-lenz矢量 最早接触LRL矢量是在高中的物竞课上,在学习天体物理时老师提到过一个Kepler问题一般有三个守恒量:能量,角动量和LRL(Laplace-Runge ...

  5. Linux移植随笔:对tslib库的ts_test测试程序代码的一点分析

    本文是作者对tslib库的ts_test.c文件进行分析的随笔,其实tslib的几个测试程序结构差不多,譬如ts_print.c和ts_print_raw.c等. 本文并没有涉及太多概念,也没有详细介 ...

  6. android qq登录分析,[原创]对QQ手游授权登录的一点分析

    1.前言 最近无事玩王者,发现某些租号平台可以直接通过自身的APP打开腾讯的游戏进行登录,于是对这一登录过程做了简单的分析 2.QQ打开游戏的简单分析 发现不管是IOS还是Android都可以在QQ里 ...

  7. 对我自己的一点分析总结

    上大学也有2年了,2年里面,学到了很多东西,也失去了很多. 昨天好好想了想我得将来: 我问了我自己这么几个问题: 一.我为什么上大学? 二.我上大学要达到什么目标? 三.我应该如何努力去达成那些目标? ...

  8. 关于branch XYZ is published (but not merged) and is now N commits behind错误的一点分析

    文章转自: https://blog.csdn.net/chenzhentao/article/details/53516481 谢谢分享 文章部分资料参考自老罗的博客:http://blog.csd ...

  9. CSDN PC端网站及其部分功能产品体验的一点分析

    CSDN是国专业IT社区CSDN (Chinese Software Developer Network) 创立于1999年,致力于为中国软件开发者提供知识传播.在线学习.职业发展等全生命周期服务. ...

最新文章

  1. SimpleInjector 简单使用
  2. 数学建模之图像处理---颜色建模
  3. python做excel表格柱状图_用python处理excel数据(八)实现excel表中柱状图功能
  4. EIGRP协议邻居详解及故障实战分析
  5. TF之data_format:data_format中的NHWCNCHW简介、转换的详细攻略
  6. 如何解决Mybatis里mapper文件中关于不能用大于小于号
  7. teamviewer类似软件_TeamViewer系统后台被黑客组织APT攻破,请注意防范
  8. ad域需要自建dns服务器吗,创建AD DS域服务(图文详解)
  9. db2取数据库日期时间_DB2数据库取得当前时间的正确解析
  10. The Linux Process Principle, PID、PGID、PPID、SID、TID、TTY
  11. Linux Shell数值比较和字符串比较及相关
  12. github可以刷星吗_GitHub 没有 star,该写进简历里吗?
  13. html选择器 并列,CSS 中的选择器 (二)- 组合选择器
  14. 关于我的 “二进制部署 kubernetes 集群” 的体验
  15. 001简介-QQ群淘宝客软件开发详解
  16. 约会Rendezvous
  17. 计算机远程桌面修复,大师教您Win10远程桌面连接的修复手段
  18. ESP32 报错is installed, but the tool failed to run
  19. 一般情况下的椭圆方程
  20. 三角形单元刚度矩阵matlab,求助:关于有限元三角形单元合成总刚度矩阵怎么处理...

热门文章

  1. 第04篇 JDK版本导致Unsupported major.minor version 52.0 error
  2. redis 使用-hiredis库使用(一) 基本篇 看完本文就可以上手工作了
  3. JavaScript预解析、作用域题目记录
  4. 局域网内访问mysql数据库
  5. MindSDK+yolov5部署及python版图像视频推理实现
  6. 机器学习算法的基础知识
  7. Spark入门 - History Server配置使用
  8. Akka并发编程——第八节:Actor模型(七)
  9. Failed to load sql modules into the database cluster during PostgreSQL Installation
  10. Java实体映射工具MapStruct