14.5. 带有 HW 时间戳的 Chrony
某些网络接口控制器(NIC)中的硬件时间戳(HW)提供传入和传出数据包的准确时间戳。NTP
时间戳通常由内核及使用系统时钟的 chronyd 创建。但是,当启用了 HW 时间戳时,NIC 使用自己的时钟在数据包进入或离开链路层或物理层时生成时间戳。与 NTP
一起使用时,硬件时间戳可以显著提高同步的准确性。为了获得最佳准确性,NTP
服务器和 NTP
客户端都需要使用硬件时间戳。在理想条件下,可达到次微秒级的准确性。
另一个用于使用硬件时间戳进行时间同步的协议是 PTP
与 NTP
不同,PTP
依赖于网络交换机和路由器。如果要实现同步的最佳准确性,请在带有 PTP
支持的交换机和路由器的网络中使用 PTP
,并在没有这样的交换机和路由器的网络上首选 NTP
。
14.5.1. 验证硬件时间戳支持
要验证接口是否支持使用 NTP
的硬件时间戳,请使用 ethtool -T
命令。如果 ethtool
列出了 SOF_TIMESTAMPING_TX_HARDWARE
和 SOF_TIMESTAMPING_TX_SOFTWARE
模式,以及 HWTSTAMP_FILTER_ ALL
过滤器模式,则可以使用硬件时间戳的 NTP
。
流程
- 显示设备的时间戳功能和关联的 PTP 硬件时钟:
# ethtool -T enp1s0
14.5.2. 启用硬件时间戳
您可以使用 /etc/chrony.conf
文件中的 hwtimestamp
指令,在一个或多个接口上启用硬件时间戳。该指令可指定单一接口,也可以指定通配符字符来启用所有支持接口的硬件时间戳。
流程
编辑
/etc/chrony.conf
文件并进行以下更改:为支持硬件时间戳的接口添加
hwtimestamp
设置。例如:hwtimestamp enp1s0 hwtimestamp eno*
如果没有其他应用程序,您可以使用 * 通配符,如
ptp4l
使用硬件时间戳。通过在服务器设置中附加
minpoll
和maxpoll
选项来配置简短的客户端轮询间隔,例如:server ntp.example.comlocal minpoll 0 maxpoll 0
对于硬件时间戳,您必须配置一个较短的轮询间隔,而不是默认范围(641024 秒),以最大程度降低系统时钟的偏移量。
通过在服务器设置中附加
xleave
选项来启用 NTP 交错模式:server ntp.example.comlocal minpoll 0 maxpoll 0 xleave
有了这个设置,chrony 仅在发送数据包后获取硬件传输时间戳。这个行为可防止在响应的数据包中保存时间戳。使用
xleave
选项,chrony 可以接收传输后生成的传输时间戳。可选:增加为服务器上客户端访问的日志分配的最大内存大小,例如:
clientloglimit 100000000
默认服务器配置允许数以千计的客户端同时使用交错模式。通过增加
clientloglimit
设置的值,您可以为大量客户端配置服务器。
重启 chronyd 服务:
# systemctrl restart chronyd
验证
可选:验证启用了硬件时间的
/var/log/messages
日志文件:chronyd[4081]: Enabled HW timestamping on enp1s0 chronyd[4081]: Enabled HW timestamping on eno1
如果 chronyd 配置为 NTP 客户端或 peer,显示传输和接收时间戳模式和交集模式:
# chronyc ntpdata Output: [literal,subs="+quotes,verbatim,normal"] Remote address : 203.0.113.15 (CB00710F) Remote port : 123 Local address : 203.0.113.74 (CB00714A) Leap status : Normal Version : 4 Mode : Server Stratum : 1 Poll interval : 0 (1 seconds) Precision : -24 (0.000000060 seconds) Root delay : 0.000015 seconds Root dispersion : 0.000015 seconds Reference ID : 47505300 (GPS) Reference time : Wed May 03 13:47:45 2017 Offset : -0.000000134 seconds Peer delay : 0.000005396 seconds Peer dispersion : 0.000002329 seconds Response time : 0.000152073 seconds Jitter asymmetry: +0.00 NTP tests : 111 111 1111 Interleaved : Yes Authenticated : No TX timestamping : Hardware RX timestamping : Hardware Total TX : 27 Total RX : 27 Total valid RX : 27
报告 NTP 测量的稳定性:
# chronyc sourcestats Output: [literal,subs="+quotes,verbatim,normal"] .... 210 Number of sources = 1 Name/IP Address NP NR Span Frequency Freq Skew Offset Std Dev ntp.local 12 7 11 +0.000 0.019 +0ns 49ns ....
Std Dev
列中会报告这个稳定性。启用硬件时间戳后,在正常负载下,NTP 测量的稳定性应该以十秒或几百纳秒为单位。
14.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
重启 chronyd 服务:
# systemctrl restart chronyd