- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 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
您可能关注的文档
- SMA施工与监理(SMA construction and supervision).doc
- SketchUp快捷命令(SketchUp shortcut).doc
- SMI的问题解答(SMI's problem solution).doc
- smt 的常用知识(Common knowledge of SMT).doc
- SMT1().doc
- SMT介绍(SMT is introduced).doc
- SMT基础知识(Basic knowledge of SMT).doc
- SMART技术(SMART technology).doc
- SMT常用知识简介(General knowledge about SMT).doc
- smt设备型号(SMT equipment model).doc
- listening skill 1(听的技能 1).doc
- liuti(liuti).doc
- List28(List28).doc
- Loadrunner性能测试一个实例(Loadrunner performance tests an instance).doc
- loadboard及测试板PCB设计参考(Loadboard and test board PCB design reference).doc
- LOF交易规则(LOF trading rules).doc
- Logo里有乾坤 - 左岸读书_blog(The Logo has the qiankun - left bank reading _blog).doc
- lol小技巧总有你不知道的(Lol tips always have something you don't know).doc
- lol爬分宝典(Lol climbs the book).doc
- lol用法(Lol usage).doc
最近下载
- 高级日语(三)第08課 携帯上司 8課内容理解1.ppt VIP
- 全麻术后导尿管相关膀胱刺激征的管理.pptx VIP
- 精选洗车场租赁协议2024年通用.docx VIP
- 国家中小学智慧教育平台的应用培训(OCR).pdf VIP
- 鲁宾逊漂流记:英汉对照版-英DanielDefoe.pdf VIP
- 伤口造口护理.pptx VIP
- UFDEV_PHASE_1_5_5_项目客户化开发推进计划.xls VIP
- 2024-2025学年高一数学必修一《第一章 集合与常用逻辑用语》测试卷附答案解析.pdf VIP
- 某电厂引风机拆除安装实施方案.doc VIP
- 口语交际--有趣的动物及口语交际《有趣的动物》教案.doc VIP
文档评论(0)