跳转到内容跳转到页面导航:上一页 [访问键 p]/下一页 [访问键 n]
适用于 openSUSE Leap 15.6

20 精密时间协议 编辑源文件

对于网络环境,保持计算机和其他设备的时钟同步和准确至关重要。 有几种解决方案可以实现同步和准确性,例如广泛使用的网络时间协议 (NTP),如 “参考”手册,第 18 章“使用 NTP 同步时间” 中所述。

精密时间协议 (PTP) 是一种能够达到亚微秒精度的协议,优于 NTP 的精度。 PTP 支持分为内核空间和用户空间。 openSUSE Leap 中的内核包含对 PTP 时钟的支持,这些时钟由网络驱动程序提供。

20.1 PTP 简介 编辑源文件

由 PTP 管理的时钟遵循主从层次结构。 从机与主机同步。 层次结构由 最佳主时钟 (BMC) 算法更新,该算法在每个时钟上运行。 只有一个端口的时钟可以是主时钟或从机。 这种时钟称为 普通时钟 (OC)。 具有多个端口的时钟可以在一个端口上作为主时钟,在另一个端口上作为从机。 这种时钟称为 边界时钟 (BC)。 顶层主时钟称为 主时钟。 主时钟可以与全球定位系统 (GPS) 同步。 这样,不同的网络可以通过高精度的同步。

硬件支持是 PTP 的主要优势。 多个网络交换机和网络接口控制器 (NIC) 支持它。 虽然可以在网络中使用未启用 PTP 的硬件,但如果所有 PTP 时钟之间的网络组件都启用了 PTP 硬件,则可以达到最佳的精度。

20.1.1 PTP Linux 实现 编辑源文件

openSUSE Leap 上,PTP 的实现由 linuxptp 包提供。 使用 zypper install linuxptp 安装它。 它包括 ptp4lphc2sys 程序,用于时钟同步。 ptp4l 实现 PTP 边界时钟和普通时钟。 当启用硬件时间戳时,ptp4l 将 PTP 硬件时钟与主时钟同步。 使用软件时间戳时,它将系统时钟与主时钟同步。 仅在使用硬件时间戳时才需要 phc2sys,以将系统时钟与网络接口卡 (NIC) 上的 PTP 硬件时钟同步。

20.2 使用 PTP 编辑源文件

20.2.1 网络驱动程序和硬件支持 编辑源文件

PTP 要求使用的内核网络驱动程序支持软件或硬件时间戳。 此外,NIC 必须在物理硬件中支持时间戳。 您可以使用 ethtool 验证驱动程序和 NIC 时间戳功能

> sudo ethtool -T eth0
Time stamping 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)

软件时间戳需要以下参数

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 使用 ptp4l 编辑源文件

ptp4l 默认使用硬件时间戳。 作为 root,您需要使用 -i 选项指定能够进行硬件时间戳的网络接口。 -m 告诉 ptp4l 将其输出打印到标准输出,而不是系统的日志记录设施

> sudo ptp4l -m -i eth0
selected eth0 as PTP clock
port 1: INITIALIZING to LISTENING on INITIALIZE
port 0: INITIALIZING to LISTENING on INITIALIZE
port 1: new foreign master 00a152.fffe.0b334d-1
selected best master clock 00a152.fffe.0b334d
port 1: LISTENING to UNCALIBRATED on RS_SLAVE
master offset -25937 s0 freq +0 path delay       12340
master offset -27887 s0 freq +0 path delay       14232
master offset -38802 s0 freq +0 path delay       13847
master offset -36205 s1 freq +0 path delay       10623
master offset  -6975 s2 freq -30575 path delay   10286
port 1: UNCALIBRATED to SLAVE on MASTER_CLOCK_SELECTED
master offset  -4284 s2 freq -30135 path delay    9892

master offset 值表示从主时钟测量的偏移量(以纳秒为单位)。

