如何提高linux的时钟精度,Linux时钟精度提高有什么办法?

2 动态高精度时钟设计和实现

动态高精度时钟设计方案借鉴了KURT-Linux思想,但与其不同的是提供一个与标准Linux核心时钟并行的具有精密刻度的实时时钟,并与原核心时钟区别开。采用X86体系CPU提供的TSC作为高精度的时间标度,权衡一定时间段(如一个jiffies)内高精度定时器的数量,设置Linux时钟中断模式为标准模式、one-shot模式或高频周期时钟模式。实现了μs级定时精度的同时,降低了频繁计算和设置时钟芯片的时间代价。

下面给出关键的全局变量:

(1)time_mode:表示当前时钟工作模式。其中-1代表高频周期时钟模式,该模式下,根据需要达到的定时精度,设置时钟芯片以较高的频率产生周期性中断;0代表标准模式,时钟芯片以标准Linux默认的频率产生周期中断;1代表one-shot模式,时钟芯片被设置为单次触发状态,即每次给时钟芯片设置一个超时时间,超时事件发生时,在时钟中断处理程序中根据需要再次给时钟芯片设置一个超时时间。系统启动时设置为默认值0。

(2)SCALE:时钟精度提高比。设置高频周期模式需要的参数,用来表示所需要达到的时钟精度相对普通Linux时钟精度的提高倍数。

(3)Threshold:阈值。如果即将在某一时间段内超时的实时定时器数量大于预设值,系统设置硬件定时器工作在高频周期时钟模式。

2.1 时钟中断处理

为了加强Linux的实时功能,同时又要保持Linux的完整性,本方案的动态多模式时钟机制以模块化的方式实现有关实时部分的功能,并利用接口函数实现实时模块与Linux核心的联系。

(1)标准模式。标准模式下的中断处理首先查询实时定时器队列中是否有实时定时器在下一个系统时钟中断(jiffies+1)之前超时,即在(jiffies,jiffies+1)内是否有实时定时器要处理,根据实时定时器数量设置时钟芯片的工作模式,执行do_timer_interrupt()等函数维护系统相关时间,标记下半部。

(2)one_shot模式。one-shot模式下的中断处理先判断jiffies时钟是否到期,如果到期:

①查询实时定时器队列中是否有实时定时器在下一个系统时钟中断(tick+1)之前超时,即在(jiffies,jiffies+1)内有实时定时器要处理(其超时时间用sub_jiffies表示),然后根据实时定时器数量设置时钟芯片工作模式。

②执行do_timer_interrupt()函数等维护与系统有关的时间,并标记下半部。

如果jiffies时钟未到期,则查询实时定时器链表,根据其最早超时实时定时器的超时时间与当前时间的差值设置时钟芯片产生下一次中断的时间。

(3)高频周期时钟模式。高频周期模式下中断处理先判断jiffies时钟是否到期,如果系统时钟节拍到期,执行上述①、②模式。否则,如果有实时定时器超时,标记中断下半部;如果没有实时定时器超时则直接返回。

对超时定时器的处理都留到时钟中断下半部(softirq)处理,超时的实时定时器优先得到处理,以尽可能保证实时定时器的及时处理,随后处理普通Linux的定时器,时钟中断处理过程如图1所示。

jishu_1908411_1_1.html

2.2 定时器组织

普通Linux系统原有的粗粒度定时器对于内核的稳定和不要求高精度定时的非实时应用仍是合适的,只是针对有高精度定时要求的实时应用组织一个高精度定时器队列HRT_list,队列中的定时器按超时时间非降序排列,队列中第一个定时器的超时时间就是队列的最早超时时间。

原Linux内核中的定时器是通过称为CTW(Cascading Timer Wheel)的结构管理和维护,并因此使得对定时器的插入、删除等操作的时间为0(1)。本文把HRT_list队列和CTW结合起来以降低定时器处理时间、提高效率。把需要较长时间才超时的实时定时器仍旧插入到原定时器队列中,借助该队列维护。在每次系统时钟中断处理的下半部处理完超时的实时定时器后,把在下一次系统时钟中断前超时的高精度定时器从原队列移除,并插入到HRT_list队列中。因此,HRT_list队列中所需要维护的高精度实时定时器也是有限的,避免了维护一个大规模定时器队列的开销,近似实现了0(1)的系统开销。

3 性能分析与测试

3.1 性能分析

