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
这将安装 ptp4l 和 phc2sys。
不要运行多个服务来同时设置系统时钟的时间。如果要使用 NTP
为 PTP
时间提供服务,请参阅 第 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 偏移值是从主控机偏移(以纳秒为单位)测量的偏移量。s0
、s1 和
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 延迟请求时。