18.6. 带有 HW 时间戳的 Chrony
18.6.1. 了解硬件时间戳 复制链接链接已复制到粘贴板!
硬件时间戳是一些网络接口控制器(NIC)支持的一项功能,它提供传入和传出数据包的准确时间戳。NTP
时间戳通常由内核及使用系统时钟的 chronyd 创建。但是,当启用 HW 时间戳时,NIC 使用自己的时钟在数据包进入或离开链路层或物理层时生成时间戳。与 NTP
一起使用时,硬件时间戳可以显著提高同步的准确性。为了获得最佳准确性,NTP 服务器和 NTP
客户端都需要使用硬件时间戳。在理想条件下,可能还会有次微秒的准确性。
另一个用于使用硬件时间戳进行时间同步的协议是 PTP
有关 PTP
的详情请参考 第 20 章 使用 ptp4l 配置 PTP。与 NTP
不同,PTP
依赖于网络交换机和路由器。如果您想要达到同步的最佳准确性,请在带有 PTP
支持的网络中使用 PTP
,在使用不支持这个协议的交换机和路由器的网络上选择 NTP
。
18.6.2. 验证硬件时间戳支持 复制链接链接已复制到粘贴板!
要验证接口是否支持使用 NTP
的硬件时间戳,请使用 ethtool -T
命令。如果 ethtool
列出了 SOF_TIMESTAMPING_TX_HARDWARE
和 SOF_TIMESTAMPING_TX_SOFTWARE
模式,以及 HWTSTAMP_FILTER_ ALL
过滤器模式,则可以使用硬件时间戳的 NTP
。
例 18.2. 在特定界面上验证硬件时间戳支持
ethtool -T eth0
~]# ethtool -T eth0
输出:
18.6.3. 启用硬件时间戳 复制链接链接已复制到粘贴板!
要启用硬件时间戳,请使用 /etc/chrony.conf
文件中的 hwtimestamp
指令。该指令可以指定单个接口,也可以使用通配符()在支持它的所有接口上启用硬件时间戳。如果 linuxptp 软件包 中没有其它应用程序(如 [application]*ptp4l )在接口中使用硬件时间戳,请使用通配符规格。在 chrony 配置文件中允许使用多个 hwtimestamp
指令。
例 18.3. 使用 hwtimestamp 指令启用硬件时间戳
hwtimestamp eth0 hwtimestamp eth1 hwtimestamp *
hwtimestamp eth0
hwtimestamp eth1
hwtimestamp *
18.6.4. 配置客户端轮询间隔 复制链接链接已复制到粘贴板!
建议为互联网中的服务器使用默认的轮询间隔范围(64-1024秒)。对于本地服务器和硬件时间戳,需要配置一个较短的轮询间隔,以便最小化系统时钟偏差。
/etc/chrony.conf
中的以下指令使用一秒轮询间隔指定本地 NTP
服务器:
server ntp.local minpoll 0 maxpoll 0
server ntp.local minpoll 0 maxpoll 0
18.6.5. 启用交集模式 复制链接链接已复制到粘贴板!
不是硬件 NTP
设备,但一般情况下运行软件
NTP 实施的计算机(如 chrony )的 NTP
服务器只有在发送数据包后才会获得硬件传输时间戳。此行为可防止服务器在它对应的数据包中保存时间戳。要启用 NTP
客户端接收传输时间戳后生成的传输时间戳,请将客户端配置为使用 NTP
交集模式,方法是在 /etc/chrony.conf
的 server 指令中添加 xleave
选项:
server ntp.local minpoll 0 maxpoll 0 xleave
server ntp.local minpoll 0 maxpoll 0 xleave
18.6.6. 为大量客户端配置服务器 复制链接链接已复制到粘贴板!
默认服务器配置允许几千个客户端同时使用交集模式。要为更多的客户端配置服务器,增大 /etc/chrony.conf
中的 clientloglimit
指令。这个指令指定为服务器中客户端访问的日志分配的最大内存大小:
clientloglimit 100000000
clientloglimit 100000000
18.6.7. 验证硬件时间戳 复制链接链接已复制到粘贴板!
要校验该接口是否已成功启用了硬件时间戳,请检查系统日志。日志应包含来自 chronyd 的每个接口的消息,并成功启用硬件时间戳。
例 18.4. 带有 Enabled Hardware Timestamping 的接口的日志消息
chronyd[4081]: Enabled HW timestamping on eth0 chronyd[4081]: Enabled HW timestamping on eth1
chronyd[4081]: Enabled HW timestamping on eth0
chronyd[4081]: Enabled HW timestamping on eth1
当 chronyd 配置为 NTP
客户端或对等时,您可以有传输和接收时间戳模式,以及 chronyc ntpdata
命令为每个 NTP
源报告交集模式:
例 18.5. 报告每个 NTP 源的转换、接收时间戳和交集模式
chronyc ntpdata
~]# chronyc ntpdata
输出:
例 18.6. 报告 NTP 测量的稳定性
chronyc sourcestats
# chronyc sourcestats
启用硬件时间戳后,NTP
测量的稳定性应该以十秒或数百纳秒为单位,处于正常负载下。此稳定性会在 chronyc sourcestats
命令的输出结果的 Std Dev
列中报告:
输出:
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
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
18.6.8. 配置 PTP-NTP 桥接 复制链接链接已复制到粘贴板!
如果网络中存在一个高度准确的 Precision Time Protocol (PTP
) grandmaster,但没有支持 PTP
支持的交换机或路由器,则一个计算机会可能会被指定专门用于作为 PTP
slave 和一个 stratum-1 NTP
服务器。此类计算机需要两个或多个网络接口,并且与降电员接近或与之直接连接。这样可保证高度准确的网络同步。
配置 linuxptp 软件包中的 ptp4l 和 phc2sys 程序,以使用 PTP
同步系统时钟。该配置在 第 20 章 使用 ptp4l 配置 PTP 中描述。配置 chronyd 以使用其他接口提供系统时间:
例 18.7. 配置 chronyd 以使用其他接口提供系统时间
bindaddress 203.0.113.74 hwtimestamp eth1 local stratum 1
bindaddress 203.0.113.74
hwtimestamp eth1
local stratum 1