今天发现现在使用的噪声仪器时间不准,每天满大约10几分钟,经过查找资料,发现以下一篇中提到的问题很可疑,转载如下:

听说有人抱怨他的Linux服务器或者嵌入式Linux开发板上的时间越来越慢,当时念头一闪,没有多在意

今天顿悟,果然是有道理的

用户空间的延时和定时器,都是靠内核定时器实现的。内核定时器 struct timer_list 以及相关内核api,

init_timer()、add_timer、mod_timer 、del_timer,都依赖于jiffes

一个系统时钟中断,jiffes就加1,每秒将产生 1*HZ 个jiffes

可以说,这个jiffes,也可称为滴答,等于是OS的心跳,靠着这个稳定长期的中断,内核才能够及时从一个时间片到期的进程手中夺回cpu的使用权,进行下一次调度。当然,每一

次中断结束或者返回用户空间都可能进入调度,所以这里用词是及时。

2.6.21版本开始支持无滴答内核,据说能够节能。不过我想没有了滴答,内核定时器失效,很多软件怕是要重写了,所以大家都不大关注这个。

常见的计算机系统会带有一个RTC,这个才是可靠的墙上时钟源。

不过访问rtc的速度比较慢,所以只是上电的时候,内核读取一次rtc时间,之后在OS里看到的时间都是靠一个一个jiffes加上去的。

很多时候,为了保护临界资源,不得不关闭所有中断,这个在中断处理函数中尤为常见。那么就有可能在关闭中断后的临界区,发生了系统时钟中断,这次时钟中断就被忽略了。

导致jiffies没有增加,进而影响系统时钟精度。这个概率我只能定性的分析。比如arm上HZ为100,pc上为1000,那么每隔10ms或者1ms就能有一次时钟中断。而10ms期间,200MHZ

的arm芯片大约能执行 0.5M

条指令,正好落在临界区的几百条指令的概率不是很大。但是计算机跑起来微小的误差也是很容易积累的,所以如有必要,可以另开一个守护进程,定

时读取rtc来修正系统时间。

手工验证一下

spinlock_t lock;

unsigned long flags;

static int test_timer_init_module(void)

{

spin_lock_init(&lock);

printk( KERN_DEBUG "Module test_timer init\n" );

spin_lock_irqsave(&lock, flags);

printk( KERN_DEBUG "the jiffies is %ld\n" ,jiffies);

mdelay(2000);

printk( KERN_DEBUG "the jiffies is %ld\n" ,jiffies);

spin_unlock_irqrestore(&lock, flags);

return 0;

}

不加黑色代码,两个jiffes相差

20xx ,pc上HZ为1000,这个结果还是正常的

加上黑色代码,关闭中断2000ms,两个jiffes没有差别

所以写驱动一定要自律,关闭中断后的代码一定要尽可能的简洁迅速

所以需要在中断响应时速度尽量快,处理终端时不能等待太长时间,否则很多其他中断会被错误而导致意想不到的问题,以上时钟不准就是一例。

