虚拟化ABC - 不同OS的时钟

来源:互联网 发布:ios性能优化 编辑:程序博客网 时间:2024/05/21 10:46

1. Microsoft Windows

微软操作系统通常使用counting timer interrupts(ticks),系统时间精确到最近的tick,根据OS版本和的HAL使用不同的时间设备。使用PIT的,中断频率往往是100Hz,Windows 98使用200Hz。使用CMOS(RTC)时钟的,中断频率为64Hz。Microsoft Windows通过multimedia timer API提高时钟频率。最高到1024Hz(或1000)。一些软件如Apple QuickTime、Java虚拟机等,可使OS时钟频率提高。Microsoft Windows有一个系统调用QueryPerformanceCounter,通过该系统调用可获得时钟定时器的计数值。
多核系统上的Microsoft Windows需要考虑TSC的同步问题,有些Windows采用APIC Timers每隔一秒产生一个中断;有些Windows版本将时钟中断广播向所有的处理器,有些版本将时钟中断路由向主处理器。


2. Linux

Linux 2.4 和早期的2.6使用PIT,32位、64位的内核分别于2.6.18、2.6.21做了较大修改,引入clocksource以供内核启动时选择时钟(提供的多数为tickless), 后来又引入clockevent和dynticks(tickless)(NO_HZ选项)。Linux提供/etc/rtc始终设备,来源于CMOS周期定时器或HPET,通常被多媒体软件使用。
2.4以前的时钟频率为100HZ,常见发行版的初始频率如下:
- Red Hat Linux 8 512HZ,更新的又改为100HZ
- SUSE Linux Professional 9.0 1000Hz
- 早期2.6内核选项有100, 250, 1000Hz,默认是250Hz
- Red Hat Enterprise 4/5 1000Hz(提供启动选项以配置频率)


3. Solaris

Solaris 10为tickless时钟。Solaris作为VM运行时可能有两个小问题:1)多核系统启动时的时间校准时会出现问题,在Solaris 10Update8解决;2)会因为CMOS TOD值和预期差太远而报出严重警告信息。

原创粉丝点击