精确时间协议 - PTP
Cumulus Linux 支持 IEEE 1588-2008 精确时间协议 (PTPv2),该协议定义了跨基于数据包的网络(包括以太网交换机和 IP 路由器)同步各种设备时钟的算法和方法。
PTP 能够实现亚微秒级的精度。时钟采用主从层级结构,从时钟与它们的主时钟同步,而它们的主时钟又可以是它们自身主时钟的从时钟。最佳主时钟 (BMC) 算法在每个时钟上运行,自动创建和更新层级结构。Grand Master 时钟是顶层主时钟。为了提供高精度,全球定位系统 (GPS) 时间源通常同步 Grand Master 时钟。
在以下示例中
- 边界时钟 2 从 PTP 从端口上的 Master 1(Grand Master)接收时间,设置其时钟,并将时间从 PTP 主端口向下传递到边界时钟 1。
- 边界时钟 1 在 PTP 从端口上接收时间,设置其时钟,并通过 PTP 主端口将时间向下传递到接收时间的主机。

Cumulus Linux 和 PTP
Cumulus Linux 中的 PTP 使用 linuxptp
软件包,该软件包包含以下程序
ptp4l
提供 PTP 协议和状态机phc2sys
提供 PTP 硬件时钟和系统时钟同步timemaster
提供系统时钟和 PTP 同步
Cumulus Linux 支持
- 仅 PTP 边界时钟模式(交换机向下游服务器提供时间;它是更高级别时钟的从时钟,也是下游时钟的主时钟)。
- UDPv4、UDPv6 和 802.3 封装。
- 每个网络仅单个 PTP 域。
- 第 3 层接口、第 3 层绑定、trunk 端口和属于 VLAN 的交换机端口上的 PTP。
- 多播、单播和混合消息模式。
- 仅端到端延迟机制。Cumulus Linux 不支持点对点。
- 单步和双步时钟时间戳模式。
- PTP 数据包的硬件时间戳。这允许 PTP 避免消息传输延迟引起的不准确性,并提高时间同步的准确性。
- 您不能在交换机上同时运行 PTP 和 NTP。
- PTP 仅支持默认 VRF。
- NVIDIA SN5400 交换机上的 PTP 处于 BETA 阶段
- 由于硬件限制,1G 链路的 PTP 精度可能较低。如果您的应用程序需要 PTP 的高精度,请使用更高的链路速度。
基本配置
基本 PTP 配置需要您
- 禁用 NTP 并删除默认 NTP 配置。
- 在交换机上启用 PTP。
- 在至少一个接口上配置 PTP;这可以是第 3 层路由端口、交换机端口或 trunk 端口。您无需指定哪个是主接口,哪个是从接口;PTP 最佳主时钟算法 (BMCA) 确定主时钟和从时钟。
如果您使用 Linux 命令配置 PTP,您还必须启用 PTP 时间戳;请参阅下面的 Linux 步骤 1。当您在交换机上启用 PTP 时,NVUE 会启用时间戳。
下面显示的基本配置使用默认 PTP 设置
- 时钟模式为边界时钟。这是 Cumulus Linux 唯一支持的时钟模式。
- PTP 时钟域为 0。
- PTP Priority1 和 Priority2 均为 128。
- DSCP 对于通用消息和事件消息均为 46。
- PTP 接口传输模式为 IPv4。
- 接受来自任何主时钟的 Announce 消息.
- PTP 接口消息模式为多播。
- 延迟机制为端到端 (E2E),其中从时钟测量自身与主时钟之间的延迟。主时钟和从时钟之间相互发送延迟请求和延迟响应消息以测量延迟。
- 时钟时间戳模式为双步。
要配置其他设置(例如 PTP 配置文件、域、优先级和 DSCP、PTP 接口传输模式和计时器以及 PTP 监控),请参阅下面的可选配置部分。
禁用 NTP
删除交换机上的默认 NTP 配置
cumulus@switch:~$ nv unset service ntp mgmt server 0.cumulusnetworks.pool.ntp.org
cumulus@switch:~$ nv unset service ntp mgmt server 1.cumulusnetworks.pool.ntp.org
cumulus@switch:~$ nv unset service ntp mgmt server 2.cumulusnetworks.pool.ntp.org
cumulus@switch:~$ nv unset service ntp mgmt server 3.cumulusnetworks.pool.ntp.org
cumulus@switch:~$ nv config apply
停止并禁用管理 VRF 中的 NTP 服务
cumulus@switch:~$ sudo systemctl stop ntpsec@mgmt.service
cumulus@switch:~$ sudo systemctl disable ntpsec@mgmt.service
编辑
/etc/ntpsec/ntp.conf
文件以注释掉默认 NTP 配置cumulus@switch:~$ sudo nano /etc/ntpsec/ntp.conf # server 0.cumulusnetworks.pool.ntp.org iburst # server 1.cumulusnetworks.pool.ntp.org iburst # server 2.cumulusnetworks.pool.ntp.org iburst # server 3.cumulusnetworks.pool.ntp.org iburst
- 停止并禁用管理 VRF 中的 NTP 服务
cumulus@switch:~$ sudo systemctl stop ntpsec@mgmt.service cumulus@switch:~$ sudo systemctl disable ntpsec@mgmt.service
配置 PTP
NVUE nv set service ptp
命令需要实例编号(以下示例命令中为 1)以进行管理。
当您使用 nv set service ptp <instance> enable on
命令启用 PTP 服务时,NVUE 会重启 switchd
服务,这会导致所有网络端口重置,并重置交换机硬件配置。
cumulus@switch:~$ nv set service ptp 1 enable on
cumulus@switch:~$ nv set interface swp1 ip address 10.0.0.9/32
cumulus@switch:~$ nv set interface swp2 ip address 10.0.0.10/32
cumulus@switch:~$ nv set interface swp1 ptp enable on
cumulus@switch:~$ nv set interface swp2 ptp enable on
cumulus@switch:~$ nv config apply
该配置写入 /etc/ptp4l.conf
文件。
第 2 层传输
cumulus@switch:~$ nv set service ptp 1 enable on
cumulus@switch:~$ nv set bridge domain br_default
cumulus@switch:~$ nv set bridge domain br_default type vlan-aware
cumulus@switch:~$ nv set bridge domain br_default vlan 10-30
cumulus@switch:~$ nv set bridge domain br_default vlan 10 ptp enable on
cumulus@switch:~$ nv set interface swp1 bridge domain br_default
cumulus@switch:~$ nv set interface swp1 bridge domain br_default vlan 10
cumulus@switch:~$ nv set interface swp1 bridge domain br_default vlan 20
cumulus@switch:~$ nv set interface swp1 ptp transport 802.3
cumulus@switch:~$ nv set interface swp1 ptp enable on
cumulus@switch:~$ nv config apply
第 3 层传输
cumulus@switch:~$ nv set service ptp 1 enable on
cumulus@switch:~$ nv set bridge domain br_default
cumulus@switch:~$ nv set bridge domain br_default type vlan-aware
cumulus@switch:~$ nv set bridge domain br_default vlan 10-30
cumulus@switch:~$ nv set bridge domain br_default vlan 10 ptp enable on
cumulus@switch:~$ nv set interface vlan10 type svi
cumulus@switch:~$ nv set interface vlan10 ip address 10.1.10.2/24
cumulus@switch:~$ nv set interface vlan10 base-interface br_default
cumulus@switch:~$ nv set interface vlan10 ptp enable on
cumulus@switch:~$ nv set interface swp1 bridge domain br_default
cumulus@switch:~$ nv set interface swp1 bridge domain br_default vlan 10
cumulus@switch:~$ nv set interface swp1 bridge domain br_default vlan 20
cumulus@switch:~$ nv set interface swp1 ptp enable on
cumulus@switch:~$ nv config apply
- 您只能配置一个地址;IPv4 或 IPv6。
- 对于 IPv6,将 trunk 端口传输模式设置为 IPv6。
- 第 2 层和第 3 层 PTP 传输不能共存。
- 当您配置 PTP 第 3 层传输时,您必须配置
- 用于基于 VLAN 路由的 SVI。
- 基本接口配置,以确保数据包正确转发。
该配置写入 /etc/ptp4l.conf
文件。
第 2 层传输
cumulus@switch:~$ nv set service ptp 1 enable on
cumulus@switch:~$ nv set bridge domain br_default
cumulus@switch:~$ nv set bridge domain br_default type vlan-aware
cumulus@switch:~$ nv set bridge domain br_default vlan 10-30
cumulus@switch:~$ nv set bridge domain br_default vlan 10 ptp enable on
cumulus@switch:~$ nv set interface swp2 bridge domain br_default
cumulus@switch:~$ nv set interface swp2 bridge domain br_default access 10
cumulus@switch:~$ nv set interface swp2 ptp transport 802.3
cumulus@switch:~$ nv set interface swp2 ptp enable on
cumulus@switch:~$ nv config apply
第 3 层传输
cumulus@switch:~$ nv set service ptp 1 enable on
cumulus@switch:~$ nv set bridge domain br_default
cumulus@switch:~$ nv set bridge domain br_default type vlan-aware
cumulus@switch:~$ nv set bridge domain br_default vlan 10-30
cumulus@switch:~$ nv set bridge domain br_default vlan 10 ptp enable on
cumulus@switch:~$ nv set interface vlan10 type svi
cumulus@switch:~$ nv set interface vlan10 ip address 10.1.10.2/24
cumulus@switch:~$ nv set interface vlan10 base-interface br_default
cumulus@switch:~$ nv set interface swp2 bridge domain br_default
cumulus@switch:~$ nv set interface swp2 bridge domain br_default access 10
cumulus@switch:~$ nv set interface swp2 ptp enable on
cumulus@switch:~$ nv config apply
- 您只能配置一个地址;IPv4 或 IPv6。
- 对于 IPv6,将 trunk 端口传输模式设置为 IPv6。
- 当您在网桥端口上启用 PTP 时,您还必须使用
nv set bridge domain <domain> vlan <vlan-id> ptp enable on
命令在为端口配置的 VLAN 上启用 PTP。 - 第 2 层和第 3 层 PTP 传输不能共存。
- 当您配置 PTP 第 3 层传输时,您必须配置
- 用于基于 VLAN 路由的 SVI。
- 基本接口配置,以确保数据包正确转发。
该配置写入 /etc/ptp4l.conf
文件。
- 配置 NVUE 以停止管理 PTP 配置文件
cumulus@switch:~$ nv set system config apply ignore /etc/linuxptp/phc2sys.conf
cumulus@switch:~$ nv set system config apply ignore /etc/ptp4l.conf
cumulus@switch:~$ nv set system config apply ignore /etc/cumulus/switchd.d/ptp.conf
cumulus@switch:~$ nv config apply
编辑
/etc/cumulus/switchd.d/ptp.conf
文件,将ptp.timestamping
参数设置为TRUE
cumulus@switch:~$ sudo nano /etc/cumulus/switchd.d/ptp.conf ... ptp.timestamping TRUE ...
重启
switchd
服务cumulus@switch:~$ sudo systemctl restart switchd.service
重启 switchd
服务会导致所有网络端口重置,并重置交换机硬件配置。
- 编辑
/etc/ptp4l.conf
文件的Default interface options
部分,以配置您要用于 PTP 的交换机上的接口。
cumulus@switch:~$ sudo nano /etc/ptp4l.conf
...
#
# Default interface options
#
time_stamping hardware
# Interfaces in which ptp should be enabled
# these interfaces should be routed ports
# if an interface does not have an ip address
# the ptp4l will not work as expected.
[swp1]
udp_ttl 1
masterOnly 0
delay_mechanism E2E
[swp2]
udp_ttl 1
masterOnly 0
delay_mechanism E2E
对于 trunk VLAN,将 VLAN 配置添加到交换机端口节:将 l2_mode
设置为 trunk
,将 vlan_intf
设置为 VLAN 接口,并将 src_ip
设置为 VLAN 接口的 IP 地址
[swp1]
l2_mode trunk
vlan_intf vlan10
src_ip 10.1.10.2
udp_ttl 1
masterOnly 0
delay_mechanism E2E
network_transport RAWUDPv4
对于交换机端口 VLAN,将 VLAN 配置添加到交换机端口节:将 l2_mode
设置为 access
,将 vlan_intf
设置为 VLAN 接口,并将 src_ip
设置为 VLAN 接口的 IP 地址
[swp2]
l2_mode access
vlan_intf vlan10
src_ip 10.1.10.2
udp_ttl 1
masterOnly 0
delay_mechanism E2E
network_transport RAWUDPv4
编辑
/etc/linuxptp/phc2sys.conf
文件以添加以下参数cumulus@switch:~$ sudo nano /etc/linuxptp/phc2sys.conf # phc2sys is enabled [global] logging_level 6 path_trace_enabled 0 use_syslog 1 verbose 0 domainNumber 0
启用并启动
ptp4l
和phc2sys
服务cumulus@switch:~$ sudo systemctl enable ptp4l.service phc2sys.service cumulus@switch:~$ sudo systemctl start ptp4l.service phc2sys.service
全局配置
Cumulus Linux 提供了多种方法来修改默认的基本全局配置。您可以
- 使用配置文件。
- 使用 NVUE 命令直接修改参数。
- 修改 Linux
/etc/ptp4l.conf
文件。
当设置了预定义配置文件时,NVUE 不允许您配置全局参数。当正在使用预定义配置文件时,请勿编辑 Linux /etc/ptp4l.conf
文件来修改全局参数。有关配置文件的信息,请参阅 PTP 配置文件。
时钟域
PTP 域允许不同的独立计时系统存在于同一网络中,而不会相互混淆。PTP 域是网络或网络的一部分,其中所有时钟都同步。每个 PTP 消息都包含一个域号。PTP 实例仅在一个域中工作,并忽略包含不同域号的消息。Cumulus Linux 在系统中仅支持一个域。
您可以指定多个 PTP 时钟域。PTP 将每个域与其他域隔离,以便每个域都是不同的 PTP 网络。您可以指定介于 0 和 127 之间的数字。
以下示例命令在未设置配置文件时配置域 3
cumulus@switch:~$ nv set service ptp 1 domain 3
cumulus@switch:~$ nv config apply
编辑 /etc/ptp4l.conf
文件的 Default Data Set
部分以更改 domainNumber
设置,然后重启 ptp4l
服务。
cumulus@switch:~$ sudo nano /etc/ptp4l.conf
[global]
#
# Default Data Set
#
slaveOnly 0
priority1 128
priority2 128
domainNumber 3
...
cumulus@switch:~$ sudo systemctl restart ptp4l.service
时钟时间戳模式
Cumulus Linux 交换机提供以下时钟时间戳模式
- 单步,其中 PTP 将 Sync 数据包出端口的精确时间添加到数据包。无需后续数据包。
- 双步,其中 PTP 记录 Sync 数据包出端口的精确时间,并在单独的后续消息中发送它。
单步模式显著减少了 PTP 消息的数量。双步模式是默认配置。
Cumulus Linux 在 Spectrum-2 及更高版本上支持单步模式。
以下示例命令在未设置配置文件时配置单步模式
cumulus@switch:~$ nv set service ptp 1 two-step off
cumulus@switch:~$ nv config apply
要将时钟时间戳模式恢复为默认设置(双步模式),请运行 nv set service ptp 1 two-step on
命令。
要为基于 IEEE1588、ITU 8275-1 或 ITU 8275-2 的自定义配置文件设置时钟时间戳模式,请运行 nv set service ptp <instance-id> profile <profile-id> two-step
命令。例如,要为名为 CUSTOM1 的自定义配置文件设置单步模式,请运行 nv set service ptp 1 profile CUSTOM1 two-step off
命令。
编辑 /etc/ptp4l.conf
文件的 Default Data Set
部分,将 twoStepFlag
设置更改为 0,然后重启 ptp4l
服务。
cumulus@switch:~$ sudo nano /etc/ptp4l.conf
[global]
#
# Default Data Set
#
slaveOnly 0
priority1 254
priority2 254
domainNumber 3
twoStepFlag 0
dscp_event 43
dscp_general 43
udp6_scope 0x0E
...
cumulus@switch:~$ sudo systemctl restart ptp4l.service
要将时钟时间戳模式恢复为默认设置(双步模式),请将 twoStepFlag
设置更改为 1。
PTP 优先级
BMC 根据以下顺序的标准选择 PTP 主时钟
- 优先级 1
- 时钟等级
- 时钟精度
- 时钟方差
- 优先级 2
- 端口 ID
使用 PTP 优先级选择最佳主时钟。您可以设置优先级 1 和 2
- 优先级 1 覆盖时钟等级和质量选择标准,以选择最佳主时钟。
- 优先级 2 在相同的冗余 Grand Master 中识别主时钟和备份时钟。
优先级 1 和优先级 2 的范围都在 0 到 255 之间。默认优先级为 128。对于边界时钟,请使用大于 128 的数字。较低的优先级优先应用。
以下示例命令在未设置配置文件时将优先级 1 和优先级 2 设置为 200
cumulus@switch:~$ nv set service ptp 1 priority1 200
cumulus@switch:~$ nv set service ptp 1 priority2 200
cumulus@switch:~$ nv config apply
编辑 /etc/ptp4l.conf
文件的 Default Data Set
部分以更改 priority1
和/或 priority2
设置,然后重启 ptp4l
服务。
cumulus@switch:~$ sudo nano /etc/ptp4l.conf
[global]
#
# Default Data Set
#
slaveOnly 0
priority1 200
priority2 200
domainNumber 3
...
cumulus@switch:~$ sudo systemctl restart ptp4l.service
噪声传递伺服
ITU-T 噪声传递规定了以下关键要素来测量、测试和分类时钟的精度
- 噪声生成—时钟输出中相对于 PRTC 的抖动和漂移噪声。
- 噪声容限—时钟在切换到另一个稳定源之前可以容忍多少噪声。
- 噪声传递—平滑输入噪声,以便噪声不会在时钟网络中累积和增加。
- 瞬态响应—时钟对瞬态的响应。
- 保持—时钟在失去输入参考信号后保持其输出的时间间隔。
Cumulus Linux PTP 有一个选项可以使用专门设计用于处理 ITU-T 噪声传递规范的伺服。当您使用此选项时,PHC 噪声传递伺服会解决来自主时钟的抖动和漂移噪声。
- 要使用噪声传递伺服,您需要在交换机和 PTP 接口上启用 SyncE。
- Cumulus Linux 在支持 SyncE 的 Spectrum ASIC 上支持噪声传递伺服。
- NVIDIA 建议您将噪声传递伺服与 PTP 电信配置文件一起使用。如果您使用其他配置文件或选择不使用配置文件,请确保将同步间隔设置为 -3 或更佳。
- 当您启用噪声传递伺服时,PTP 日志报告偏移量为每两秒一次,而不是每秒一次。
要启用噪声传递伺服
以下示例启用 PTP,将配置文件设置为 default-itu-8275-1
,启用 SyncE,在 swp3 上启用 PTP,并启用噪声传递伺服。
cumulus@switch:~$ nv set service ptp 1 enable on
cumulus@switch:~$ nv set service ptp 1 current-profile default-itu-8275-1
cumulus@switch:~$ nv set system synce enable on
cumulus@switch:~$ nv set interface swp3 ptp enable on
cumulus@switch:~$ nv set service ptp 1 servo noise-transfer
cumulus@switch:~$ nv config apply
编辑 /etc/ptp4l.conf
和 /etc/firefly_servo/servo.conf
文件;请参阅以下示例。
cumulus@switch:~$ sudo nano /etc/ptp4l.conf
[global]
#
# Default Data Set
#
slaveOnly 0
free_running 1
slave_event_monitor /var/run/servo_slave_event_monitor
priority1 128
priority2 128
domainNumber 24
twoStepFlag 1
dscp_event 46
dscp_general 46
network_transport L2
dataset_comparison G.8275.x
G.8275.defaultDS.localPriority 128
ptp_dst_mac 01:80:C2:00:00:0E
#
# Port Data Set
#
logAnnounceInterval -3
logSyncInterval -4
logMinDelayReqInterval -4
announceReceiptTimeout 3
delay_mechanism E2E
offset_from_master_min_threshold -50
offset_from_master_max_threshold 50
mean_path_delay_threshold 200
tsmonitor_num_ts 100
tsmonitor_num_log_sets 2
tsmonitor_num_log_entries 4
tsmonitor_log_wait_seconds 1
#
# Run time options
#
logging_level 6
path_trace_enabled 0
use_syslog 1
verbose 0
summary_interval 0
#
# servo parameters
#
pi_proportional_const 0.000000
pi_integral_const 0.000000
pi_proportional_scale 0.700000
pi_proportional_exponent -0.300000
pi_proportional_norm_max 0.700000
pi_integral_scale 0.300000
pi_integral_exponent 0.400000
pi_integral_norm_max 0.300000
first_step_threshold 0.000020
step_threshold 0.000000025
servo_offset_threshold 20
servo_num_offset_values 10
write_phase_mode 1
max_frequency 50000000
sanity_freq_limit 0
#
# Default interface options
#
time_stamping hardware
[swp3]
udp_ttl 1
masterOnly 0
delay_mechanism E2E
cumulus@switch:~$ sudo nano /etc/firefly_servo/servo.conf
[global]
free_running 0
domainNumber 24
offset_from_master_min_threshold -50
offset_from_master_max_threshold 50
# Debugging & Logging
doca_logging_level 50
init_max_time_adjustment 0
max_time_adjustment 1500
hold_over_timer 0
# Sampling Window & servo logic
servo_window_timer 3000
servo_window_min_samples 10
servo_num_offset_values 5
要显示噪声传递伺服配置设置,请运行 nv show service ptp <instance-id> servo
命令
cumulus@switch:~$ nv show service ptp 1 servo
operational applied
----- ----------- --------------
servo noise-transfer
忽略源端口 ID
如果主时钟禁用了 Announce,您可以禁用 SYNC、Follow Up 和 Delay Response PTP 消息中的源端口 ID 检查。在 PTP 的罕见实现中,禁用源端口 ID 检查也很有用,在这些实现中,主时钟会更改上述消息中源端口 ID,使其与 Announce 上发送的端口 ID 不同。
要禁用源端口 ID 检查,请运行 nv set service ptp 1 ignore-source-id on
命令
cumulus@switch:~$ nv set service ptp 1 ignore-source-id on
cumulus@switch:~$ nv config apply
要重新启用源端口 ID 检查,请运行 nv set service ptp 1 ignore-source-id off
命令。
要禁用源端口 ID 检查,请编辑 /etc/ptp4l.conf
文件以添加 ignore_source_id 1
参数,然后重启 ptp4l
服务。
cumulus@switch:~$ sudo nano /etc/ptp4l.conf
[global]
#
# Default Data Set
#
slaveOnly 0
priority1 128
priority2 128
domainNumber 0
ignore_source_id 1
...
cumulus@switch:~$ sudo systemctl restart ptp4l.service
多播 MAC 地址
以太网上的 PTP 使用以下类型的多播 MAC 地址
- 转发,这是一个标准的 MAC 地址,交换机和网桥会对其进行洪泛。处理这些多播消息的节点可能是不支持 PTP 的中间节点。这是默认的多播 MAC 地址类型,使用 01-1B-19-00-00-00 MAC。
- 非转发,这是保留的 802.1 Q 地址 01-80-C2-00-00-0E。Cumulus Linux 不会在网桥上转发此地址。
对于电信配置文件 ITU 8275-1,将多播 MAC 地址设置为非转发。
要将多播 MAC 地址设置为非转发
cumulus@switch:~$ nv set service ptp 1 multicast-mac non-forwarding
cumulus@switch:~$ nv config apply
要将多播 MAC 地址设置为转发,请运行 nv unset service ptp 1 multicast-mac non-forwarding
命令。
要将多播 MAC 地址设置为非转发,请编辑 /etc/ptp4l.conf
文件以添加 ptp_dst_mac
参数,然后重启 ptp4l
服务。
cumulus@switch:~$ sudo nano /etc/ptp4l.conf
...
#
# Run time options
#
logging_level 6
path_trace_enabled 0
use_syslog 1
verbose 0
summary_interval 0
ptp_dst_mac 01:80:C2:00:00:0E
cumulus@switch:~$ sudo systemctl restart ptp4l.service
可选全局配置
可选的全局 PTP 配置包括配置差分服务代码点 (DSCP)。您可以为本地发起的所有 PTP IPv4 数据包配置 DSCP 值。您可以设置介于 0 和 63 之间的值。
cumulus@switch:~$ nv set service ptp 1 ip-dscp 22
cumulus@switch:~$ nv config apply
编辑 /etc/ptp4l.conf
文件的 Default Data Set
部分,以更改触发从时钟读取时间戳的 PTP 消息的 dscp_event
设置,以及携带命令、响应、信息或时间戳的 PTP 消息的 dscp_general
设置。
保存 /etc/ptp4l.conf
文件后,重启 ptp4l
服务。
cumulus@switch:~$ sudo nano /etc/ptp4l.conf
[global]
#
# Default Data Set
#
slaveOnly 0
priority1 200
priority2 200
domainNumber 3
twoStepFlag 1
dscp_event 22
dscp_general 22
udp6_scope 0x0E
...
cumulus@switch:~$ sudo systemctl restart ptp4l.service
PTP 接口配置
Cumulus Linux 提供了多种方法来修改默认的基本接口配置。您可以
- 使用配置文件
- 使用 NVUE 命令直接修改参数
- 修改 Linux
/etc/ptp4l.conf
配置文件。
当正在使用配置文件时,请避免使用 NVUE 或在 Linux 配置文件中配置以下接口配置参数,以使接口保留其配置文件设置。
传输模式
默认情况下,Cumulus Linux 将 PTP 消息封装在 UDP IPv4 帧中。要在 UDP IPv6 帧中封装接口上的 PTP 消息
cumulus@switch:~$ nv set interface swp1 ptp transport ipv6
cumulus@switch:~$ nv config apply
编辑 /etc/ptp4l.conf
文件的 Default interface options
部分,以更改接口的 network_transport
设置,然后重启 ptp4l
服务。
cumulus@switch:~$ sudo nano /etc/ptp4l.conf
...
# Default interface options
#
time_stamping hardware
# Interfaces in which ptp should be enabled
# these interfaces should be routed ports
# if an interface does not have an ip address
# the ptp4l will not work as expected.
[swp1]
udp_ttl 1
masterOnly 0
delay_mechanism E2E
network_transport RAWUDPv6
[swp2]
udp_ttl 1
masterOnly 0
delay_mechanism E2E
network_transport RAWUDPv6
...
cumulus@switch:~$ sudo systemctl restart ptp4l.service
消息模式
Cumulus Linux 支持以下 PTP 消息模式
- 多播,其中端口订阅两个多播地址,一个用于带时间戳的事件消息,另一个用于不带时间戳的通用消息。主时钟发送的 Sync 消息是多播消息;所有从端口都会收到此消息,因为从端口需要来自主时钟的时间。从端口反过来向主时钟生成延迟请求。这是一个多播消息,消息的预期主时钟和其他从端口都会收到。同样,除了预期的从端口外,所有从端口都会收到主时钟的延迟响应。接收到非预期延迟请求和响应的从端口需要丢弃数据包。如果存在数百个从端口,这可能会影响网络带宽。
- 混合,其中 Sync 和 Announce 消息是多播消息,但 Delay Request 和 Response 消息是单播消息。这避免了在多播消息模式中看到的每个从端口都看到来自每个其他从端口的延迟请求和响应的问题。
- 单播,其中您将端口配置为单播客户端或服务器。请参阅 单播模式。
多播模式是默认设置;当您在接口上启用 PTP 时,消息模式为多播。
要将 swp1 上的消息模式更改为混合
cumulus@switch:~$ nv set interface swp1 ptp mixed-multicast-unicast on
cumulus@switch:~$ nv config apply
要将 swp1 上的消息模式改回默认的多播设置
cumulus@switch:~$ nv set interface swp1 ptp mixed-multicast-unicast off
cumulus@switch:~$ nv config apply
编辑 /etc/ptp4l.conf
文件的 Default interface options
部分,在接口下添加 hybrid_e2e 1
行,然后重启 ptp4l
服务。
cumulus@switch:~$ sudo nano /etc/ptp4l.conf
...
# Default interface options
#
time_stamping hardware
# Interfaces in which ptp should be enabled
# these interfaces should be routed ports
# if an interface does not have an ip address
# the ptp4l will not work as expected.
[swp1]
hybrid_e2e 1
...
cumulus@switch:~$ sudo systemctl restart ptp4l.service
要将消息模式改回默认的多播设置,请删除接口下的 hybrid_e2e
行,然后重启 ptp4l
服务。
PTP 接口计时器
您可以为 PTP 消息设置以下计时器。
计时器 | 描述 |
---|---|
announce-interval | 连续 Announce 消息之间的平均间隔。以秒为单位指定值的 2 的幂。 |
announce-timeout | 在发生超时之前必须发生但未收到 Announce 消息的 announce 间隔数。确保此值长于网络中的 announce-interval。 |
delay-req-interval | 连续 Delay Required 消息之间允许的最小平均时间间隔。 |
sync-interval | 接口上 PTP 同步消息之间的间隔。以秒为单位指定值的 2 的幂。 |
- 要使用 NVUE 设置计时器,请运行
nv set interface <interface> ptp timers <timer> <value>
命令。 - 要使用 Linux 命令设置计时器,请编辑
/etc/ptp4l.conf
文件并在Default interface options
部分中设置计时器。
以下示例将 swp1 上连续 Announce 消息之间的 announce 间隔设置为 -1。
cumulus@switch:~$ nv set interface swp1 ptp timers announce-interval -1
cumulus@switch:~$ nv config apply
以下示例将 swp1 上多播消息的平均 sync-interval 设置为 -5。
cumulus@switch:~$ nv set interface swp1 ptp timers sync-interval -5
cumulus@switch:~$ nv config apply
编辑 /etc/ptp4l.conf
文件的 Default interface options
部分
- 要将 swp1 上连续 Announce 消息之间的 announce 间隔设置为 -1,请在接口节下添加
logAnnounceInterval -1
。 - 要将 swp1 上多播消息的平均 sync-interval 设置为 -5,请在接口节下添加
logSyncInterval -5
。
编辑 /etc/ptp4l.conf
文件后,重启 ptp4l
服务。
cumulus@switch:~$ sudo nano /etc/ptp4l.conf
...
# Default interface options
#
time_stamping hardware
# Interfaces in which ptp should be enabled
# these interfaces should be routed ports
# if an interface does not have an ip address
# the ptp4l will not work as expected.
[swp1]
logAnnounceInterval -1
logSyncInterval -5
udp_ttl 20
masterOnly 1
delay_mechanism E2E
...
cumulus@switch:~$ sudo systemctl restart ptp4l.service
可选 PTP 接口配置
强制主模式
默认情况下,PTP 端口处于自动模式,其中 BMC 算法确定端口的状态。
您可以在 PTP 端口上配置强制主模式,使其始终处于主状态,并且 BMC 算法不适用于此端口。此端口将忽略其接收到的任何 Announce 消息。
cumulus@switch:~$ nv set interface swp1 ptp forced-master on
cumulus@switch:~$ nv config apply
编辑 /etc/ptp4l.conf
文件的 Default interface options
部分,以更改接口的 masterOnly
设置,然后重启 ptp4l
服务。
cumulus@switch:~$ sudo nano /etc/ptp4l.conf
...
# Default interface options
#
time_stamping hardware
# Interfaces in which ptp should be enabled
# these interfaces should be routed ports
# if an interface does not have an ip address
# the ptp4l will not work as expected.
[swp1]
udp_ttl 1
masterOnly 1
delay_mechanism E2E
...
cumulus@switch:~$ sudo systemctl restart ptp4l.service
PTP 消息的 TTL
要限制 PTP 消息可以传输的跃点数,请在 PTP 接口上设置 TTL。您可以设置介于 1 和 255 之间的值。
cumulus@switch:~$ nv set interface swp1 ptp ttl 20
cumulus@switch:~$ nv config apply
编辑 /etc/ptp4l.conf
文件的 Default interface options
部分,以更改接口的 udp_ttl
设置,然后重启 ptp4l
服务。
cumulus@switch:~$ sudo nano /etc/ptp4l.conf
...
# Default interface options
#
time_stamping hardware
# Interfaces in which ptp should be enabled
# these interfaces should be routed ports
# if an interface does not have an ip address
# the ptp4l will not work as expected.
[swp1]
udp_ttl 20
masterOnly 1
delay_mechanism E2E
...
cumulus@switch:~$ sudo systemctl restart ptp4l.service
单播模式
Cumulus Linux 支持单播模式,以便单播客户端可以与服务器执行单播发现和协商。与默认的多播模式(服务器(主时钟)和客户端(从时钟)都开始发送 announce 请求并相互发现)不同,在单播模式下,客户端首先发送单播传输请求。客户端将其发送到其单播主表中每个服务器地址。服务器使用接受或拒绝来响应请求。
全局单播配置
单播客户端需要一个单播主时钟表来进行单播协商;您必须在交换机上配置至少一个单播主时钟表。
全局配置单播
- 设置单播表 ID;这是一个唯一的 ID,用于标识单播主时钟表。
- 设置单播主时钟地址。您可以设置多个单播主时钟地址,可以是 IPv4、IPv6 或 MAC 地址。
- 可选:设置单播主时钟查询间隔,即请求 Announce 消息的平均间隔。以 2 的幂次方秒为单位指定此值。您可以指定介于 -3 到 4 之间的值。默认值为 -0(2 的 0 次方)。
cumulus@switch:~$ nv set service ptp 1 unicast-master 1 address 10.10.10.1 cumulus@switch:~$ nv set service ptp 1 unicast-master 1 query-interval 4 cumulus@switch:~$ nv set interface swp1 ptp unicast-master-table-id 1 cumulus@switch:~$ nv config apply
在
/etc/ptp4l.conf
文件的# Default interface options
部分末尾添加以下行cumulus@switch:~$ sudo nano /etc/ptp4l.conf ... # Default interface options ... [unicast_master_table] table_id 1 logQueryInterval 4 RAWUDPv4 10.10.10.1 ...
重启
ptp4l
服务。cumulus@switch:~$ sudo systemctl restart ptp4l.service
接口单播配置
对于接口单播配置,除了在接口上启用 PTP 之外,您还需要将 PTP 接口配置为单播客户端或单播服务器。
当在交换机上配置多个 PTP 接口作为单播客户端时,您必须在每个设置为单播客户端的接口上配置一个单播表 ID。每个客户端必须具有不同的表 ID。
要将 PTP 接口配置为单播客户端
cumulus@switch:~$ nv set interface swp1 ptp unicast-service-mode client
cumulus@switch:~$ nv config apply
在
/etc/ptp4l.conf
文件的接口部分末尾添加以下行[unicast_master_table] table_id 3 logQueryInterval 0 RAWUDPv4 100.100.100.1 [swp1] table_id 1 ...
重启
ptp4l
服务。cumulus@switch:~$ sudo systemctl restart ptp4l.service
要将 PTP 接口配置为单播服务器
cumulus@switch:~$ nv set interface swp1 ptp unicast-service-mode server
cumulus@switch:~$ nv config apply
在
/etc/ptp4l.conf
文件的接口部分末尾添加以下行[swp1] ... unicast_listen 1 ...
重启
ptp4l
服务。cumulus@switch:~$ sudo systemctl restart ptp4l.service
要配置单播表 ID
cumulus@switch:~$ nv set interface swp1 ptp unicast-master-table-id 1
cumulus@switch:~$ nv config apply
在
/etc/ptp4l.conf
文件的接口部分末尾添加表 ID[swp1] ... table_id 1
重启
ptp4l
服务。cumulus@switch:~$ sudo systemctl restart ptp4l.service
要在交换机上显示单播主时钟表配置,请运行 nv show service ptp <instance-id> unicast-master <table-id>
命令。
要显示与单播 PTP 相关的计数器,请运行 nv show interface <interface>> counters ptp
命令,并检查输出中的 Signaling
部分。
cumulus@switch:~$ nv show interface swp1 counters ptp
Packet Type Received Transmitted
--------------------- ------------ ------------
Announce 0 681
Sync 0 43530
Follow-up 0 43530
Delay Request 42064 0
Delay Response 0 42064
Peer Delay Request 0 0
Peer Delay Response 0 0
Management 0 0
Signaling 94 282
Announce Grant Request 94 0
Announce Grant Response 0 94
Announce Deny Response 0 0
Sync Grant Request 94 0
Sync Grant Response 0 94
Sync Deny Response 0 0
Delay Grant Request 94 0
Delay Grant Response 0 94
Delay Deny Response 0 0
Cancel Announce Request 0 0
Cancel Sync Request 0 0
Cancel Delay Request 0 0
- 客户端在一个信令消息(Announce、Sync、Delay request TLV)中一起发送单播请求,单播服务器看到一个信令消息和三个 TLV。每次收到请求时,计数器都会递增。
- 服务器为每个响应单独响应一个 grant 信令消息;响应包括三个信令消息,每个消息都带有一个 TLV。计数器单独递增。
可选的单播接口配置
您可以为单播客户端设置单播请求持续时间,这是单播客户端在单播协商期间请求的服务时间(以秒为单位)。默认值为 300 秒。
cumulus@switch:~$ nv set interface swp1 ptp unicast-request-duration 20
cumulus@switch:~$ nv config apply
在
/etc/ptp4l.conf
文件的接口部分末尾添加unicast_request_duration
参数[swp1] ... table_id 1 unicast_request_duration 20
重启
ptp4l
服务。cumulus@switch:~$ sudo systemctl restart ptp4l.service
PTP 配置文件
PTP 配置文件是一组标准化的配置和规则,旨在满足特定应用程序的需求。配置文件定义了必需、允许和限制的 PTP 选项、网络限制和性能要求。
所有接口都继承 PTP 配置文件参数值。在接口下配置的 PTP 参数值优先于 PTP 配置文件参数值。
Cumulus Linux 支持三种预定义的配置文件:IEEE 1588 和两个电信配置文件 - ITU 8275-1 和 ITU 8275-2。
IEEE 1588 | ITU 8275-1 | ITU 8275-2 | |
---|---|---|---|
应用 | 企业 | 移动网络 | 移动网络 |
传输 | 二层和三层 | 第 2 层 | 第 3 层 |
封装 | 802.3、UDPv4 或 UDPv6 | 802.3 | UDPv4 或 UDPv6 |
传输 | 单播和多播 | 多播 | 单播 |
支持的时钟类型 | 边界时钟 | 边界时钟 | 边界时钟 |
- 您无法修改预定义的配置文件。如果要在预定义的配置文件中将参数设置为不同的值,则需要创建自定义配置文件。您可以在适用于配置文件类型的范围内修改自定义配置文件。
- 您无法将当前配置文件设置为尚未创建的配置文件。
- 您无法在使用中的配置文件中设置全局 PTP 参数。
- PTP 配置文件不支持 bonds。
- 如果您设置了预定义或自定义配置文件,请勿更改任何全局 PTP 设置,例如 DSCP 或时钟域。
- 为了在具有多个接口上 PTP 的高规模网络中获得更好的性能,请使用
nv set system control-plane policer lldp-ptp burst <value>
和nv set system control-plane policer lldp-ptp rate <value>
命令配置更高的系统策略器速率。交换机将 LLDP 策略器用于 PTP 协议数据包。LLDP 策略器的默认值为 2500。当您将 ITU 8275.1 配置文件与更高的同步速率一起使用时,请使用更高的策略器值。
设置预定义的配置文件
要设置预定义的配置文件
- 要设置 ITU 8275.1 配置文件,请运行
nv set service ptp <instance-id> current-profile default-itu-8275-1
命令。 - 要设置 ITU 8275.2 配置文件,请运行
nv set service ptp <instance-id> current-profile default-itu-8275-2
命令。
以下示例将配置文件设置为 ITU 8275.1
cumulus@switch:~$ nv set service ptp 1 current-profile default-itu-8275-1
cumulus@switch:~$ nv config apply
要设置 IEEE 1588 配置文件
cumulus@switch:~$ nv set service ptp 1 current-profile default-1588
cumulus@switch:~$ nv config apply
要设置预定义的 ITU 8275.1 配置文件,请编辑 /etc/ptp4l.conf
文件并设置如下所示的参数,然后重启 ptp4l
服务
cumulus@switch:~$ sudo nano /etc/ptp4l.conf
...
...
[global]
#
# Default Data Set
#
slaveOnly 0
priority1 128
priority2 128
domainNumber 24
twoStepFlag 1
dscp_event 46
dscp_general 46
dataset_comparison G.8275.x
G.8275.defaultDS.localPriority 128
ptp_dst_mac 01:80:C2:00:00:0E
...
cumulus@switch:~$ sudo systemctl restart ptp4l.service
要设置预定义的 ITU 8275.2 配置文件,请编辑 /etc/ptp4l.conf
文件并设置如下所示的参数,然后重启 ptp4l
服务
cumulus@switch:~$ sudo nano /etc/ptp4l.conf
...
...
[global]
#
# Default Data Set
#
slaveOnly 0
priority1 128
priority2 128
domainNumber 24
twoStepFlag 1
dscp_event 46
dscp_general 46
network_transport RAWUDPv4
dataset_comparison G.8275.x
G.8275.defaultDS.localPriority 128
hybrid_e2e 1
inhibit_multicast_service 1
unicast_listen 1
unicast_req_duration 60
...
cumulus@switch:~$ sudo systemctl restart ptp4l.service
要使用预定义的 IEEE 1588 配置文件,请编辑 /etc/ptp4l.conf
文件并设置如下所示的参数,然后重启 ptp4l
服务
cumulus@switch:~$ sudo nano /etc/ptp4l.conf
[global]
#
# Default Data Set
#
slaveOnly 0
priority1 128
priority2 128
domainNumber 0
twoStepFlag 1
dscp_event 46
dscp_general 46
network_transport RAWUDPv4
dataset_comparison ieee1588
...
cumulus@switch:~$ sudo systemctl restart ptp4l.service
创建自定义配置文件
要创建自定义配置文件
- 创建配置文件名称。
- 设置新配置文件所基于的配置文件类型(
itu-g-8275-1
itu-g-8275-2
或ieee-1588
)。 - 更新您要更改的任何配置文件设置(
announce-interval
、delay-req-interval
、priority1
、sync-interval
、announce-timeout
、domain
、priority2
、transport
、delay-mechanism
、local-priority
)。 - 将自定义配置文件设置为当前配置文件。
以下示例命令基于预定义的 ITU 8275-1 配置文件创建名为 CUSTOM1 的自定义配置文件。这些命令将 domain
设置为 28,将 announce-timeout
设置为 3,然后将 CUSTOM1
设置为当前配置文件
cumulus@switch:~$ nv set service ptp 1 profile CUSTOM1
cumulus@switch:~$ nv set service ptp 1 profile CUSTOM1 profile-type itu-g-8275-1
cumulus@switch:~$ nv set service ptp 1 profile CUSTOM1 domain 28
cumulus@switch:~$ nv set service ptp 1 profile CUSTOM1 announce-timeout 3
cumulus@switch:~$ nv set service ptp 1 current-profile CUSTOM1
cumulus@switch:~$ nv config apply
以下示例 /etc/ptp4l.conf
文件基于预定义的 ITU 8275-1 配置文件创建一个自定义配置文件,并将 domain
设置为 28,将 announce-timeout
设置为 3。
cumulus@switch:~$ sudo nano /etc/ptp4l.conf
[global]
#
# Default Data Set
#
slaveOnly 0
priority1 128
priority2 128
domainNumber 28
twoStepFlag 1
dscp_event 46
dscp_general 46
network_transport L2
dataset_comparison G.8275.x
G.8275.defaultDS.localPriority 128
ptp_dst_mac 01:80:C2:00:00:0E
#
# Port Data Set
#
logAnnounceInterval 5
logSyncInterval -4
logMinDelayReqInterval -4
announceReceiptTimeout 3
delay_mechanism E2E
offset_from_master_min_threshold -50
offset_from_master_max_threshold 50
mean_path_delay_threshold 200
tsmonitor_num_ts 100
tsmonitor_num_log_sets 3
tsmonitor_num_log_entries 4
tsmonitor_log_wait_seconds 1
#
# Run time options
#
logging_level 6
path_trace_enabled 0
use_syslog 1
verbose 0
summary_interval 0
#
# servo parameters
#
pi_proportional_const 0.000000
pi_integral_const 0.000000
pi_proportional_scale 0.700000
pi_proportional_exponent -0.300000
pi_proportional_norm_max 0.700000
pi_integral_scale 0.300000
pi_integral_exponent 0.400000
pi_integral_norm_max 0.300000
step_threshold 0.000002
first_step_threshold 0.000020
max_frequency 900000000
sanity_freq_limit 0
#
# Default interface options
#
time_stamping hardware
# Interfaces in which ptp should be enabled
# these interfaces should be routed ports
# if an interface does not have an ip address
# the ptp4l will not work as expected.
[swp1]
udp_ttl 1
masterOnly 0
delay_mechanism E2E
[swp2]
udp_ttl 1
masterOnly 0
delay_mechanism E2E
cumulus@switch:~$ sudo systemctl restart ptp4l.service
电信配置文件
ITU 8275-1 和 ITU 8275-2 是电信配置文件。您可以将 PTP 电信配置文件用于具有完全时序支持的网络中的相位分配,以及用于具有部分时序支持的网络中的时间分配。虽然 ITU 8275-1 使用 802.3 封装,但 ITU 8275-2 使用单播。当您使用电信配置文件时,PTP 使用备用最佳主时钟算法 (BMCA),该算法在常规 BMCA 上提供以下功能
- 支持仅主时钟功能。
- 允许同时激活多个 Grand Master。
- 支持 local-priority 功能,以手动设计同步网络。
本地优先级
电信配置文件的本地优先级属性为构建同步拓扑提供了强大的工具。配置文件具有两个本地优先级配置参数
clock-local-priority
- 您将时钟本地优先级分配给本地时钟。在决定更好的 Grand Master 时,PTP 使用时钟本地优先级作为决胜因素。local-priority
- 当运行备用 BMCA 时,您将本地优先级分配给端口作为决胜因素。当您在配置文件级别设置此属性时,它将应用于所有启用 PTP 的端口。还有一个接口级别的配置可以覆盖配置文件值。
clock-local-priority
和 local-priority
的默认值均为 128。当您使用默认值时,备用 BMCA 会自动确定同步拓扑。如果您使用非默认本地优先级值,则需要手动构建同步拓扑。
- 手动构建同步拓扑时,请谨慎使用本地优先级属性。
- 对于两个连接的交换机,您必须在一个交换机上将本地优先级设置为高于 128,而在第二个交换机上将本地优先级设置为低于 128。
以下示例命令设置
- 基于 ITU 8275-2 的名为 CUSTOM1 的自定义配置文件的本地优先级为 10。
- 基于 ITU 8275-2 的名为 CUSTOM1 的自定义配置文件的时钟本地优先级为 100。
cumulus@switch:~$ nv set service ptp 1 profile CUSTOM1 local-priority 10
cumulus@switch:~$ nv set service ptp 1 profile CUSTOM1 clock-local-priority 100
cumulus@switch:~$ nv config apply
将 G.8275.portDS.localPriority
(本地优先级)选项和 G.8275.defaultDS.localPriority
(时钟本地优先级)选项添加到 /etc/ptp4l.conf
文件的 Global
部分,然后重启 ptp4l
服务。
以下示例设置
- 本地优先级为 10。
- 时钟本地优先级为 100。
cumulus@switch:~$ sudo nano /etc/ptp4l.conf
[global]
#
# Default Data Set
#
slaveOnly 0
priority1 128
priority2 128
domainNumber 28
twoStepFlag 1
dscp_event 46
dscp_general 46
network_transport L2
dataset_comparison G.8275.x
G.8275.defaultDS.localPriority 100
G.8275.portDS.localPriority 10
...
cumulus@switch:~$ sudo systemctl restart ptp4l.service
以下示例将 swp1 上的本地优先级设置为 120。
cumulus@switch:~$ nv set interface swp1 ptp 1 local-priority 120
cumulus@switch:~$ nv config apply
将 G.8275.portDS.localPriority
选项添加到 /etc/ptp4l.conf
文件的 interface
部分,然后重启 ptp4l
服务。
cumulus@switch:~$ sudo nano /etc/ptp4l.conf
...
[swp1]
udp_ttl 1
hybrid_e2e 1
masterOnly 0
delay_mechanism E2E
network_transport RAWUDPv6
G.8275.portDS.localPriority 120
...
cumulus@switch:~$ sudo systemctl restart ptp4l.service
显示配置文件设置
要显示当前 PTP 配置文件设置,请运行 nv show service ptp <ptp-instance>
命令
cumulus@switch:~$ nv show service ptp 1
operational applied description
--------------------------- ----------- ------------------ --------------------------------------------------------------------
enable on on Turn the feature 'on' or 'off'. The default is 'off'.
current-profile default-itu-8275-1 Current PTP profile index
domain 24 0 Domain number of the current syntonization
ip-dscp 46 46 Sets the Diffserv code point for all PTP packets originated locally.
priority1 128 128 Priority1 attribute of the local clock
priority2 128 128 Priority2 attribute of the local clock
...
要显示配置文件的设置,请运行 nv show service ptp <instance> profile <profile-name>
命令
cumulus@switch:~$ nv show service ptp 1 profile CUSTOM1
operational applied
--------------------------- ----------- ------------------
enable on
current-profile default-itu-8275-1
domain 0
ip-dscp 46
logging-level info
priority1 128
priority2 128
[acceptable-master]
monitor
max-offset-threshold 50
max-timestamp-entries 100
max-violation-log-entries 4
max-violation-log-sets 3
min-offset-threshold -50
path-delay-threshold 200
violation-log-interval 1
可选的可接受主时钟表
可接受主时钟表选项是一项安全功能,可防止恶意参与者冒充 Grand Master 时钟来接管 PTP 网络。要使用此功能,您需要在可接受主时钟表中配置已知 Grand Master 时钟的时钟 ID,并在 PTP 端口上设置可接受主时钟表选项。BMC 算法会检查 Announce 消息中收到的 Grand Master 时钟是否在此表中,然后再继续进行主时钟选择。Cumulus Linux 默认情况下在 PTP 端口上禁用此选项。
以下示例命令将 Grand Master 时钟 ID 24:8a:07:ff:fe:f4:16:06 添加到可接受主时钟表,并为 swp1 启用 PTP 可接受主时钟表选项
cumulus@switch:~$ nv set service ptp 1 acceptable-master 24:8a:07:ff:fe:f4:16:06
cumulus@switch:~$ nv config apply
您还可以为 Grand Master 配置备用优先级 1 值
cumulus@switch:~$ nv set service ptp 1 acceptable-master 24:8a:07:ff:fe:f4:16:06 alt-priority 2
要为 swp1 启用 PTP 可接受主时钟表选项
cumulus@switch:~$ nv set interface swp1 ptp acceptable-master on
cumulus@switch:~$ nv config apply
编辑 /etc/ptp4l.conf
文件的 Default interface options
部分,以添加 acceptable_master_clockIdentity 248a07.fffe.f41606
。
cumulus@switch:~$ sudo nano /etc/ptp4l.conf
...
#
# Default interface options
#
time_stamping hardware
[acceptable_master_table]
maxTableSize 16
acceptable_master_clockIdentity 248a07.fffe.f41606
...
您还可以为 Grand Master 配置备用优先级 1 值。
cumulus@switch:~$ sudo nano /etc/ptp4l.conf
...
#
# Default interface options
#
time_stamping hardware
[acceptable_master_table]
maxTableSize 16
acceptable_master_clockIdentity 248a07.fffe.f41606 2
要为 swp1 启用 PTP 可接受主时钟表选项,请在 [swp1]
下添加 acceptable_master on
。
...
# Default interface options
#
time_stamping hardware
# Interfaces in which ptp should be enabled
# these interfaces should be routed ports
# if an interface does not have an ip address
# the ptp4l will not work as expected.
[swp1]
udp_ttl 20
masterOnly 1
delay_mechanism E2E
acceptable_master on
...
重启 ptp4l
服务
cumulus@switch:~$ sudo systemctl restart ptp4l.service
可选的监控配置
Cumulus Linux 提供以下可选的 PTP 监控配置。
配置时钟时间戳和路径延迟阈值
Cumulus Linux 监控时钟时间戳和路径延迟是否超出阈值,并在 PTP 达到设定的阈值时生成计数器。您可以在 NVUE nv show
命令输出和日志消息中查看计数器。
您可以配置以下监控设置
命令 | 描述 |
---|---|
nv set service ptp <instance> monitor min-offset-threshold | 设置主时钟和从时钟时间之间允许的最小差异。您可以设置介于 -1000000000 和 0 纳秒之间的值。默认值为 -50 纳秒。 |
nv set service ptp <instance> monitor max-offset-threshold | 设置主时钟和从时钟时间之间允许的最大差异。您可以设置介于 0 和 1000000000 纳秒之间的值。默认值为 50 纳秒。 |
nv set service ptp <instance> monitor path-delay-threshold | 设置 PTP 数据包在主时钟和从时钟之间传输的平均时间。您可以设置介于 0 和 1000000000 纳秒之间的值。默认值为 200 纳秒。 |
nv set service ptp <instance> monitor max-timestamp-entries | 设置允许的最大时间戳条目数。Cumulus Linux 持续更新时间戳。您可以指定介于 100 和 200 之间的值。默认值为 100 个条目。 |
以下示例将最小偏移阈值设置为 -1000,最大偏移阈值设置为 1000,路径延迟阈值设置为 300
cumulus@switch:~$ nv set service ptp 1 monitor min-offset-threshold -1000
cumulus@switch:~$ nv set service ptp 1 monitor max-offset-threshold 1000
cumulus@switch:~$ nv set service ptp 1 monitor path-delay-threshold 300
cumulus@switch:~$ nv config apply
您可以在 /etc/ptp4l.conf
文件中手动配置以下监控设置。请务必运行 sudo systemctl restart ptp4l.service
以应用设置。
参数 | 描述 |
---|---|
offset_from_master_min_threshold | 设置主时钟和从时钟时间之间允许的最小差异。您可以设置介于 -1000000000 和 0 纳秒之间的值。默认值为 -50 纳秒。 |
offset_from_master_max_threshold | 设置主时钟和从时钟时间之间允许的最大差异。您可以设置介于 0 和 1000000000 纳秒之间的值。默认值为 50 纳秒。 |
mean_path_delay_threshold | 设置 PTP 数据包在主时钟和从时钟之间传输的平均时间。您可以设置介于 0 和 1000000000 纳秒之间的值。默认值为 200 纳秒。 |
以下示例将最小偏移阈值设置为 -1000,最大偏移阈值设置为 1000,路径延迟阈值设置为 300
cumulus@switch:~$ sudo nano /etc/ptp4l.conf
...
[global]
#
# Default Data Set
#
slaveOnly 0
priority1 128
priority2 128
domainNumber 0
twoStepFlag 1
dscp_event 46
dscp_general 46
offset_from_master_min_threshold -1000
offset_from_master_max_threshold 1000
mean_path_delay_threshold 300
...
配置 PTP 日志记录
日志集包含不同时间时钟时间戳和路径延迟违规的日志条目。您可以设置要记录的条目数以及连续违规日志之间的间隔。
命令 | 描述 |
---|---|
nv set service ptp 1 monitor max-violation-log-sets | 设置允许的最大日志集数。您可以指定介于 2 和 4 之间的值。默认值为 3。 |
nv set service ptp 1 monitor max-violation-log-entries | 设置一个日志集中允许的最大日志条目数。您可以指定介于 4 和 8 之间的值。默认值为 4。 |
nv set service ptp 1 monitor violation-log-interval | 设置等待多少秒后记录背靠背违规。您可以指定介于 0 和 60 之间的值。默认值为 1。 |
以下示例将允许的最大日志集数设置为 4,将允许的最大日志条目数设置为 6,并将违规日志间隔设置为 10
cumulus@switch:~$ nv set service ptp 1 monitor max-violation-log-sets 4
cumulus@switch:~$ nv set service ptp 1 monitor max-violation-log-entries 6
cumulus@switch:~$ nv set service ptp 1 monitor violation-log-interval 10
cumulus@switch:~$ nv config apply
您可以在 /etc/ptp4l.conf
文件中手动配置以下监控设置。请务必运行 sudo systemctl restart ptp4l.service
以应用设置。
参数 | 描述 |
---|---|
tsmonitor_num_log_sets | 设置允许的最大日志集数。您可以指定介于 2 和 4 之间的值。默认值为 3。 |
tsmonitor_num_log_entries | 设置一个日志集中允许的最大日志条目数。您可以指定介于 4 和 8 之间的值。默认值为 4。 |
tsmonitor_log_wait_seconds | 设置等待多少秒后记录背靠背违规。您可以指定介于 0 和 60 之间的值。默认值为 1。 |
以下示例将允许的最大日志集数设置为 4,将允许的最大日志条目数设置为 6,并将违规日志间隔设置为 10
cumulus@switch:~$ sudo nano /etc/ptp4l.conf
...
[global]
#
# Default Data Set
#
slaveOnly 0
priority1 128
priority2 128
domainNumber 0
twoStepFlag 1
dscp_event 46
dscp_general 46
offset_from_master_min_threshold -50
offset_from_master_max_threshold 50
mean_path_delay_threshold 300
tsmonitor_num_ts 100
tsmonitor_num_log_sets 4
tsmonitor_num_log_entries 6
tsmonitor_log_wait_seconds 10
...
显示 PTP 日志
PTP 监控提供命令来显示违规计数器以及违规的时间戳日志条目。
命令 | 描述 |
---|---|
nv show service ptp <instance> monitor timestamp-log | 显示最近 25 个 PTP 时间戳。 |
nv show service ptp <instance> monitor violations | 显示阈值违规计数以及特定类型违规的上次发生时间。 |
nv show service ptp 1 monitor violations log acceptable-master | 显示当不在可接受主时钟表中的 PTP 服务器发送 Announce 请求时发生的违规日志。 |
nv show service ptp 1 monitor violations log forced-master | 显示当强制主时钟端口获得更高时钟时发生的违规日志。 |
nv show service ptp 1 monitor violations log max-offset | 显示当时间戳偏移高于最大偏移阈值时发生的违规日志。 |
nv show service ptp 1 monitor violations log min-Offset | 显示当时间戳偏移低于最小偏移阈值时发生的违规日志。 |
nv show service ptp 1 monitor violations log path-delay | 显示当平均路径延迟高于路径延迟阈值时发生的违规日志。 |
以下示例显示阈值违规计数以及上次发生最小偏移阈值违规的时间
cumulus@switch:~$ nv show service ptp 1 monitor violations
operational applied
---------------- --------------------------- -------
last-max-offset
last-min-offset 2023-04-24T15:22:01.312295Z
last-path-delay
max-offset-count 0
min-offset-count 2
path-delay-count 0
清除 PTP 违规日志
- 要清除最大偏移违规日志,请运行
nv action clear service ptp <instance> monitor violations log max-offset
命令。 - 要清除最小偏移违规日志,请运行
nv action clear service ptp <instance> monitor violations log min-offset
命令。 - 要清除路径延迟违规日志,请运行
nv action clear service ptp <instance> monitor violations log path-delay
命令。
cumulus@leaf01:mgmt:~$ nv action clear service ptp 1 monitor violations log path-delay
Action succeeded
删除 PTP 配置
要删除 PTP 配置,请删除 PTP 主时钟和从时钟接口。以下示例命令删除 PTP 接口 swp1
、swp2
和 swp3
。
cumulus@switch:~$ nv unset interface swp1 ptp
cumulus@switch:~$ nv unset interface swp2 ptp
cumulus@switch:~$ nv unset interface swp3 ptp
cumulus@switch:~$ nv config apply
编辑 /etc/ptp4l.conf
文件以从 Default interface options
部分删除接口,然后重启 ptp4l
服务。
cumulus@switch:~$ sudo nano /etc/ptp4l.conf
...
# Default interface options
#
time_stamping hardware
# Interfaces in which ptp should be enabled
# these interfaces should be routed ports
# if an interface does not have an ip address
# the ptp4l will not work as expected.
cumulus@switch:~$ sudo systemctl restart ptp4l.service
要在交换机上禁用 PTP 并停止 ptp4l
和 phc2sys
进程
cumulus@switch:~$ nv set service ptp 1 enable off
cumulus@switch:~$ nv config apply
cumulus@switch:~$ sudo systemctl stop ptp4l.service phc2sys.service
cumulus@switch:~$ sudo systemctl disable ptp4l.service phc2sys.service
故障排除
显示 PTP 配置
要显示交换机上 PTP 配置的摘要,请运行 nv show service ptp <instance>
命令
cumulus@switch:~$ nv show service ptp 1
operational applied
--------------------------- ----------- ------------------
enable on on
current-profile default-itu-8275-2
domain 0
ip-dscp 46
logging-level info
priority1 128
priority2 128
[acceptable-master]
monitor
max-offset-threshold 50
max-timestamp-entries 100
max-violation-log-entries 4
max-violation-log-sets 2
min-offset-threshold -50
path-delay-threshold 200
violation-log-interval 1
[profile] abc
[profile] default-1588
[profile] default-itu-8275-1
[profile] default-itu-8275-2
[unicast-master] 1
[unicast-master] 2
[unicast-master] 3
[unicast-master] 4
...
您可以使用以下 nv show service ptp <instance>
命令向下钻取
nv show service ptp <instance> acceptable-master
显示可接受主时钟配置。nv show service ptp <instance> clock-quality
显示时钟质量状态。nv show service ptp <instance> current
显示在 PTP 消息交换期间学习到的本地状态。nv show service ptp <instance> domain
显示域配置。nv show service ptp <instance> ip-dscp
显示 PTP DSCP 配置。nv show service ptp <instance> monitor
显示 PTP 监控配置。nv show service ptp <instance> profile
显示 PTP 配置文件配置。nv show service ptp <instance> parent
显示在 PTP 消息交换期间学习到的本地状态。nv show service ptp <instance> priority1
显示 PTP priority1 配置。nv show service ptp <instance> priority2
显示 PTP priority2 配置。nv show service ptp <instance> status
显示所有 PTP 接口的状态。nv show service ptp <instance> time-properties
显示时钟时间属性。nv show service ptp <instance> unicast-master
显示单播主时钟配置。
显示 PTP 接口配置
要检查 PTP 接口的配置,请运行 nv show interface <interface> ptp
命令。
cumulus@switch:~$ nv show interface swp1 ptp
operational applied description
------------------------- ----------- ---------- ----------------------------------------------------------------------
enable on Turn the feature 'on' or 'off'. The default is 'off'.
acceptable-master off Determines if acceptable master check is enabled for this interface.
delay-mechanism end-to-end end-to-end Mode in which PTP message is transmitted.
forced-master off off Configures PTP interfaces to forced master state.
instance 1 PTP instance number.
mixed-multicast-unicast off Enables Multicast for Announce, Sync and Followup and Unicast for D...
transport ipv4 ipv4 Transport method for the PTP messages.
ttl 1 1 Maximum number of hops the PTP messages can make before it gets dro...
unicast-request-duration 300 The service time in seconds to be requested during discovery.
timers
announce-interval 0 0 Mean time interval between successive Announce messages. It's spec...
announce-timeout 3 3 The number of announceIntervals that have to pass without receipt o...
delay-req-interval -3 -3 The minimum permitted mean time interval between successive Delay R...
sync-interval -3 -3 The mean SyncInterval for multicast messages. It's specified as a...
peer-mean-path-delay 0 An estimate of the current one-way propagation delay on the link wh...
port-state master State of the port
protocol-version 2 The PTP version in use on the port
显示 PTP 计数器
要显示所有 PTP 计数器,请运行 nv show service ptp <instance> counters
命令
cumulus@switch:~$ nv show service ptp 1 counters
Packet Type Received Transmitted
--------------------- ------------ ------------
Port swp4
Announce 0 10370
Sync 0 20731
Follow-up 0 20731
Delay Request 0 0
Delay Response 0 0
Peer Delay Request 0 0
Peer Delay Response 0 0
Management 0 0
Signaling 0 0
要显示接口的 PTP 计数器,请运行 nv show interface <interface> counters ptp
命令。
要清除接口的 PTP 计数器,请运行 nv action clear interface <interface> counters ptp
命令
cumulus@switch:~$ nv action clear interface swp1 counters ptp
Action succeeded
显示所有 PTP 接口的状态
要显示所有 PTP 接口的状态,请运行 nv show service ptp <instance> status
命令。命令输出显示 PTP 启用的端口、PTP 端口模式(单播或多播)、基于 BMCA 的端口状态、单播状态,并标识客户端连接到的服务器地址。
cumulus@switch:~$ nv show service ptp 1 status
Port Mode State Ustate Server
----- ----- ------- ------------------------------- -------
swp9 Ucast SLAVE Sync and Delay Granted (H_SYDY) 9.9.9.2
swp10 Ucast PASSIVE Initial State (WAIT)
swp11 Ucast PASSIVE Initial State (WAIT)
swp12 Ucast PASSIVE Initial State (WAIT)
显示 NVUE PTP 命令列表
- 要查看 PTP 的 NVUE show 命令的完整列表,请运行
nv list-commands service ptp
命令。 - 要显示 PTP 接口的 show 命令的完整列表,请运行
nv list-commands | grep 'nv show interface <interface-id> ptp'
命令。
cumulus@switch:~$ nv list-commands service ptp
nv show service ptp
nv show service ptp <instance-id>
nv show service ptp <instance-id> status
nv show service ptp <instance-id> domain
nv show service ptp <instance-id> priority1
nv show service ptp <instance-id> priority2
nv show service ptp <instance-id> ip-dscp
nv show service ptp <instance-id> acceptable-master
...
cumulus@switch:~$ nv list-commands | grep 'nv show interface <interface-id> ptp'
...
nv show interface <interface-id> ptp
nv show interface <interface-id> ptp timers
nv show interface <interface-id> ptp shaper
...
配置示例
在以下示例中,交换机上的边界时钟从 PTP 从端口 swp1 上的 Master 1(Grand Master)接收时间,设置其时钟,并通过 PTP 主端口 swp2、swp3 和 swp4 将时间向下传递到接收时间的主机。