linux 读写时间变长,linux时钟变慢的原因分析【转】相关推荐

  1. mysql加索引后查询时间变长了(终于有头绪了)

    在使用ip查询的地址(地址和ip对应的信息存在mysql中,使用的是myisam)的过程中遇到一个这样的问题: 给表中的一些字段加索引后查询时间变长了,cpu飙升了 该表的结构如下 这是什么原因呢难道 ...

  2. 在Linux执行命令报错”Arg list too long”的原因分析

    http://www.yunweipai.com/archives/558.html 在Linux执行命令报错"Arg list too long"的原因分析 吞拿鱼手卷 于 3 ...

  3. php 解析网页慢,网页访问变慢的原因分析及优化

    我的个人wordpress博客开通也有二个星期了,除了写了几篇文章之外,对云服务器.       wordpress的使用也是非常的感兴趣,从一开始的配置,到各种插件的探索,玩的不亦乐乎.自我感觉个人 ...

  4. 电脑使用变慢七大原因分析

    转自:微点阅读  https://www.weidianyuedu.com 很多朋友在使用电脑的过程中都会发现电脑越用越慢,而其中的大部分人会抱着"慢就慢点儿吧"的心理继续使用,殊 ...

  5. linux 看硬盘运行时间长,Linux服务器查看硬盘通电时长命令 确保服务器硬件配置...

    如今我们选择云服务器成本比以前几年确实便宜不少,早年我们选择一台年付15-20美元的服务器需要等待抢购秒杀才可以到手,如今这类商家确实是比较多.当然这些是排除稳定性和线路速度的前提下的,如果确实我们需 ...

  6. linux校时 某个服务器,Linux系统中如何进行网络校时?

    linux系统对于大多数用户来说,肯定没有windows系统那么熟悉,下文介绍了Linux系统中如何进行网络校时方法,具体内容如下所述. 我们都知道在Linux系统上有两个时间,一个是Linux系统的 ...

  7. linux 读写flash 测试,使用linux的MTD tests support测试flash性能

    本文为gp_scorpius原创文章:http://blog.csdn.net/gp_scoprius/article/details/53257056 在嵌入式Linux开发过程中,经常会使用到no ...

  8. linux 关机时卸载sd,Linux下U盘SD卡的自动挂载和卸载

    以下内容主体转自如下两篇博客: http://blog.sina.com.cn/s/blog_557366df0100nk7r.html http://blog.csdn.net/xdw1985829 ...

  9. linux重启时无法关机,linux系统无法关机/重启

    机器型号:戴尔380 系统:Linux操作系统 使用图形界面启动后,在开始菜单里->关机,显示器.鼠标.键盘瞬间断电,但是主机保持原状,当ssh远程可以登录该主机,可以成功. 为了找到不能关机的 ...

最新文章

  1. 内存管理模拟程序c语言,C语言 内存管理详解
  2. 关于开始申请2010年4月份微软MVP的通知!
  3. 为所有服务器端代码调用ConfigureAwait的最佳实践
  4. git常用基本简单命令
  5. ajax中加上AntiForgeryToken防止CSRF攻击
  6. 是什么职位_2021国家公务员考试职位表出炉!你真的了解什么是公务员吗?
  7. mysql foreign key_MYSQL外键(Foreign Key)的使用
  8. word里如何设置目录页码
  9. 纯电动整车控制器-基于模型的开发
  10. Matlab论文插图绘制模板第28期—柱状图(带误差棒errorbar)
  11. domain-transfer reid郑哲东 joint 判别和生成REID
  12. 用计算机升级ipad系统软件,iPad如何升级系统?三种ipad升级系统的方法汇总
  13. Android进阶三部曲 第三部《Android进阶指北》已完稿
  14. STM32通过IIC读取BH1750光照数据
  15. 周涨粉超30w B站UP主非非宇Fay粉丝增长密码是什么?
  16. 软考报名季,软考高级应该怎么选?
  17. mysql数据备份管理
  18. 代码大全(读书笔记)
  19. iOS___oc app中接入支付宝详细流程
  20. 在nodejs中将GBK转UTF

热门文章

  1. L2-1 包装机 (25 分)(STL43行代码)
  2. 7-1 最大子列和问题 (20 分)
  3. 记录webpack的source map使用详细说明
  4. vs服务器连接xp系统,xp系统远程连接服务器
  5. Java黑皮书课后题第5章:*5.9(找出得最高分的前两个学生)编写程序,提示用户输入学生的个数、每个学生名字及分数,最后显示获得最高分的学生
  6. C语言学习之求两个整数的最大值
  7. teledb兼容mysql5.7_maridb安装
  8. intValue()的用法
  9. 维护索引——通过重组索引提高性能
  10. javascript 高级程序设计学习笔记(面向对象的程序设计) 1