Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

20.2. 使用 PTP

要使用 PTP,预期接口的内核网络驱动程序必须支持软件或硬件时间戳功能。

20.2.1. 检查驱动程序和硬件支持

除了驱动程序中存在的硬件时间戳支持外,NIC 还必须能够支持物理硬件中的此功能。验证特定驱动程序和 NIC 的时间戳功能的最佳方法是,使用 ethtool 工具来查询接口。在本例中,eth3 是您要检查的接口:

~]# ethtool -T eth3
Time stamping parameters for eth3:
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)
注意

ethtool 输出的 PTP 硬件 Clock 值是 PTP 硬件时钟的索引。它对应于 /dev/ptp* 设备的命名。第一个 PHC 的索引为 0。

对于软件时间戳支持,参数列表应包括:

  • SOF_TIMESTAMPING_SOFTWARE
  • SOF_TIMESTAMPING_TX_SOFTWARE
  • SOF_TIMESTAMPING_RX_SOFTWARE

对于硬件时间戳支持,参数列表应包括:

  • SOF_TIMESTAMPING_RAW_HARDWARE
  • SOF_TIMESTAMPING_TX_HARDWARE
  • SOF_TIMESTAMPING_RX_HARDWARE

20.2.2. 安装 PTP

Red Hat Enterprise Linux 中的内核包括对 PTP 的支持。用户空间支持由 linuxptp 软件包中的工具提供。要安装 linuxptp,以 root 用户身份运行以下命令:

~]# yum install linuxptp

这将安装 ptp4lphc2sys

不要运行多个服务来同时设置系统时钟的时间。如果要使用 NTPPTP 时间提供服务,请参阅 第 20.8 节 “使用 NTP 提供 PTP 时间”

20.2.3. 启动 ptp4l

ptp4l 程序可以从命令行启动,也可以作为服务启动。作为服务运行时,可在 /etc/sysconfig/ptp4l 文件中指定选项。应该在 /etc/ptp4l.conf 文件中指定服务和命令行使用时所需的选项。/etc/sysconfig/ptp4l 文件包含 -f /etc/ptp4l.conf 命令行选项,这会导致 ptp4l 程序读取 /etc/ptp4l.conf 文件并处理它所包含的选项。/etc/ptp4l.conf 的使用在 第 20.4 节 “指定配置文件” 中进行了说明。有关不同 ptp4l 选项和配置文件设置的更多信息,请参阅 ptp4l(8)手册页

启动 ptp4l 作为服务

要启动 ptp4l 作为服务,以 root 用户身份运行以下命令:

~]# systemctl start ptp4l

有关在 Red Hat Enterprise Linux 7 中管理系统服务的详情请参考 第 10 章 使用 systemd 管理服务

从命令行使用 ptp4l

ptp4l 程序默认尝试使用硬件时间戳。要使用带有硬件时间戳功能驱动程序和 NIC 的 ptp4l,您必须提供要与 -i 选项一起使用的网络接口。以 root 用户身份输入以下命令:

~]# ptp4l -i eth3 -m

其中 eth3 是您要配置的接口。以下是当 NIC 上的 PTP 时钟与 master 同步时的 ptp4l 输出示例:

~]# ptp4l -i eth3 -m
selected eth3 as PTP clock
port 1: INITIALIZING to LISTENING on INITIALIZE
port 0: INITIALIZING to LISTENING on INITIALIZE
port 1: new foreign master 00a069.fffe.0b552d-1
selected best master clock 00a069.fffe.0b552d
port 1: LISTENING to UNCALIBRATED on RS_SLAVE
master offset -23947 s0 freq +0 path delay    11350
master offset -28867 s0 freq +0 path delay    11236
master offset -32801 s0 freq +0 path delay    10841
master offset -37203 s1 freq +0 path delay    10583
master offset -7275 s2 freq -30575 path delay  10583
port 1: UNCALIBRATED to SLAVE on MASTER_CLOCK_SELECTED
master offset -4552 s2 freq -30035 path delay  10385

master 偏移值是从主控机偏移(以纳秒为单位)测量的偏移量。s0s1 和 s2 字符串表示不同的时钟交换状态: s0 已被解锁,s1 为时钟步骤,s2 已锁定。当 servo 处于锁定状态(s2)后,时钟将不会受阻(只是缓慢调整),除非在配置文件中将 pi_offset_const 选项设置为正值(在 ptp4l(8)man page 中描述)。adj 值是每十亿(ppb)的时钟频率调整。路径延迟值是从主控机(以纳秒为单位)发送的同步消息的预计延迟。端口 0 是用于本地 PTP 管理的 Unix 域套接字。端口 1 是 eth3 接口(基于上述示例)。 INITIALIZING、LISTENING、UNCALIBRATED 和 SLAVE 是 INITIALIZE、RS_SLAVE、MASTER_CLOCK_SELECTED 事件的一些可能端口状态。在最后一个状态更改消息中,端口状态从 UNCALIBRATED 更改为 SLAVE,表示与 PTP master 时钟成功同步。

来自 ptp4l 的日志记录信息

默认情况下,消息发送到 /var/log/messages。但是,指定 -m 选项可记录到标准输出,这对于调试非常有用。

要启用软件时间戳,需要按如下所示使用 -S 选项:

~]# ptp4l -i eth3 -m -S

20.2.3.1. 选择延迟测量机制

有两种不同的延迟测量机制,它们可以通过添加到 ptp4l 命令的选项进行选择,如下所示:

-P

P 选择 peer-to-peer( P2P)延迟测量机制。

P2P 机制是首选的,因为它能更快地响应网络拓扑中的更改,并且可能比其他机制在测量延迟时更准确。P2P 机制只能在拓扑中使用,每个端口最多与另一个 P2P 端口交换 PTP 消息。它必须在通信路径上被所有硬件(包括透明时钟)提供支持和使用。

-E

E 选择 端到端 (E)延迟测量机制。这是默认值。

E2E 机制也称为延迟"请求响应"机制。

-A

A 支持 自动选择延迟测量机制。

自动选项在 E2E 模式下启动 ptp4l。如果收到对等延迟请求,它将更改为 P2P 模式。

注意

单一 PTP 通信路径中的所有时钟都必须使用相同的机制来测量延迟。在以下情况下会打印警告信息:

  • 使用 E2E 机制在端口上收到对等延迟请求时。
  • 使用 P2P 机制在端口上收到 E2E 延迟请求时。