linux高精度时钟分析(Linux high-precision clock analysis).docVIP

linux高精度时钟分析(Linux high-precision clock analysis).doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
linux高精度时钟分析(Linux high-precision clock analysis)

linux高精度时钟分析(Linux high-precision clock analysis) ******************************************** 蛐蛐 / MSN:qgjie@ 本文适用于 linux- V 0.1 欢迎转载,但请保留作者信息 ******************************************** 一、数据结构分析 结构hrtimer_clock_base { 结构hrtimer_cpu_base * cpu_base; clockid_t指数; 结构rb_root活跃; 结构rb_node *第一; ktime_t分辨率; ktime_t(* get_time)(void); ktime_t(* get_softirq_time)(void); ktime_t softirq_time; # ifdef config_high_res_timers ktime_t偏移; int(*编程)(struct hrtimer * T, 结构hrtimer_clock_base * B, ktime_t N); # endif }; 结构hrtimer_cpu_base { spinlock_t锁; 结构lock_class_key lock_key; 结构hrtimer_clock_base clock_base [ hrtimer_max_clock_bases ]; # ifdef config_high_res_timers ktime_t expires_next; 国际hres_active; 结构list_head cb_pending; 无符号长nr_events; # endif }; kernel-2.6.22中的臂拱加入了对dynticks,时钟/事件支持。找了些内核 及子系统近来的变化时钟定时器,总结一下。 一般来说软定时器(定时器轮/ hrtimer) 都是由硬件定时器(时钟中断之类)以及相关的时钟源(例如GPT驱动SOC), 所以我打算先从时钟这层开始介绍,接着是软定时器,内核计时, 最后来看一些应用。 时钟源 时钟源定义了一个时钟装置的基本属性及行为,这些时钟装置一般都有计数, 定时,产生中断能力,比如GPT。结构定义如下: struct {时钟 char *名称; 结构list_head列表; 国际评级; cycle_t(阅读)(void); cycle_t面具; U32多;/*周期- xtime区间,也许两个时钟周期触发一个 中断(一个xTime区间)* / U32移; 无符号长标志; cycle_t(* Vread)(void); 无效(*简历)(无效); * *计时具体数据,忽略* cycle_t cycle_interval;/*只是GPT计数每个操作系统时的速度 u64 xtime_interval;/* xtime_interval = cycle_interval *多。* / cycle_t cycle_last ____cacheline_aligned_in_smp;/*最后率数*周期/ u64 xtime_nsec; / *盘点,仍然从xtime.tv_nsec *现在纳秒数偏移率= xtime_nsec + * xtime.tv_nsec 移* / S64误差; }; 最重要的成员是read(),cycle_last和cycle_interval。分别定义了读取计数时钟装置 寄存器当前计数值接口,保存上一次周期计数值和每个蜱周期间隔值。这个结构内的值, 无论是cycle_t,还是u64类型(实际cycle_t就是u64)都是计数值(周期),而不是纳秒, SEC和jiffies。read()是整个内核读取精确的单调时间计数的接口, 核会用它来计算其他时间,比如:jiffies,xtime。 的引入时钟,解决了之前内核各个拱都有自己的时钟装置的管理方式, 基本都隐藏在MSL层,核心及司机很难访问的问题。它导出了以下接口: 1)clocksource_register()注册时钟 2)clocksource_get_next()获取当前设备时钟 3)clocksource_read()读取时钟,时钟实际跑到- read() 当司机处理的时间精度比较高的时,可以通过上面的接口,直接拿时钟装置来读。 当然目前股票时钟中断源也会以的形式存在时钟。 时钟事件 时钟事件的主要作用是分发时钟事件及设置下一次触发条件。在没有时钟事件之前, 时钟中断都是周期性地产生,也就是熟知的jiffies和赫兹。 时钟事件设备主要的结构: 结构clock_event_device { 常量char *名称; 无符号整型特征; 无符号长m

文档评论(0)

f8r9t5c + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

版权声明书
用户编号:8000054077000003

1亿VIP精品文档

相关文档