以下示例配置假定您已配置要用于 PTP 的三层路由接口(swp1
、swp2
、swp3
和 swp4
)。
cumulus@switch:~$ nv set service ptp 1 enable on
cumulus@switch:~$ nv set service ptp 1 priority2 254
cumulus@switch:~$ nv set service ptp 1 priority1 254
cumulus@switch:~$ nv set service ptp 1 domain 3
cumulus@switch:~$ nv set interface swp1 ptp enable on
cumulus@switch:~$ nv set interface swp2 ptp enable on
cumulus@switch:~$ nv set interface swp3 ptp enable on
cumulus@switch:~$ nv set interface swp4 ptp enable on
cumulus@switch:~$ nv config apply
cumulus@switch:~$ sudo cat /etc/nvue.d/startup.yaml
- set:
interface:
lo:
ip:
address:
10.10.10.1/32: {}
type: loopback
swp1:
ptp:
enable: on
type: swp
swp2:
ptp:
enable: on
type: swp
swp3:
ptp:
enable: on
type: swp
swp4:
ptp:
enable: on
type: swp
service:
ptp:
'1':
domain: 3
enable: on
priority1: 254
priority2: 254
cumulus@switch:~$ sudo cat /etc/ptp4l.conf
...
[global]
#
# Default Data Set
#
slaveOnly 0
priority1 254
priority2 254
domainNumber 3
twoStepFlag 1
dscp_event 46
dscp_general 46
offset_from_master_min_threshold -50
offset_from_master_max_threshold 50
mean_path_delay_threshold 200
tsmonitor_num_ts 100
tsmonitor_num_log_sets 2
tsmonitor_num_log_entries 4
tsmonitor_log_wait_seconds 1
#
# Run time options
#
logging_level 6
path_trace_enabled 0
use_syslog 1
verbose 0
summary_interval 0
#
# servo parameters
#
pi_proportional_const 0.000000
pi_integral_const 0.000000
pi_proportional_scale 0.700000
pi_proportional_exponent -0.300000
pi_proportional_norm_max 0.700000
pi_integral_scale 0.300000
pi_integral_exponent 0.400000
pi_integral_norm_max 0.300000
step_threshold 0.000002
first_step_threshold 0.000020
max_frequency 900000000
sanity_freq_limit 0
#
# Default interface options
#
time_stamping hardware
# Interfaces in which ptp should be enabled
# these interfaces should be routed ports
# if an interface does not have an ip address
# the ptp4l will not work as expected.
[swp1]
udp_ttl 1
masterOnly 0
delay_mechanism E2E
network_transport RAWUDPv4
[swp2]
udp_ttl 1
masterOnly 0
delay_mechanism E2E
network_transport RAWUDPv4
[swp3]
udp_ttl 1
masterOnly 0
delay_mechanism E2E
network_transport RAWUDPv4
[swp4]
udp_ttl 1
masterOnly 0
delay_mechanism E2E
network_transport RAWUDPv4
注意事项
PTP 版本
Cumulus Linux 使用符合 PTP v2.1 标准的 linuxptp
软件包,并在配置中默认将主 PTP 版本设置为 2,次要 PTP 版本设置为 1。如果当次要版本设置后您的 PTP 配置无法正常工作,您可以将次要版本更改为 0。
cumulus@switch:~$ nv set service ptp 1 force-version 2.0
cumulus@switch:~$ nv config apply
要将次要 PTP 版本设置回默认值,请运行 nv unset service ptp 1 force-version
命令。
编辑 /etc/ptp4l.conf
文件以将 ptp_minor_version 0
添加到 Global
部分,然后重启 ptp4l
服务。
cumulus@switch:~$ sudo nano /etc/ptp4l.conf
...
[global]
#
# Default Data Set
#
slaveOnly 0
priority1 128
priority2 128
domainNumber 0
twoStepFlag 1
dscp_event 46
dscp_general 46
ptp_minor_version 0
cumulus@switch:~$ sudo systemctl restart ptp4l.service
要将次要 PTP 版本设置回默认值 (1),请从 /etc/ptp4l.conf
文件的 Global
部分删除 ptp_minor_version 0
,然后重启 ptp4l
服务。
要显示 PTP 次要版本现在为 0,请运行 nv show service ptp <instance> force-version
命令
cumulus@switch:~$ nv show service ptp 1 force-version
applied
------------- -------
force-version 2.0
PTP 流量整形
为了提高 NVIDIA Spectrum 1 交换机上速度低于 100G 的启用 PTP 端口的性能,您可以启用预定义的流量整形配置文件。例如,如果您看到 PTP 时序偏移变化很大且不稳定,请在所有启用 PTP 的端口上启用 PTP 整形,以稍微降低端口上的带宽并提高时序稳定性。
带有 Spectrum-2 及更高版本的交换机不支持 PTP 整形。
Bonds 不支持 PTP 整形。
您不能在同一端口上配置 QoS 流量整形 和 PTP 流量整形。
您必须为 PTP 流量配置 严格优先级;例如
cumulus@switch:~$ nv set qos egress-scheduler default-global traffic-class 0-5,7 mode dwrr cumulus@switch:~$ nv set qos egress-scheduler default-global traffic-class 0-5,7 bw-percent 12 cumulus@switch:~$ nv set qos egress-scheduler default-global traffic-class 6 mode strict
对于您要设置流量整形的每个启用 PTP 的端口,运行 nv set interface <interface> ptp shaper enable on
命令。
cumulus@switch:~$ nv set interface swp1 ptp shaper enable on
cumulus@switch:~$ nv set interface swp2 ptp shaper enable on
cumulus@switch:~$ nv config apply
要查看接口的 PTP 整形设置,请运行 nv show interface <interface> ptp shaper
命令
cumulus@switch:~$ nv show interface swp1 ptp shaper
operational applied
------ ----------- -------
enable on
在 /etc/cumulus/switchd.d/ptp_shaper.conf
文件中,为您要应用流量整形的接口设置以下参数,并启用流量整形器。您必须重新加载 switchd
才能使更改生效。
cumulus@switch:~$ sudo nano /etc/cumulus/switchd.d/ptp_shaper.conf
## Per-port configuration for PTP shaper
ptp_shaper.port_group_list = [enable-group]
ptp_shaper.enable-group.port_set = swp1,swp2
ptp_shaper.enable-group.ptp_shaper_enable = true
cumulus@switch:~$ sudo systemctl reload switchd.service
生成树和 PTP
PTP 帧受 STP 过滤的影响;事件(例如 STP 拓扑更改(其中端口暂时进入阻塞状态))可能会导致 PTP 通信中断。
如果您在网桥端口上配置 PTP,NVIDIA 建议网桥端口为生成树边缘端口,或者位于禁用生成树的网桥域中。