当系统中没有高精度定时器时,PIT仍以Linux系统默认的频率触发时钟中断,在每一次系统时钟中断处理过程中,只需要判断工作模式以及下一次jiffies中断前有否实时定时器超时,经测试由此而带来的处理时间不超过1us,增加系统负担<0.1%,不会影响系统的性能。当在某个时间段内系统中实时定时器不多于阈值时,系统时钟工作在类似KURT-Linux的one-shot模式,同时维持普通Linux系统时钟的稳定。而由此而带来的系统负担是可以接受的[3]。

当系统中存在大量实时定时器或在某个时间段内即将超时的实时定时器数量超过一定值(阈值)时,相对于one-shot模式需要频繁地计算下次中断时间,并重新编程在低速的ISA总线上的PIT的时间代价是可取的,证明如下:

用Thw表示中断的硬件处理时间,Tisr表示中断程序上半部执行时间,n代表某个时段内(一个jiffies内)超时的定时器数量。得到两种模式下总的时钟中断处理时间关系式:

jishu_1908411_1_1.html

显然,当某个时段内超时的定时器数量大于Threshold时,采用高频周期模式的时间开销就会小于one-shot模式。

3.2 模拟测试

测试环境为Pentium4 3.0 GHz CPU,1GDDR内存的硬件平台和2.6.15.6版本内核的Fedora core linux操作系统平台。

根据数控实时任务的要求设定了周期为0.1 ms、1 ms和100 ms的进程模拟数控实时周期任务[10],统计运行1 000次的数据,比较改进后的高精度定时器和原linux定时器的平均定时偏差,并令阈值为30,设置周期任务数量为4、20、40,使时钟工作在不同模式下。测试结果如表1所示。

jishu_1908411_1_1.html

由测试数据对比,原linux系统的定时平均偏差为968 μs,改进后系统的定时平均偏差为34 ?滋s。显而易见,改进后的定时器定时精度大大提高,达到10 μs级,能满足数控系统应用的要求。

在原Linux内核和改进后的高精度定时器内核上睡眠50 μs各1 000次,测试实际睡眠时间所得结果与表1类似,50 μs的实际睡眠时间从(2.001~2.116) ms级降到(57~91) μs级。

全软件数控系统以应用软件的形式实现运动控制,是开放式数控系统的发展方向。开源的Linux是开发具有自主知识产权数控系统的理想平台,但是其粗糙的时钟粒度是普通Linux直接应用于数控系统的最大障碍,因此需要细化Linux的时钟粒度提高其实时性。

简单地提高系统时钟频率将引起频繁的中断处理,导致系统性能的下降。KURT-Linux采用的one-shot方式将周期性的时钟中断改进为单次触发状态,实现了μs级的定时精度。本文分析了普通Linux时钟机制和几种实时Linux操作系统细化时钟精度的方式,提出了一种混合多种时钟模式的动态时钟机制,达到了CNC要求的时钟精度。最后的性能分析和模拟测试证实了新时钟机制的技术性能。

参考文献

[1] 李迪,万加富,叶峰,等.软数控系统混合任务两级调度策略[J].机械工程学报,2008,44(12):157-162.

[2] 王霞,马忠梅,何小庆,等.提高嵌入式linux时钟精度的方法[J].计算机工程,2006,32(23):70-96.

[3] 施映,何嘉.KURT-Linux实时性研究及改进策略[J].计算机科学,2006,33(7):417-420.

[4] 丁一,胡封林,李国宽.高级可编程中断控制系统的研究[J].计算机工程与科学,2005,27(12):97-100.

[5] 范剑英,吴岩,贾佳,等.Linux2.6实时性分析与改进方案[J].哈尔滨理工大学学报,2008,13(1):24-28.

[6] 於时才,缪东升,孙华,等.Linux2.6调度系统的分析与改进[J].微计算机信息,2007,24(5-3):252-254.

[7]周鹏,周明天.linux内核中一种高精度定时器的设计与实现[J].计算机技术与发展,2006,16(4):73-78.

[8] SRINIVASAN B, PATHER S, HILL R, et al. A firm real-time system implementation using commercial off-the-shelf hardware and free software[R]. rtas. Fourth IEEE Real-Time Technology and Applications Symposium (RTAS’98), 1998.

[9] 李小群,赵慧斌,叶以民,等.一种基于时钟粒度细化的Linux实时化方案[J].计算机研究与发展,2003,40(5):734-740.