s0s1s2 指示符显示时钟伺服的不同状态:s0 未锁定,s1 时钟步进,s2 已锁定。 如果伺服处于锁定状态 (s2),则如果配置文件中将 pi_offset_const 选项设置为负值,则时钟不会步进(仅缓慢调整)(有关更多信息,请参阅 man 8 ptp4l)。

freq 值表示时钟的频率调整(以十亿分之一为单位,ppb)。

path delay 值表示从主时钟发送的同步消息的估计延迟(以纳秒为单位)。

端口 0 是用于本地 PTP 管理的 Unix 域套接字。 端口 1 是 eth0 接口。

INITIALIZINGLISTENINGUNCALIBRATEDSLAVE 是端口状态的示例,这些状态在 INITIALIZERS_SLAVEMASTER_CLOCK_SELECTED 事件发生时发生变化。 当端口状态从 UNCALIBRATED 变为 SLAVE 时,计算机已成功与 PTP 主时钟同步。

您可以使用 -S 选项启用软件时间戳。

> sudo ptp4l -m -S -i eth3

您还可以将 ptp4l 作为服务运行

> sudo systemctl start ptp4l

在这种情况下,ptp4l/etc/sysconfig/ptp4l 文件读取其选项。 默认情况下,此文件告诉 ptp4l/etc/ptp4l.conf 读取配置选项。 有关 ptp4l 选项和配置文件设置的更多信息,请参阅 man 8 ptp4l

要永久启用 ptp4l 服务,请运行以下命令

> sudo systemctl enable ptp4l

要禁用它,请运行

> sudo systemctl disable ptp4l

20.2.3 ptp4l 配置文件 编辑源文件

ptp4l 可以从可选的配置文件读取其配置。 由于默认情况下不使用配置文件,因此需要使用 -f 指定它。

> sudo ptp4l -f /etc/ptp4l.conf

配置文件分为几个部分。 全局部分(表示为 [global])设置程序选项、时钟选项和默认端口选项。 其他部分是端口特定的,它们会覆盖默认端口选项。 部分的名称是配置端口的名称,例如 [eth0]。 空的端口部分可用于替换命令行选项。

[global]
verbose               1
time_stamping         software
[eth0]

示例配置文件等效于以下命令的选项

> sudo ptp4l -i eth0 -m -S

有关完整的 ptp4l 配置选项列表,请参阅 man 8 ptp4l

20.2.4 延迟测量 编辑源文件

ptp4l 以两种不同的方式测量时间延迟:点对点 (P2P) 或 端到端 (E2E)。

P2P

使用 -P 指定此方法。

它能更快地响应网络环境的变化,并且在测量延迟方面更准确。 它仅用于网络中每个端口与其他一个端口交换 PTP 消息的网络。 P2P 需要通信路径上的所有硬件都支持它。

E2E

使用 -E 指定此方法。 这是默认设置。

自动方法选择

使用 -A 指定此方法。 自动选项以 E2E 模式启动 ptp4l,并在收到对等延迟请求时切换到 P2P 模式。

Important
重要:通用测量方法

单个 PTP 通信路径上的所有时钟必须使用相同的方法来测量时间延迟。 如果在正在使用 E2E 机制的端口上收到对等延迟请求,或者在正在使用 P2P 机制的端口上收到 E2E 延迟请求,则会打印警告。

20.2.5 PTP 管理客户端:pmc 编辑源文件

您可以使用 pmc 客户端获取有关 ptp41 的更详细信息。 它从标准输入读取——或从命令行读取——按名称和管理 ID 指定的操作。 然后,它通过所选传输发送操作,并打印收到的任何回复。 支持三种操作:GET 检索指定的信息,SET 更新指定的信息,CMD(或 COMMAND)启动指定的事件。

默认情况下,管理命令发送到所有端口。 可以使用 TARGET 命令为后续消息选择特定的时钟和端口。 有关完整的管理 ID 列表,请运行 pmc help

