Linux内核中一种高精度定时器的设计与实现
计算机技术与发展第16卷 第4期 16 No.4 Vol.2006年4月Apr.
2006COMPUTERTECHNOLOGYANDDEVELOPMENT
Linux内核中一种高精度定时器的设计与实现
周 鹏,周明天
(电子科技大学计算机学院,四川成都610054)
摘 要:CGL(CarrierGradeLinux)是由开源组织(OSDL,OpenSourceDevelopmentLab)发起的、专门针对电信级服务的Lin2ux。CGL在标准Linux的基础上,增加了一组为适应电信运营环境而设计的特性。某些电信应用对实时性有较高要求,普
通Linux在实时性方面和电信平台的要求之间还存在一定的差距。为增强系统的软实时能力,CGL要求提供一种精度在0.1毫秒以上高精度定时器(high-resolutiontimer)。首先介绍Linux内核2.6.x中时钟与定时器的情况,然后详细阐述这
种符合POSIX1003.1bAPI标准的高精度定时器的设计与实现,最后总结该定时器的性能并得出结论。关键词:Linux内核;时钟;定时器;CarrierGradeLinux
中图分类号:TP311 文献标识码:A 文章编号:1005-3751(2006)04-0073-03
DesignandImplementationofaHigh-ResolutionTimerinLinuxKernel
ZHOUPeng,ZHOU2(ComputerSci.andTechn.Coll.,Univ.of,,China)
Abstract:CGL(),,isbyopensourceorganization(OSDL,OpenSourceDevelopmentLab).of,CGLaddsaseriesoffeaturestomeetthetelecomgradeneeds.High-resolutiontimerisanenhancementLinuxsoftreal-timeperformancewhoseinterfacesconformtothePOSIX1003.1bAPI.Thispaperfirstlyintroducestheclockandtimerinstandardkernel2.6.x.Secondlydescribesdesignandimplementationofhigh-resolutiontimer.Atlastsummarizestheperformanceofhigh-resolutiontimeranddrawsaconclusion.Keywords:Linuxkernel;clock;timer;carriergradeLinux
1 内核2.6.x中的时钟与定时器
时钟和定时器对Linux内核来说十分重要。首先,内核要管理系统的运行时间(uptime)和当前墙上时间(wall
time),即当前实际时间。其次,内核中大量的活动由时间
从1970年1月1日0:00到当前时刻所经历的秒数。虽然在Intelx86机器上,内核会周期性地将当前时间存回实时时钟中,但应该明确,实时时钟的主要作用就是在启动时初始化墙上时间xtime。
1.2 系统定时器与动态定时器
驱动(timedriven)。其中一些活动是周期性的,比如平衡调度器(scheduler)中的运行队列(runqueue)或刷新屏幕这样的活动,它们以固定的频率定时发生;同时,内核要非周期性地调度某些函数在未来某个时间发生,比如推迟执行的磁盘I/O操作等。
1.1 实时时钟
周期性发生的事件都是由系统定时器(systemtimer)驱动。在x86体系结构上,系统定时器通常是一种可编程硬件芯片(如8254CMOS芯片),又称为可编程间隔定时器(PIT,ProgrammableIntervalTimer),其产生的中断就是时钟中断(timerinterrupt)。时钟中断对应的中断处理程序负责更新系统时间和执行周期性运行的任务。系统定时器的频率称为节拍率(tickrate),在内核中表示为
Hz。Hz的大小与系统结构相关,内核在文件中定义了Hz的值:
#defineHz1000/3Internalkerneltimerfrequency3/
内核必须借助硬件的帮助才能管理时间。实时时钟
(realtimeclock)是用来持久存放系统时间的设备,它与CMOS集成在一起,并通过主板电池供电,所以即便在关
闭计算机系统之后,实时时钟仍能继续工作。
系统启动时,内核读取实时时钟,将所读的时间存放在变量xtime中作为墙上时间(walltime),xtime保存着
以x86为例,在2.4之前的内核中其大小是100;从内核2.6开始,Hz=1000,也就是说每秒钟时钟中断发生
1000次。这一变化使得系统定时器的精度(resolution)由10ms提高到1ms,这大大提高了系统对于时间驱动事件
收稿日期:2005-08-01
作者简介:周 鹏(1981-),男,四川仁寿人,硕士研究生,从事计算机软件与理论的研究;周明天,博士生导师,教授,研究方向为网络计算、网络安全技术。
调度的准确性。但过于频繁的时钟中断不可避免地增加了系统开销(overhead),总的来说,在现代计算机系统上,