[10] 姚鑫骅,潘雪增,傅建中,等.数控系统的混合任务模型及其最优调度算法研究[J].浙江大学学报,2006,40(8):1315-1319.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574268.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java基础知识强化之网络编程笔记05:UDP之多线程实现聊天室案例

1. 通过多线程改进刚才的聊天程序&#xff0c;这样我就可以实现在一个窗口发送和接收数据了 2. 代码示例&#xff1a; &#xff08;1&#xff09;SendThread.java&#xff0c;如下&#xff1a; 1 package com.himi.udpDemo2;2 3 import java.io.BufferedReader;4 import java.…

c语言选择法排序案例,谁能给我一个c语言选择排序法的简单例子

满意答案evil83752014.02.27采纳率&#xff1a;51% 等级&#xff1a;11已帮助&#xff1a;7590人#include int main(){int array[100], n, c, d, position, swap;printf("Enter number of elements\n");scanf("%d", &n);printf("Enter %d inte…

小球进盒子C语言,N个小球放进M个盒子算法-Go语言中文社区

N个小球放入M个盒子共有多少种方法&#xff0c;并输出的算法设计&#xff1a;算法思路1 &#xff1a;暴力填充盒子每个小球都可能放入M个盒子的任意一个&#xff0c;所以直接根据小球个数做递归即可,然后将存储放入hash中排重//TODO算法思路2 &#xff1a;递归填充盒子即&#…

r语言c5.0要求因子输出,R语言中因子的创建与使用

原标题&#xff1a;R语言中因子的创建与使用因子在R语言中可以用来表示名义型变量或有序变量。名义变量一般表示类别&#xff0c;如性别&#xff0c;种族等等。有序变量是有一定排序顺序的变量&#xff0c;如职称&#xff0c;年级等等。在R语言中&#xff0c;名义变量和有序变量…

WinForm中使用AnyCAD三维控件 の 初始化

在WinForm中可以方便的集成AnyCAD.Net三维控件&#xff0c;只需要以下几部即可完成。 一、添加DLL程序集 AnyCAD.Foundation.Net.dll AnyCAD.Presentation.Net.dll AnyCAD.Exchange.Net.dll 二、初始化控件 1.首先创建一个窗体 2.在窗体上放置一个Panel用来放置三维控件 3.初始…

android l usb调试,你居然还不会手机usb调试?5个方法,让你轻松学会设置!

原标题&#xff1a;你居然还不会手机usb调试&#xff1f;5个方法&#xff0c;让你轻松学会设置&#xff01;最近有位朋友将手机连接电脑的时候&#xff0c;遇到了提示打开手机的USB调试模式&#xff0c;却不知道怎么操作。其实&#xff0c;不同手机的usb调试打开的方式都会有所…

鸿蒙os芯片,没有了芯片,华为能靠鸿蒙OS系统打出差异化吗?

原标题&#xff1a;没有了芯片&#xff0c;华为能靠鸿蒙OS系统打出差异化吗&#xff1f;华为今天要和大家说的手机产品是华为&#xff0c;在目前的市场中&#xff0c;华为手机的影响力是非常大的&#xff0c;并且获得了十分不错的销量&#xff0c;甚至在最近一段时间销量超过三…

html5 canvas 不兼容safari浏览器_HTML5简介

HTML5 是继 HTML4.01 和 XHTML1.0 之后的超文本标记语言的最新版本。它是由一群自由思想者组成的团队设计出来&#xff0c;并最终实现多媒体支持、交互性、更加智能的表单&#xff0c;以及更好的语义化标记。HTML5 并不仅仅是 HTML 规范的最新版本&#xff0c;而是一系列用来制…

html5置顶标签css样式,html5 header标签 html header css布局教程 /header

在HTML5版本之前习惯使用div标签布局网页&#xff0c;在HTML5在DIV标签基础上新增header标签元素。也叫“”头部标签。以前我们在div css布局中常常把网页大致分为头部、内容、底部。对于大结构我们常常使用div里加id进行布局。而头部常常使用正应为大家公认html布局中对“head…

第八届育才杯机器人比赛_赛场、名单公布!南海区第八届“献血者杯”羽毛球公开赛“羽”你相约本周六...

主办单位&#xff1a;南海区献血办、南海血站协办单位&#xff1a;南海区羽毛球协会为进一步扩大无偿献血宣传&#xff0c;感恩南海区献血者&#xff0c;活跃无偿献血者的文体生活&#xff0c;打造一个南海区无偿献血者交流的平台&#xff0c;共同营造“运动、健康、献血、快乐…