> sudo pmc -u -b 0 'GET TIME_STATUS_NP'
sending: GET TIME_STATUS_NP
        90f2ca.fffe.20d7e9-0 seq 0 RESPONSE MANAGEMENT TIME_STATUS_NP
                master_offset              283
                ingress_time               1361569379345936841
                cumulativeScaledRateOffset   +1.000000000
                scaledLastGmPhaseChange    0
                gmTimeBaseIndicator        0
                lastGmPhaseChange          0x0000'0000000000000000.0000
                gmPresent                  true
                gmIdentity                 00b058.feef.0b448a

-b 选项指定发送消息中的边界跳数值。 将其设置为零会将边界限制为本地 ptp4l 实例。 增加该值还会检索来自本地实例更远的 PTP 节点的消息。 返回的信息可能包括

stepsRemoved

到主时钟的通信节点数。

offsetFromMaster, master_offset

从主时钟测量的时钟的最后偏移量(纳秒)。

meanPathDelay

从主时钟发送的同步消息的估计延迟(纳秒)。

gmPresent

如果为 true,则 PTP 时钟与主时钟同步;本地时钟不是主时钟。

gmIdentity

这是主时钟的标识。

有关完整的 pmc 命令行选项列表,请参阅 man 8 pmc

20.3 使用 phc2sys 同步时钟 编辑源文件

使用 phc2sys 将系统时钟与网络卡上的 PTP 硬件时钟 (PHC) 同步。 系统时钟被视为 从机,而网络卡被视为 主时钟。 PHC 本身与 ptp4l 同步(请参阅 第 20.2 节,“使用 PTP”)。 使用 -s 通过设备或网络接口指定主时钟。 使用 -w 等待 ptp4l 处于同步状态。

> sudo phc2sys -s eth0 -w

PTP 在 国际原子时 (TAI) 中运行,而系统时钟使用 协调世界时 (UTC)。 如果您没有指定 -w 以等待 ptp4l 同步,则可以使用 -O 指定 TAI 和 UTC 之间的秒偏移量

> sudo phc2sys -s eth0 -O -35

您也可以将 phc2sys 作为服务运行

> sudo systemctl start phc2sys

在这种情况下,phc2sys/etc/sysconfig/phc2sys 文件读取其选项。 有关 phc2sys 选项的更多信息,请参阅 man 8 phc2sys

要永久启用 phc2sys 服务,请运行以下命令

> sudo systemctl enable phc2sys

要禁用它,请运行

> sudo systemctl disable phc2sys

20.3.1 验证时间同步 编辑源文件

当 PTP 时间同步正常工作并且使用硬件时间戳时,ptp4lphc2sys 会定期将时间偏移量和频率调整消息输出到系统日志。

ptp4l 输出的示例

ptp4l[351.358]: selected /dev/ptp0 as PTP clock
ptp4l[352.361]: port 1: INITIALIZING to LISTENING on INITIALIZE
ptp4l[352.361]: port 0: INITIALIZING to LISTENING on INITIALIZE
ptp4l[353.210]: port 1: new foreign master 00a069.eefe.0b442d-1
ptp4l[357.214]: selected best master clock 00a069.eefe.0b662d
ptp4l[357.214]: port 1: LISTENING to UNCALIBRATED on RS_SLAVE
ptp4l[359.224]: master offset       3304 s0 freq      +0 path delay      9202
ptp4l[360.224]: master offset       3708 s1 freq  -28492 path delay      9202
ptp4l[361.224]: master offset      -3145 s2 freq  -32637 path delay      9202
ptp4l[361.224]: port 1: UNCALIBRATED to SLAVE on MASTER_CLOCK_SELECTED
ptp4l[362.223]: master offset       -145 s2 freq  -30580 path delay      9202
ptp4l[363.223]: master offset       1043 s2 freq  -28436 path delay      8972
[...]
ptp4l[371.235]: master offset        285 s2 freq  -28511 path delay      9199
ptp4l[372.235]: master offset        -78 s2 freq  -28788 path delay      9204

