Linux 时钟系统漫游
缘由: 在开发KVM虚拟机过程中,不可避免的会跟虚拟机时钟打交道 目前存在的问题是:一旦出现多个虚拟机运行在同一个CPU上,造成足够多的负载时,由于调度不及时导致虚拟机时钟中断的频率将会变慢 在x86上的虚拟机貌似没有这个问题,借此机会打算梳理一下整个Linux 时钟系统,也不一定能解决,但是至少可以理一下思路 时钟贯穿整个Linux 执行周期,千丝万缕,我们就从最直观的 时钟中断 切入,循序渐进,看看Linux 时钟的演化过程(本篇不涉及动态时钟,后续有机会可以继续分析)。 时钟中断: 1. 时钟中断到来时,系统首先就是要更新墙上时间:update_wall_time 与时钟中断和墙上时钟紧密相关的一个变量是jiffies。这个变量记录着系统启动后产生了多少次时钟中断,所以每个中断来后自增。 与时钟中断相关的重要配置是CONFIG_HZ,这个是编译时配置文件决定,在我这里CONFIG_HZ=256表示一秒钟jiffies增加256次。 但系统时钟并不用jiffies来更新,在update_wall_time函数内使用clock->read(clock)读取时钟源,并更新系统时钟xtime。这个时钟源往往是之前注册好的主板上恒定的硬件时钟 内核中很多变量都需要用jiffies计算,而不是人所需要的xtime,所以对内核来说jiffies比xtime更有用。 2.