12.5. 带有 HW 时间戳的 Chrony
某些网络接口控制器(NIC)中的硬件时间戳(HW)提供传入和传出数据包的准确时间戳。NTP
时间戳通常由内核及使用系统时钟的 chronyd 创建。但是,当启用了 HW 时间戳时,NIC 使用自己的时钟在数据包进入或离开链路层或物理层时生成时间戳。与 NTP
一起使用时,硬件时间戳可以显著提高同步的准确性。为了获得最佳准确性,NTP
服务器和 NTP
客户端都需要使用硬件时间戳。在理想条件下,可达到次微秒级的准确性。
另一个用于使用硬件时间戳进行时间同步的协议是 PTP
与 NTP
不同,PTP
依赖于网络交换机和路由器。如果要实现同步的最佳准确性,请在带有 PTP
支持的交换机和路由器的网络中使用 PTP
,并在没有这样的交换机和路由器的网络上首选 NTP
。
12.5.1. 验证硬件时间戳支持 复制链接链接已复制到粘贴板!
要验证接口是否支持使用 NTP
的硬件时间戳,请使用 ethtool -T
命令。如果 ethtool
列出了 SOF_TIMESTAMPING_TX_HARDWARE
和 SOF_TIMESTAMPING_TX_SOFTWARE
模式,以及 HWTSTAMP_FILTER_ ALL
过滤器模式,则可以使用硬件时间戳的 NTP
。
流程
- 显示设备的时间戳功能和关联的 PTP 硬件时钟:
ethtool -T enp1s0
# ethtool -T enp1s0
12.5.2. 启用硬件时间戳 复制链接链接已复制到粘贴板!
您可以使用 /etc/chrony.conf
文件中的 hwtimestamp
指令,在一个或多个接口上启用硬件时间戳。该指令可指定单一接口,也可以指定通配符字符来启用所有支持接口的硬件时间戳。
流程
编辑
/etc/chrony.conf
文件并进行以下更改:为支持硬件时间戳的接口添加
hwtimestamp
设置。例如:hwtimestamp enp1s0 hwtimestamp eno*
hwtimestamp enp1s0 hwtimestamp eno*
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果没有其他应用程序,您可以使用 * 通配符,如
ptp4l
使用硬件时间戳。通过在服务器设置中附加
minpoll
和maxpoll
选项来配置简短的客户端轮询间隔,例如:server ntp.example.comlocal minpoll 0 maxpoll 0
server ntp.example.comlocal minpoll 0 maxpoll 0
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于硬件时间戳,您必须配置一个较短的轮询间隔,而不是默认范围(641024 秒),以最大程度降低系统时钟的偏移量。
通过在服务器设置中附加
xleave
选项来启用 NTP 交错模式:server ntp.example.comlocal minpoll 0 maxpoll 0 xleave
server ntp.example.comlocal minpoll 0 maxpoll 0 xleave
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 有了这个设置,chrony 仅在发送数据包后获取硬件传输时间戳。这个行为可防止在响应的数据包中保存时间戳。使用
xleave
选项,chrony 可以接收传输后生成的传输时间戳。可选:增加为服务器上客户端访问的日志分配的最大内存大小,例如:
clientloglimit 100000000
clientloglimit 100000000
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 默认服务器配置允许数以千计的客户端同时使用交错模式。通过增加
clientloglimit
设置的值,您可以为大量客户端配置服务器。
重启 chronyd 服务:
systemctrl restart chronyd
# systemctrl restart chronyd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
可选:验证启用了硬件时间的
/var/log/messages
日志文件:chronyd[4081]: Enabled HW timestamping on enp1s0 chronyd[4081]: Enabled HW timestamping on eno1
chronyd[4081]: Enabled HW timestamping on enp1s0 chronyd[4081]: Enabled HW timestamping on eno1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果 chronyd 配置为 NTP 客户端或 peer,显示传输和接收时间戳模式和交集模式:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 报告 NTP 测量的稳定性:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Std Dev
列中会报告这个稳定性。启用硬件时间戳后,在正常负载下,NTP 测量的稳定性应该以十秒或几百纳秒为单位。
12.5.3. 配置 PTP-NTP 桥接 复制链接链接已复制到粘贴板!
如果网络中有一个高度准确的 Precision Time Protocol (PTP
)主时间服务器,但没有支持 PTP
支持的交换机或路由器,则计算机可能专用于作为 PTP
客户端和 stratum-1 NTP
服务器。此类计算机需要具有两个或更多个网络接口,并且接近主时间服务器或与它直接连接。这样可保证高度准确的网络同步。
流程
-
从
linuxptp
软件包中配置 ptp4l 和 phc2sys 程序,以使用PTP
来同步系统时钟。
将
chronyd
配置为使用其他接口提供系统时间:bindaddress 203.0.113.74 hwtimestamp enp1s0 local stratum 1
bindaddress 203.0.113.74 hwtimestamp enp1s0 local stratum 1
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重启 chronyd 服务:
systemctrl restart chronyd
# systemctrl restart chronyd
Copy to Clipboard Copied! Toggle word wrap Toggle overflow