2021届安徽高考成绩查询,安徽2021年高考成绩什么时候公布

据安徽省教育招生考试院透露&#xff0c;安徽预计将于6月23日公布各批次录取分数线、考生成绩。2021年安徽高考成绩查询入口2021年高考录取方法1、普通高校的招生录取工作在教育部和省高校招生委员会的领导下&#xff0c;由省考试院组织实施。2、省高校招生委员会根据当年高校在…

BroadcastReceiver 广播机制详解

BroadcastReceiver也就是“广播接收者”的意思&#xff0c;顾名思义&#xff0c;它就是用来接收来自系统和应用中的广播。 在Android系统中&#xff0c;广播体现在方方面面&#xff0c;例如当开机完成后系统会产生一条广播&#xff0c;接收到这条广播就能实现开机启动服务的功能…

会话管理 轻量php框架_SpringSecurity+JWT权限管理训练营-1基于RBAC模型的权限管理系统...

1.什么是权限管理系统&#xff1f;权限管理是一个几乎所有后台系统的都会涉及的一个重要组成部分&#xff0c;可以说是后台项目的基本功&#xff0c;主要目的是对整个后台管理系统进行权限的控制&#xff0c;而针对的对象是员工&#xff0c;避免因权限控制缺失或操作不当引发的…

2021宣城职业技术学院对口高考成绩查询,2021年宣城职业技术学院高考录取通知书查询 通知书什么时候可以收到...

高考志愿填报后最重要的一件事情就是高考录取通知书的查收了&#xff0c;因为录取通知书才是证明你被录取的有效方式。那么很多考生及家长最关心怎么查询宣城职业技术学院录取通知书&#xff1f;宣城职业技术学院录取通知书寄到哪里了&#xff1f;本文大风车网小编为你整理了关…

iOS 谓词的使用

OC中的谓词操作是针对于数组类型的&#xff0c;他就好比数据库中的查询操作&#xff0c;数据源就是数组&#xff0c;这样的好处是我们不需要编写很多代码就可以去操作数组&#xff0c;同时也起到过滤的作用&#xff0c;我们可以编写简单的谓词语句&#xff0c;就可以从数组中过…

multisim秒信号发生器_失联50年的卫星突然出现,莫名向地球发送信号,究竟谁在操控?...

大不列颠无线电学会(RSGB)接到英国康沃尔郡的业余无线电天文爱好者菲尔威廉姆斯(无线电呼叫代号&#xff1a;G3YPQ)的报告&#xff0c;他在2012年12月18日的一次惯例搜索轨道卫星信号的任务中突然搜到了一个237MHZ&#xff0c;每隔4秒重复一次的信号&#xff0c;很明显这是一个…

html 百度地图显示轨迹,百度地图,地图轨迹

百度地图&#xff0c;记录行动轨迹&#xff1a;效果图&#xff1a;上代码&#xff1a;body,html,#allmap {width: 100%;height: 100%;overflow: hidden;margin: 0;font-family: "微软雅黑";}单个标注点沿直线的轨迹运动// 百度地图API功能var map new BMap.Map(&quo…

win10微软图标点击无反应_win10开始菜单,不出来,任务栏右击无反应

使用【win】【R】快捷键打开系统的【运行】&#xff1b;输入【powershell】&#xff0c;按下【确定】运行&#xff0c;然后复制一行命令&#xff0c;点击回车键运行等待命令运行完成之后就可以了。以下是详细介绍&#xff1a;1、在键盘上按下【win】【R】键&#xff0c;使用快捷…

计算机仿真在哪学,计算机仿真软件有哪些

虚拟机&#xff0c;如VMWARE&#xff0c;Virtual PC虚拟机软件可以在一台电脑上模拟出来若干台PC&#xff0c;每台PC可以运行单独的操作系统而互不干扰&#xff0c;可以实现一台电脑“同时”运行几个操作系统&#xff0c;还可以将这几个操作系统连成一个网络。使用虚拟机的好处…

WebApp的前端所遇问题

2015年10月1日至10月25日&#xff0c;两个本科生和一位研究生以及一位老师组成四人团队&#xff0c;开发某教育前端项目 所遇问题总结以及分享&#xff1a; 一、主要应用软件&#xff1a;sublime_text HBuilder 初学者可以在JQuery mobile的Demo中寻找代码&#xff08;可以看图…