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_HARDWARESOF_TIMESTAMPING_TX_SOFTWARE 模式,以及 HWTSTAMP_FILTER_ ALL 过滤器模式,则可以使用硬件时间戳的 NTP

流程

  • 显示设备的时间戳功能和关联的 PTP 硬件时钟:
# ethtool -T enp1s0

14.5.2. 启用硬件时间戳

您可以使用 /etc/chrony.conf 文件中的 hwtimestamp 指令,在一个或多个接口上启用硬件时间戳。该指令可指定单一接口,也可以指定通配符字符来启用所有支持接口的硬件时间戳。

流程

  1. 编辑 /etc/chrony.conf 文件并进行以下更改:

    1. 为支持硬件时间戳的接口添加 hwtimestamp 设置。例如:

      hwtimestamp enp1s0
      hwtimestamp eno*

      如果没有其他应用程序,您可以使用 * 通配符,如 ptp4l 使用硬件时间戳。

    2. 通过在服务器设置中附加 minpollmaxpoll 选项来配置简短的客户端轮询间隔,例如:

      server ntp.example.comlocal minpoll 0 maxpoll 0

      对于硬件时间戳,您必须配置一个较短的轮询间隔,而不是默认范围(641024 秒),以最大程度降低系统时钟的偏移量。

    3. 通过在服务器设置中附加 xleave 选项来启用 NTP 交错模式:

      server ntp.example.comlocal minpoll 0 maxpoll 0 xleave

      有了这个设置,chrony 仅在发送数据包后获取硬件传输时间戳。这个行为可防止在响应的数据包中保存时间戳。使用 xleave 选项,chrony 可以接收传输后生成的传输时间戳。

    4. 可选:增加为服务器上客户端访问的日志分配的最大内存大小,例如:

      clientloglimit 100000000

      默认服务器配置允许数以千计的客户端同时使用交错模式。通过增加 clientloglimit 设置的值,您可以为大量客户端配置服务器。

  2. 重启 chronyd 服务:

    # systemctrl restart chronyd

验证

  1. 可选:验证启用了硬件时间的 /var/log/messages 日志文件:

    chronyd[4081]: Enabled HW timestamping on enp1s0
    chronyd[4081]: Enabled HW timestamping on eno1
  2. 如果 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
  3. 报告 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 服务器。此类计算机需要具有两个或更多个网络接口,并且接近主时间服务器或与它直接连接。这样可保证高度准确的网络同步。

流程

  1. linuxptp 软件包中配置 ptp4lphc2sys 程序,以使用 PTP 来同步系统时钟。
  1. chronyd 配置为使用其他接口提供系统时间:

    bindaddress 203.0.113.74
    hwtimestamp enp1s0
    local stratum 1
  2. 重启 chronyd 服务:

    # systemctrl restart chronyd
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.