
时间子系统
文章平均质量分 68
linux时间子系统
HugoVus
这个作者很懒,什么都没留下…
展开
-
高精度定时器(HRTIMER)的原理和实现
上一篇文章,我介绍了传统的低分辨率定时器的实现原理。而随着内核的不断演进,大牛们已经对这种低分辨率定时器的精度不再满足,而且,硬件也在不断地发展,系统中的定时器硬件的精度也越来越高,这也给高分辨率定时器的出现创造了条件。内核从2.6.16开始加入了高精度定时器架构。在实现方式上,内核的高分辨率定时器的实现代码几乎没有借用低分辨率定时器的数据结构和代码,内核文档给出的解释主要有以下几点:低分辨率定时器的代码和jiffies的关系太过紧密,并且默认按32位进行设计,并且它的代码已经经过长时间的优化,目前转载 2021-10-28 15:51:18 · 6290 阅读 · 0 评论 -
低分辨率定时器的原理和实现
利用定时器,我们可以设定在未来的某一时刻,触发一个特定的事件。所谓低分辨率定时器,是指这种定时器的计时单位基于jiffies值的计数,也就是说,它的精度只有1/HZ,假如你的内核配置的HZ是1000,那意味着系统中的低分辨率定时器的精度就是1ms。早期的内核版本中,内核并不支持高精度定时器,理所当然只能使用这种低分辨率定时器,我们有时候把这种基于HZ的定时器机制成为时间轮:time wheel。虽然后来出现了高分辨率定时器,但它只是内核的一个可选配置项,所以直到目前最新的内核版本,这种低分辨率定时器依然被大转载 2021-10-28 15:48:14 · 550 阅读 · 0 评论 -
linux kernel 时钟系统的前世今生
趁工作不忙想把最近工作中研究到的kernel的时钟系统 软中断 定时器 tasklet 工作队列实现机制总结下,首先说明,这些原理实现对编写driver不会有多大帮助,但是明白理解这些kernel机制的实现原理,对于我们从系统角度去思考解决问题,会有很大帮助。上篇博文《一个奇葩bug的解决》就印证了这一点,链接如下:http://blog.youkuaiyun.com/skyflying2012/article/details/44623515那么为什么要把这些内容放在一起总结,因为他们之间是相关联的,kern转载 2021-10-26 19:29:08 · 676 阅读 · 0 评论 -
一个奇葩bug的解决
公司做的网络视频监控产品正在做测试,这两天测试人员报告说多台设备出现奇怪的问题,现象如下:(1)PC端接收不到设备端应用程序采集通过网络发送的图像(2)PC端可以ping通设备端,telnet可以登录设备,设备ping PC端只能通一个数据包于是我telnet登录异常设备,通过tftp http ftp上传下载文件到PC,发现都正常。起初怀疑是设备网卡driver出现问题,但是细想网卡driver处于数据链路层,上层(不管应用层是哪种协议)传下来的数据包对于driver来说是一样的。tft转载 2021-10-26 19:27:20 · 364 阅读 · 0 评论 -
do_gettimeofday
do_gettimeofday调用getnstimeofday,最关键的是timerkeeper.xtime,这是kernel的墙上时间,xtime的更新是在kernel下clockevent注册的时钟中断,只要kernel时钟中断正常,xtime时间就会不断被更新。但是由于kernel一般是1/100s产生一次时钟中断(kernel配置默认为100HZ),当然对于tickless sysytem,时钟中断不固定,但是精度都不够高。为了提高时钟精度,调用timekeeping_get_ns,使用已注册c转载 2021-10-25 09:40:52 · 511 阅读 · 0 评论