14.3. 带有 HW 时间戳的 Chrony


硬件时间戳是在一些网络接口控制器(NIC)中支持的一种功能,它提供传入和传出数据包的准确的时间戳。NTP 时间戳通常由内核及使用系统时钟的 chronyd 创建。但是,当启用了 HW 时间戳时,NIC 使用自己的时钟在数据包进入或离开链路层或物理层时生成时间戳。与 NTP 一起使用时,硬件时间戳可以显著提高同步的准确性。为了获得最佳准确性,NTP 服务器和 NTP 客户端都需要使用硬件时间戳。在理想条件下,可达到次微秒级的准确性。

另一个用于使用硬件时间戳进行时间同步的协议是 PTP

NTP 不同,PTP 依赖于网络交换机和路由器。如果您想要达到同步的最佳准确性,请在带有 PTP 支持的网络中使用 PTP,在使用不支持这个协议的交换机和路由器的网络上选择 NTP

以下小节描述了如何进行:

  • 验证是否支持硬件时间戳
  • 启用硬件时间戳
  • 配置客户端轮询间隔
  • 启用交错模式
  • 为大量客户端配置服务器
  • 验证硬件时间戳
  • 配置 PTP-NTP 网桥

14.3.1. 验证硬件时间戳支持

要验证接口是否支持使用 NTP 的硬件时间戳,请使用 ethtool -T 命令。如果 ethtool 列出了 SOF_TIMESTAMPING_TX_HARDWARESOF_TIMESTAMPING_TX_SOFTWARE 模式,以及 HWTSTAMP_FILTER_ ALL 过滤器模式,则可以使用硬件时间戳的 NTP

例 14.2. 在特定接口中验证硬件时间戳支持

# ethtool -T eth0

输出:

Timestamping parameters for eth0:
Capabilities:
        hardware-transmit     (SOF_TIMESTAMPING_TX_HARDWARE)
        software-transmit     (SOF_TIMESTAMPING_TX_SOFTWARE)
        hardware-receive      (SOF_TIMESTAMPING_RX_HARDWARE)
        software-receive      (SOF_TIMESTAMPING_RX_SOFTWARE)
        software-system-clock (SOF_TIMESTAMPING_SOFTWARE)
        hardware-raw-clock    (SOF_TIMESTAMPING_RAW_HARDWARE)
PTP Hardware Clock: 0
Hardware Transmit Timestamp Modes:
        off                   (HWTSTAMP_TX_OFF)
        on                    (HWTSTAMP_TX_ON)
Hardware Receive Filter Modes:
        none                  (HWTSTAMP_FILTER_NONE)
        all                   (HWTSTAMP_FILTER_ALL)
        ptpv1-l4-sync         (HWTSTAMP_FILTER_PTP_V1_L4_SYNC)
        ptpv1-l4-delay-req    (HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ)
        ptpv2-l4-sync         (HWTSTAMP_FILTER_PTP_V2_L4_SYNC)
        ptpv2-l4-delay-req    (HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ)
        ptpv2-l2-sync         (HWTSTAMP_FILTER_PTP_V2_L2_SYNC)
        ptpv2-l2-delay-req    (HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ)
        ptpv2-event           (HWTSTAMP_FILTER_PTP_V2_EVENT)
        ptpv2-sync            (HWTSTAMP_FILTER_PTP_V2_SYNC)
        ptpv2-delay-req       (HWTSTAMP_FILTER_PTP_V2_DELAY_REQ)

14.3.2. 启用硬件时间戳

要启用硬件时间戳,请使用 /etc/chrony.conf 文件中的 hwtimestamp 指令。该指令可指定单一接口,也可以指定通配符字符来启用所有支持接口的硬件时间戳。在没有其他应用程序(如 linuxptp 软件包中的 ptp4l 在接口上使用硬件时间戳)的情况下,请使用通配符规范。在 chrony 配置文件中允许使用多个 hwtimestamp 指令。

例 14.3. 使用 hwtimestamp 指令启用硬件时间戳

hwtimestamp eth0
hwtimestamp eth1
hwtimestamp *

14.3.3. 配置客户端轮询间隔

建议为互联网中的服务器使用默认的轮询间隔范围(64-1024秒)。对于本地服务器和硬件时间戳,需要配置一个较短的轮询间隔,以便最小化系统时钟偏差。

/etc/chrony.conf 中的以下指令指定了使用一秒轮询间隔的本地 NTP 服务器:

server ntp.local minpoll 0 maxpoll 0

14.3.4. 启用交错模式

NTP 服务器不是硬件的 NTP 设备,而是运行软件 NTP 实现的通用计算机,如 chrony ,将在发送数据包后才会获得硬件传输时间戳。此行为可防止服务器在其对应的数据包中保存时间戳。为了使 NTP 客户端接收传输后生成的传输时间戳,请将客户端配置为使用 NTP 交错模式,方法是在 /etc/chrony.conf 的 server 指令中添加 xleave 选项:

server ntp.local minpoll 0 maxpoll 0 xleave

14.3.5. 为大量客户端配置服务器

默认服务器配置允许最多几千个客户端同时使用交错模式。要为更多的客户端配置服务器,增大 /etc/chrony.conf 中的 clientloglimit 指令。这个指令指定了为服务器上客户端访问的日志分配的最大内存大小:

clientloglimit 100000000

14.3.6. 验证硬件时间戳

要校验该接口是否已成功启用了硬件时间戳,请检查系统日志。这个日志应该包含来自 chronyd 的每个接口的消息,并成功启用硬件时间戳。

例 14.4. 为启用硬件时间戳的接口记录日志信息

chronyd[4081]: Enabled HW timestamping on eth0
chronyd[4081]: Enabled HW timestamping on eth1

chronyd 被配置为 NTP 客户端或对等的客户端时,您可以使用 chronyc ntpdata 命令为每个 NTP 源报告传输和接收时间戳模式以及交错模式:

例 14.5. 报告每个 NTP 源的传输、接收时间戳以及交集模式

# chronyc ntpdata

输出:

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

例 14.6. 报告 NTP 测量的稳定性

# 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

14.3.7. 配置 PTP-NTP 桥接

如果网络中有一个高度准确的 Precision Time Protocol (PTP)主时间服务器,但没有支持 PTP 支持的交换机或路由器,则计算机可能专用于作为 PTP 客户端和 stratum-1 NTP 服务器。此类计算机需要具有两个或更多个网络接口,并且接近主时间服务器或与它直接连接。这样可保证高度准确的网络同步。

linuxptp 软件包中配置 ptp4lphc2sys 程序,以使用 PTP 来同步系统时钟。

chronyd 配置为使用其他接口提供系统时间:

例 14.7. 将 chronyd 配置为使用其他接口提供系统时间

bindaddress 203.0.113.74
hwtimestamp eth1
local stratum 1
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.