在Linux上使用硬件时钟

在Linux上使用硬件时钟

我使用的是旧版本的 RHEL,最近将其从 5.4 升级到 5.8,并带有定制的 2.30.9 内核。

除非使用外部时间源(例如 NTP)进行控制,否则系统时钟会大幅漂移(> 5 秒/天)。

BIOS 上的硬件时钟似乎更加准确(< 1 秒/周)。

我有几个可用的 Linux 盒子,如果我检查,/etc/adjtime我发现在具有相同硬件、操作系统和应用程序的不同机器上,漂移测量为 0.000004、-0.000050、10.000107 和 -0.000234 秒/天。

当外部时间源不可用时,我们需要最小化时钟漂移。

我尝试了各种内核启动选项,并取得了不同程度的成功来改进:

最初内核设置行在/boot/grub/grub.conf

kernel /vmlinuz-2.6.30.9 ro root=LABEL=/ pmtr=0x608 acpi_pm_good clocksource=acpi_pm noapic ide_core.noprobe=1.1 mem=512M ramdisk_size=262144

时钟源文件包含:

cat /sys/devices/system/clocksource/clocksource0/available_clocksource
tsc acpi_pm jiffies

cat /sys/devices/system/clocksource/clocksource0/current_clocksource
acpi_pm

每天漂移超过 5 秒!

首先我尝试启用 HPET:

kernel /vmlinuz-2.6.30.9 ro root=LABEL=/ pmtr=0x608 acpi_pm_good hpet=enable clocksource=hpet noapic ide_core.noprobe=1.1 mem=512M ramdisk_size=262144

时钟源文件包含:

cat /sys/devices/system/clocksource/clocksource0/available_clocksource
tsc acpi_pm jiffies

cat /sys/devices/system/clocksource/clocksource0/current_clocksource
tsc

这似乎仍然存在漂移,但每天仅大约 4 秒。

接下来我尝试关闭 tsc: kernel /vmlinuz-2.6.30.9 ro root=LABEL=/ pmtr=0x608 acpi_pm_good notscdivider=10 acpi_pm_goodclocksource=acpi_pm noapic ide_core.noprobe=1.1 mem=512M ramdisk_size=262144

时钟源文件包含:

cat /sys/devices/system/clocksource/clocksource0/available_clocksource
tsc acpi_pm jiffies

cat /sys/devices/system/clocksource/clocksource0/current_clocksource
acpi_pm

这已经运行了大约一天,没有明显的漂移。

我的问题是:

1)根据本网站http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1006427divider=10 clocksource=acpi_pm要求在 RHEL 5.3 中被删除,那么为什么它会改善 RHEL 5.8 的情况呢?

2)我更改的内核参数有什么影响?

3) 漂移的准确度如何/etc/adjtime

4) 是否可以设置hwclock在ntp工作时更新?

5)有没有更好的方法来实现我想要做的事情?

谢谢

答案1

您可能想尝试不同的内核。定制的内核可能存在一些计时问题。

相关内容