不能。chronyd 内部校正精度为微秒级(±10–50 µs),NTP 协议上限为毫秒级抖动;纳秒级仅指 clock_gettime 的纳秒分辨率,非同步精度;实现纳秒级时间戳需 PTP 硬件+linuxptp,而非 chronyd。

chronyd 能否实现纳秒级时间同步?
不能。chronyd 本身不提供纳秒级时间戳输出,其内部时钟校正精度通常在微秒量级(典型场景下 ±10–50 µs),依赖硬件时钟源(如 TSC、HPET)和内核支持。所谓“纳秒级时间同步源”,实际是指:用 chronyd 对接高稳定度硬件时钟(如 PTP 硬件时钟、GPSDO),再通过 clock_gettime(CLOCK_REALTIME, ...) 或 CLOCK_TAI 等接口暴露纳秒分辨率——但分辨率 ≠ 同步精度。
- 纳秒级 分辨率 来自系统调用(如
clock_gettime返回的struct timespec.tv_nsec),Linux 内核默认就支持 - 纳秒级 精度 需要硬件+协议协同:单靠
chronyd+ NTP 不可能达到,NTP 协议设计上限就是毫秒级抖动 - 若你的真实需求是给 FPGA/PCIe 设备打纳秒时间戳,应直接走 PTP(
linuxptp+ 硬件时间戳网卡),而非强推chronyd
chronyd 作为时间源服务器时的关键配置项
让 chronyd 对外提供稳定时间服务,核心不是“调高精度”,而是降低抖动、抑制时钟跳跃、明确声明服务能力。
- 必须启用
rtcsync:将系统时钟与 RTC 同步,避免重启后时间跳变;否则客户端第一次ntpq -p可能看到 offset >1s -
makestep 1.0 -1要谨慎:-1 表示“始终允许大步进”,生产环境建议设为makestep 0.128 3(超过 128ms 且已运行超 3 秒才步进),防止网络抖动误触发跳变 - 对外服务需显式监听:在
/etc/chrony.conf中加bindcmdaddress 0.0.0.0和bindaddress 0.0.0.0,否则默认只监听本地 - 禁用
logdir或定期轮转日志:持续写measurements.log会拖慢chronyd响应,尤其在高并发查询时
客户端无法稳定跟踪 chronyd 服务端?查这三处
常见现象是 chronyc tracking 显示 Leap status : Not synchronised,或 chronyc sources -v 中延迟忽高忽低(>100ms)、Jitter 爆涨(>50ms)。
- 确认服务端未被防火墙拦截:
ss -tuln | grep :123应看到udp 0 0 *:123 *:*;CentOS/RHEL 8+ 默认 firewalld 会封 UDP 123 - 检查客户端
pool或server行是否带iburst:server 192.168.1.10 iburst是必须的,否则首次同步要等 6 次重试(约 7 分钟) - 确认双方时区一致且未启用
systemd-timesyncd:后者会与chronyd抢占 123 端口,systemctl stop systemd-timesyncd && systemctl disable systemd-timesyncd
想让 chronyd 输出更准的时间?别碰它,改 kernel 和硬件
chronyd 的校正能力受制于内核时钟源和 CPU 稳定性。强行调参(如缩小 driftfile 更新频率、增大 makestep 阈值)只会掩盖问题。
- 运行
cat /sys/devices/system/clocksource/clocksource0/current_clocksource,优先选tsc,次选hpet;避免jiffies(毫秒级) - 在 GRUB 启动参数中加入
clocksource=tsc tsc=reliable(Intel CPU),并确认 BIOS 中关闭 C-states(尤其是 C1E) - 若服务器带 GPS/PTP 硬件模块,用
phc2sys将 PTP 硬件时钟同步到系统时钟,再由chronyd对外分发——这时“纳秒级”才有物理意义
真正难的是硬件时钟对齐和温度漂移补偿,软件层能做的已经非常有限。别在 chrony.conf 里反复调 minpoll/maxpoll,先看 dmesg | grep -i clock 有没有警告。


















