Linux 3.10完整支持的DynTicks(动态定时器)特性简介
[题外话]一个多月没捣鼓内核了,不容易呀!之前天天查Linux内核的Down机问题,天天现在看应用层代码,还真有点不适应,不过也挺有意思的,这对于我来说,毕竟是一块新鲜地,呵呵。今晚看了一下Linux 3.10的DynTicks特性介绍,下面来侃一侃。:)
Linux 3.10发布,其完整支持的DynTicks(动态定时器),被标版为内核级别的核心特性。本文就来看一下DynTicks为何东东?又有啥稀奇之处?
我们知道,Linux内核里有一个HZ值,其表示时钟中断频率,在2.4内核时值为100,到2.6内核时变成了一个内核选项,可配置为100、250、300或1000。不管是2.4还是2.6,一旦内核编译完成,在实际运行时,HZ值是不变的(某些第三方补丁除外,后面会讲到),也就是说,每隔一个固定的时间间隔,比如1毫秒(以HZ等于1000为例),就会发生一次时间中断。
对于Linux而言,有很多机制是直接或间接依赖于时间中断的,比如进程切换。还记得有哪些时机会发生进程切换么?这不属于本文该讨论的话题,但肯定有人知道,在中断处理程序返回到用户空间时,内核会检查当前是否需要做进程切换。正因为如此,固定的时间中断就会引发固定的进程切换检查,并及时作出schedule()动作。当然,这仅只是一个关于进度管理的内核机制示例,但可以看到有了固定的系统时钟中断频率,就可以很简单的管理系统时间,而很多与此相关的功能也能较为方便的实现。
既然在固定系统时钟中断频率下,这一切都显得那么和谐,为什么还有人一直孜孜不倦的搞一个名为NOHZ(即DynTicks)的功能?NOHZ,显而易见,即是不固定系统时钟中断频率,可能在这一秒,时钟中断100次,而在下一秒,时钟又中断500次。
DynTicks并不是一蹴而就的,其最先是从2004年十月起,一直被用在linux-omap内而实现对TI’s OMAP ARM架构的支持。在Linux 2.4内核时期,有对应的VST补丁实现,而在Linux 2.6内核时期,有对应的NO_IDLE_HZ补丁实现。不管怎样,到现在的3.10,Linux已完整支持DynTicks(动态定时器)。
NOHZ有什么好处?其最大的好处就是省电。
一般而言,我们给Linux内核设定HZ是一个比平均所需要高的值。举个例子,如果一台Linux主机,它只有在某些时候需要较高的系统时钟中断频率W1,以便给外界提供更好的服务(比如,进程切换更快,从而给人的感觉是响应更迅速),而在其他大部分时间里都只需一个较低的系统时钟中断频率即可,但我们仍然得给它设置系统时钟中断频率HZ为W1。因此,过多的不必要的时钟中断,反复的唤醒系统又什么都不做或没什么事情做,导致电能的浪费。对于未来越来越多的终端设备(比如手机),能省电,毫无疑问是最有诱惑力的优点。
不仅只是终端,对于越来越集中的虚拟化、云计算,DynTicks也会带来省电的好处。比如更少的时钟中断可以避免引起无用的vmexits系统开销,从而在省电的同时,又能提高KVM的整体性能。不管是省电,还是性能提升,积少成多,再说,搞Linux的那群牛人,追求的就是极致,哈哈!
简介简介,先简单介绍到这里吧,后续看了具体代码,再说。
[GIT PULL, RFC] Full dynticks, CONFIG_NO_HZ_FULL feature
http://lkml.indiana.edu/hypermail/linux/kernel/1305.0/01831.html
Full DynTicks Proposed For Linux Kernel Integration, Posted by Michael Larabel on May 05, 2013
http://www.phoronix.com/scan.php?page=news_item&px=MTM2NTA
Linux Dynticks Being Extended For Performance Wins, Posted by Michael Larabel on December 18, 2012
http://www.phoronix.com/scan.php?page=news_item&px=MTI1NTg
http://muru.com/linux/dyntick/
转载请保留地址:http://lenky.info/archives/2013/07/03/2317 或 http://lenky.info/?p=2317
备注:如无特殊说明,文章内容均出自Lenky个人的真实理解而并非存心妄自揣测来故意愚人耳目。由于个人水平有限,虽力求内容正确无误,但仍然难免出错,请勿见怪,如果可以则请留言告之,并欢迎来讨论。另外值得说明的是,Lenky的部分文章以及部分内容参考借鉴了网络上各位网友的热心分享,特别是一些带有完全参考的文章,其后附带的链接内容也许更直接、更丰富,而我只是做了一下归纳&转述,在此也一并表示感谢。关于本站的所有技术文章,欢迎转载,但请遵从CC创作共享协议,而一些私人性质较强的心情随笔,建议不要转载。
法律:根据最新颁布的《信息网络传播权保护条例》,如果您认为本文章的任何内容侵犯了您的权利,请以或书面等方式告知,本站将及时删除相关内容或链接。
DynTicks翻译为动态定时器,其实不太准确。
其实和定时器没啥关系。tick仅是tick而已。
内核至少从2.6.32开始就已经支持让CPU时钟运行在oneshot模式。设置一个1us的定时器,就是让CPU在1us后发生一个中断。而那时候HZ还是固定的,250HZ就是设置一个固定的4ms定时器,固定的4ms一个tick。这样的好处是,定时器可以支持us级甚至ns级,而tick还是4ms。在oneshot之前的periodic模式,则无法获取到精度高于HZ的定时器。