phc2sys 输出的示例

phc2sys[616.617]: Waiting for ptp4l...
phc2sys[628.628]: phc offset     66341 s0 freq      +0 delay   2729
phc2sys[629.628]: phc offset     64668 s1 freq  -37690 delay   2726
[...]
phc2sys[646.630]: phc offset      -333 s2 freq  -37426 delay   2747
phc2sys[646.630]: phc offset       194 s2 freq  -36999 delay   2749

ptp4l 通常会写入高频率的消息。 您可以使用 summary_interval 指令减少频率。 它的值是 2^N 表达式的指数。 例如,要将输出减少到每 1024 秒(等于 2^10),请将以下行添加到 /etc/ptp4l.conf 文件

summary_interval 10

您还可以使用 -u SUMMARY-UPDATES 选项减少 phc2sys 命令更新的频率。

20.4 配置示例 编辑源文件

本节包含几个 ptp4l 配置示例。 这些示例不是完整的配置文件,而是对特定文件进行的最小更改列表。 字符串 ethX 代表您的设置中的实际网络接口名称。

示例 20.1:使用软件时间戳的从机时钟

/etc/sysconfig/ptp4l:

OPTIONS=”-f /etc/ptp4l.conf -i ethX”

未对发行版的 /etc/ptp4l.conf 进行更改。

示例 20.2:使用硬件时间戳的从机时钟

/etc/sysconfig/ptp4l:

OPTIONS=”-f /etc/ptp4l.conf -i ethX”

/etc/sysconfig/phc2sys:

OPTIONS=”-s ethX -w”

未对发行版的 /etc/ptp4l.conf 进行更改。

示例 20.3:使用硬件时间戳的主时钟

/etc/sysconfig/ptp4l:

OPTIONS=”-f /etc/ptp4l.conf -i ethX”

/etc/sysconfig/phc2sys:

OPTIONS=”-s CLOCK_REALTIME -c ethX -w”

/etc/ptp4l.conf:

priority1 127
示例 20.4:使用软件时间戳的主时钟(通常不建议)

/etc/sysconfig/ptp4l:

OPTIONS=”-f /etc/ptp4l.conf -i ethX”

/etc/ptp4l.conf:

priority1 127

20.5 PTP 和 NTP 编辑源文件

NTP 和 PTP 时间同步工具可以共存,可以双向地从一个工具同步时间到另一个工具。

20.5.1 NTP 到 PTP 同步 编辑源文件

当使用 chronyd 同步本地系统时钟时,您可以配置 ptp4l 作为主时钟,通过 PTP 将时间从本地系统时钟分发出去。在 /etc/ptp4l.conf 中包含 priority1 选项

[global]
priority1 127
[eth0]

然后运行 ptp4l

> sudo ptp4l -f /etc/ptp4l.conf

当使用硬件时间戳时,您需要使用 phc2sys 将 PTP 硬件时钟同步到系统时钟

> sudo phc2sys -c eth0 -s CLOCK_REALTIME -w

20.5.2 配置 PTP-NTP 桥接 编辑源文件

如果网络中存在一个高精度 PTP 主时钟,但没有支持 PTP 的交换机或路由器,则一台计算机可以作为 PTP 从机和 stratum-1 NTP 服务器运行。这样的计算机需要有两个或多个网络接口,并且靠近主时钟或与其直接连接。这可确保网络中的高度精确同步。

配置 ptp4lphc2sys 程序使用一个网络接口通过 PTP 同步系统时钟。然后配置 chronyd 使用另一个接口提供系统时间

bindaddress 192.0.131.47
hwtimestamp eth1
local stratum 1
Note
注意:NTP 和 DHCP

当 DHCP 客户端命令 dhclient 收到 NTP 服务器列表时,默认情况下会将它们添加到 NTP 配置中。要防止此行为,请设置

NETCONFIG_NTP_POLICY=""

/etc/sysconfig/network/config 文件中。

打印此页面