linux 读写时间变长,linux时钟变慢的原因分析【转】
今天发现现在使用的噪声仪器时间不准,每天满大约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时钟变慢的原因分析【转】相关推荐
- mysql加索引后查询时间变长了(终于有头绪了)
在使用ip查询的地址(地址和ip对应的信息存在mysql中,使用的是myisam)的过程中遇到一个这样的问题: 给表中的一些字段加索引后查询时间变长了,cpu飙升了 该表的结构如下 这是什么原因呢难道 ...
- 在Linux执行命令报错”Arg list too long”的原因分析
http://www.yunweipai.com/archives/558.html 在Linux执行命令报错"Arg list too long"的原因分析 吞拿鱼手卷 于 3 ...
- php 解析网页慢,网页访问变慢的原因分析及优化
我的个人wordpress博客开通也有二个星期了,除了写了几篇文章之外,对云服务器. wordpress的使用也是非常的感兴趣,从一开始的配置,到各种插件的探索,玩的不亦乐乎.自我感觉个人 ...
- 电脑使用变慢七大原因分析
转自:微点阅读 https://www.weidianyuedu.com 很多朋友在使用电脑的过程中都会发现电脑越用越慢,而其中的大部分人会抱着"慢就慢点儿吧"的心理继续使用,殊 ...
- linux 看硬盘运行时间长,Linux服务器查看硬盘通电时长命令 确保服务器硬件配置...
如今我们选择云服务器成本比以前几年确实便宜不少,早年我们选择一台年付15-20美元的服务器需要等待抢购秒杀才可以到手,如今这类商家确实是比较多.当然这些是排除稳定性和线路速度的前提下的,如果确实我们需 ...
- linux校时 某个服务器,Linux系统中如何进行网络校时?
linux系统对于大多数用户来说,肯定没有windows系统那么熟悉,下文介绍了Linux系统中如何进行网络校时方法,具体内容如下所述. 我们都知道在Linux系统上有两个时间,一个是Linux系统的 ...
- linux 读写flash 测试,使用linux的MTD tests support测试flash性能
本文为gp_scorpius原创文章:http://blog.csdn.net/gp_scoprius/article/details/53257056 在嵌入式Linux开发过程中,经常会使用到no ...
- linux 关机时卸载sd,Linux下U盘SD卡的自动挂载和卸载
以下内容主体转自如下两篇博客: http://blog.sina.com.cn/s/blog_557366df0100nk7r.html http://blog.csdn.net/xdw1985829 ...
- linux重启时无法关机,linux系统无法关机/重启
机器型号:戴尔380 系统:Linux操作系统 使用图形界面启动后,在开始菜单里->关机,显示器.鼠标.键盘瞬间断电,但是主机保持原状,当ssh远程可以登录该主机,可以成功. 为了找到不能关机的 ...
最新文章
- 内存管理模拟程序c语言,C语言 内存管理详解
- 关于开始申请2010年4月份微软MVP的通知!
- 为所有服务器端代码调用ConfigureAwait的最佳实践
- git常用基本简单命令
- ajax中加上AntiForgeryToken防止CSRF攻击
- 是什么职位_2021国家公务员考试职位表出炉!你真的了解什么是公务员吗?
- mysql foreign key_MYSQL外键(Foreign Key)的使用
- word里如何设置目录页码
- 纯电动整车控制器-基于模型的开发
- Matlab论文插图绘制模板第28期—柱状图(带误差棒errorbar)
- domain-transfer reid郑哲东 joint 判别和生成REID
- 用计算机升级ipad系统软件,iPad如何升级系统?三种ipad升级系统的方法汇总
- Android进阶三部曲 第三部《Android进阶指北》已完稿
- STM32通过IIC读取BH1750光照数据
- 周涨粉超30w B站UP主非非宇Fay粉丝增长密码是什么?
- 软考报名季,软考高级应该怎么选?
- mysql数据备份管理
- 代码大全(读书笔记)
- iOS___oc app中接入支付宝详细流程
- 在nodejs中将GBK转UTF
热门文章
- L2-1 包装机 (25 分)(STL43行代码)
- 7-1 最大子列和问题 (20 分)
- 记录webpack的source map使用详细说明
- vs服务器连接xp系统,xp系统远程连接服务器
- Java黑皮书课后题第5章:*5.9(找出得最高分的前两个学生)编写程序,提示用户输入学生的个数、每个学生名字及分数,最后显示获得最高分的学生
- C语言学习之求两个整数的最大值
- teledb兼容mysql5.7_maridb安装
- intValue()的用法
- 维护索引——通过重组索引提高性能
- javascript 高级程序设计学习笔记(面向对象的程序设计) 1