时钟同步软件ptp4l简介、安装、使用
摘自:
一、ptp4l简介
ptp4l 是 Linux 下的一个开源软件,是 IEEE 1588 Precision Time Protocol (PTP) 实现之一。它的功能是通过网络同步多个系统的时钟,并提供高精度的时间戳。下面分别解释其概念、实现功能、优缺点、应用场景。
概念:
PTP 是一种网络协议,用于在分布式系统中实现时钟同步。ptp4l (PTPv2 Linux implementation)是一个 PTP 协议的实现,支持 PTPv2 协议、时钟精度等级(clock precision)选择、延迟补偿等功能。其可以通过网络同步多个 PTP 节点的时钟,并提供高精度的时间戳。
实现功能:
ptp4l 常用于实现时钟同步和高精度时间戳,可以用于音视频同步、数据采集与处理、金融交易、电力系统同步、工业控制等领域。它提供以下主要功能:
-
实现时钟同步:ptp4l 可以通过协议同步多个节点的时钟,以达到高精度的时间同步。
-
提供高精度时间戳:ptp4l 可以为接收到的数据进行时间戳,并且提供子纳秒级别的时间精度。
-
支持不同精度等级:ptp4l 可以支持不同的时钟精度等级,以达到更高精度的时钟同步。
-
支持延迟补偿:ptp4l 可以诊断网络延迟,并根据延迟对时钟进行补偿。
优点:
-
高精度:ptp4l 提供子纳秒级别的时间精度,可满足对时间精度要求较高的场景。
-
可扩展性:ptp4l 可以通过协议同步多个节点的时钟,可以扩展到分布式系统中。
-
灵活性:ptp4l 可以通过配置不同的时钟精度等级、延迟补偿等参数,以适应不同的应用场景。
缺点:
-
受限于硬件支持:ptp4l 的时间同步精度受限于硬件支持,如果硬件不支持高精度时钟同步,则精度会受到限制。
-
依赖于网络:ptp4l 通过网络实现时钟同步,因此受网络延迟、带宽等因素的影响。
二、应用场景:
ptp4l 主要应用于需要高精度时钟同步的场景,如音视频同步、数据采集与处理、金融交易、电力系统同步、工业控制等领域。在这些场景中,需要对不同系统中的时钟进行同步,以达到高精度和一致性,从而保证系统的稳定性和正常运行。
以下是在 CentOS 7 上安装和使用 LinuxPTP 的简要步骤:
-
打开终端,使用以下命令安装 LinuxPTP:
sudo yum install linuxptp
-
验证 LinuxPTP 是否已成功安装。在终端中输入以下命令:
ptp4l -v
如果显示 LinuxPTP 版本号,则表示安装成功。
-
配置 LinuxPTP。在终端中输入以下命令:
sudo nano /etc/ptp4l.conf
打开配置文件并根据需要进行更改。例如,您可以更改时钟设置、物理网络接口、PTP 网络接口等。
-
启动 LinuxPTP。在终端中输入以下命令:
[root@localhost ~]# ptp4l -i enp1s0 -f /etc/ptp4l.conf -m ptp4l[519569.670]: selected /dev/ptp0 as PTP clock ptp4l[519569.672]: port 1: INITIALIZING to LISTENING on INIT_COMPLETE ptp4l[519569.672]: port 0: INITIALIZING to LISTENING on INIT_COMPLETE ptp4l[519577.354]: port 1: LISTENING to MASTER on ANNOUNCE_RECEIPT_TIMEOUT_EXPIRES ptp4l[519577.354]: selected local clock 001b21.fffe.c4522a as best master ptp4l[519577.354]: assuming the grand master role
这将启动 PTP 守护程序并将其配置为使用 eth0 接口,以 /etc/linuxptp/ptp4l.conf 中指定的设置运行。
-
检查时钟同步情况。在终端中输入以下命令:
[root@localhost ~]# phc2sys -s enp1s0 -w CLOCK_REALTIME -m phc2sys[519870.160]: CLOCK_REALTIME phc offset -172 s0 freq +44777 delay 749 phc2sys[519871.161]: CLOCK_REALTIME phc offset -177 s2 freq +44772 delay 758 phc2sys[519872.161]: CLOCK_REALTIME phc offset -173 s2 freq +44599 delay 758 phc2sys[519873.161]: CLOCK_REALTIME phc offset -25 s2 freq +44695 delay 743 phc2sys[519874.161]: CLOCK_REALTIME phc offset 44 s2 freq +44757 delay 745 phc2sys[519875.161]: CLOCK_REALTIME phc offset 34 s2 freq +44760 delay 751 phc2sys[519876.162]: CLOCK_REALTIME phc offset 61 s2 freq +44797 delay 745 phc2sys[519877.162]: CLOCK_REALTIME phc offset 42355 s2 freq +87109 delay 749 phc2sys[519878.162]: CLOCK_REALTIME phc offset 122 s2 freq +57583 delay 757 phc2sys[519879.162]: CLOCK_REALTIME phc offset -12775 s2 freq +44722 delay 745 phc2sys[519880.162]: CLOCK_REALTIME phc offset -12753 s2 freq +40912 delay 754 phc2sys[519881.163]: CLOCK_REALTIME phc offset -8903 s2 freq +40936 delay 744
这将将 PHC(Ptp Hardware Clock)与真实时钟同步,从而确保时钟同步。
以上是在 CentOS 7 上安装和使用 LinuxPTP 的基本步骤,实际上,您还需要了解更多关于 LinuxPTP 的详细配置和使用方法,以确保系统正常运行。
常用参数
ptp4l 常用参数含义如下:
usage: ptp4l [OPTION]... [INTERFACE]... ptp4l is an implementation of the Precision Time Protocol (PTP) according to IEEE standard 1588 for Linux. PTP is used to synchronize the clocks of devices over a network. ptp4l, in conjunction with phc2sys, can be used to synchronize the system clock to an external PTP clock. OPTION list: -C, --config-file load configuration from file -g, --global-override enable global override of settings in configuration files -i, --interface specify an interface to use -m, --management enable the PTP management messages -p, --priority select the priority1 and priority2 for PTP port -s, --step-seconds step the clock if offset is greater than given seconds -A, --announce-interval interval in seconds between sending announce messages -D, --drift-threshold drift threshold for the clock in seconds per second (default 1e-6) -G, --domain specify PTP domain number (default 0) -H, --pdelay-req-hops number of hops for pdelay-req messages (default 1) -I, --init-delay initial delay before sending first announce message (seconds) -M, --max-adjustable-offset the maximum offset the clock can be adjusted in seconds -O, --outlier-threshold specify outlier threshold for the clock discipline -P, --phc2sys enable phc2sys compatibility mode -Q, --ptpengine-debug output debug information for ptpengine (use multiple times for more detail) -R, --hw-timestamps use hardware timestamps instead of software -S, --src-addr specify source IPv4 or IPv6 address (receiver mode only) -T, --unicast-address specify unicast destination address instead of multicast -U, --user-description specify user description for PTP port -V, --version print version number and exit -W, --override-offset-allowed override the offset if the difference is outside acceptable limits (default false) -X, --set-timeout specify timeout in milliseconds for message receptions -Y, --sync-rate-limit limit the number of sync messages propagated per second -Z, --pid-file write the PID of ptp4l to a file -d, --debug-level output debugging information (use multiple times for more detail) -f, --foreground stay in foreground and output messages to stdout -h, --help display this help and exit -l, --lock-file lock file used for PID file (default /var/run/ptp4l.lock) -o, --one-step enable the one-step clock mode -r, --priority1 specify PTP priority1 value (default 128) -t, --priority2 specify PTP priority2 value (default 0) -u, --unicast-dest specify unicast destination for PTP messages -v, --verbose output verbose messages See the ptp4l(8) man page for more information.
其中一些常用的参数的使用方法如下:
-C, --config-file
: 指定配置文件的位置,例如-C /etc/ptp4l.conf
。-i, --interface
: 指定要使用的接口名称,例如-i eth0
。-m, --management
: 启用 PTP 管理消息,例如-m
。-s, --step-seconds
: 如果时钟偏移大于给定的秒数,则步进时钟,例如-s 1
。-A, --announce-interval
: 指定发送 announce 消息的间隔时间,例如-A 30
。-M, --max-adjustable-offset
: 指定时钟可以调整的最大偏移量,例如-M 0.1
。-Q, --ptpengine-debug
: 输出 ptpengine 的调试信息。您可以使用多次-Q
选项来获取更多的调试信息,例如-Q -Q -Q
。-d, --debug-level
: 输出调试信息,使用多个-d
选项可以获取更详细的调试信息,例如-d -d -d
。-f, --foreground
: 以前台进程方式运行,将消息输出到标准输出中,例如-f
。-h, --help
: 显示帮助信息,例如-h
。-v, --verbose
: 打印详细的消息,例如-v
。
这些参数的使用方法可以结合具体的应用场景来确定。
[root@localhost ~]# ptp4l -h usage: ptp4l [options] Delay Mechanism -A Auto, starting with E2E -E E2E, delay request-response (default) -P P2P, peer delay mechanism Network Transport -2 IEEE 802.3 -4 UDP IPV4 (default) -6 UDP IPV6 Time Stamping -H HARDWARE (default) -S SOFTWARE -L LEGACY HW Other Options -f [file] read configuration from 'file' -i [dev] interface device to use, for example 'eth0' (may be specified multiple times) -p [dev] PTP hardware clock device to use, default auto (ignored for SOFTWARE/LEGACY HW time stamping) -s slave only mode (overrides configuration file) -t transparent clock -l [num] set the logging level to 'num' -m print messages to stdout -q do not print messages to the syslog -v prints the software version and exits -h prints this message and exits
主时钟:# ptp4l -i enp95 -m -H -2
从时钟:# ptp4l -i enp49 -m -H -s -2
说明:
ptp4l -i enp95 -m -H -2
:在网络接口 上使用硬件时间戳(-H
),以以太网协议(-2
)进行 PTP 同步,并将消息输出到标准输出(-m
)。ptp4l -i enp49 -m -H -s -2
:在网络接口上使用硬件时间戳(-H
),以以太网协议(-2
)进行 PTP 同步,并且启用客户端同步模式(-s
),同时将消息输出到标准输出(-m
)
同步精度在+/- 100ns以内
附:报错:failed to create a clock
ptp4l[519360.082]: interface 'enp4s0' does not support requested timestamping mode failed to create a clock
这个错误通常出现在 Linux 系统上,表明 ptp4l 无法在指定的网络接口上启用 PTP 时间戳模式。可能的原因是:
-
网络接口不支持 PTP 时间戳模式。某些网络接口可能不支持硬件时间戳或软件时间戳,因此无法用于 PTP 同步。
-
没有足够的权限来启用 PTP 时间戳模式。在某些系统中,需要以管理员或特权用户身份运行 ptp4l,才能访问必要的系统资源。
为了解决这个问题,可以尝试以下步骤:
-
检查网络接口是否支持 PTP 时间戳模式。可以使用
ethtool
命令来查看网络接口是否支持硬件时间戳或软件时间戳。例如,使用以下命令查看enp4s0
网络接口的时间戳能力:sudo ethtool -T enp4s0
如果输出中包含
PTPv2(IEEE 1588)
,则表示该网络接口支持 PTP 时间戳模式。如果没有该选项,则表示网络接口不支持 PTP 时间戳模式。 -
确认当前用户是否具有足够的权限启用 PTP 时间戳模式。可以尝试使用
sudo
命令以管理员或特权用户身份运行 ptp4l。 -
如果确认网络接口支持 PTP 时间戳模式且当前用户具有足够的权限,但仍然遇到该错误,请尝试升级系统内核或驱动程序,以确保网络接口驱动程序支持 PTP 时间戳模式。
希望以上步骤可以帮助您解决这个问题。
接口不支持PTP时间戳模式:
接口支持PTP时间戳模式:
IEEE 1588
IEEE 1588,通常被称为 精确时间协议(PTP, Precision Time Protocol),是由 IEEE 1588标准规定的一种网络时间同步协议。它旨在通过以太网等网络为基础,在计算机和通信设备中实现高精度的时间同步。IEEE 1588可以在局域网(LAN)中,甚至是广域网(WAN)中提供高精度的时钟同步,尤其是在那些需要精确时间同步的应用场景中。
IEEE 1588的主要特点
-
高精度时钟同步: IEEE 1588协议能够实现微秒甚至纳秒级别的时钟同步,具体精度取决于网络的质量、硬件支持以及配置等因素。与传统的基于网络的时钟同步方法(如NTP)相比,IEEE 1588提供了更高的时间同步精度。
-
主从结构: IEEE 1588采用主从模式来进行时间同步。网络中的一个设备被指定为主时钟(Grandmaster Clock),其他设备作为从时钟(Slave Clocks)进行同步。主时钟提供精确的时间信息,从时钟则根据主时钟的时间调整自身的时钟。
-
时钟同步算法: IEEE 1588采用了基于交换时间戳的算法来实现高精度的时钟同步。交换的时间戳通常包括:
- Sync消息:主时钟向从时钟发送同步消息,通知从时钟当前的时间。
- Follow_Up消息:主时钟如果无法在同步消息中提供精确的发送时间,会单独发送跟进消息来补充发送时间戳。
- Delay_Req消息:从时钟向主时钟发送请求,测量往返时延。
- Delay_Resp消息:主时钟回应从时钟的延迟请求。
-
网络延迟补偿: 在传统的时钟同步方法中,网络延迟常常会影响同步精度。而IEEE 1588协议通过测量消息在网络中传播的时间,能在时钟同步过程中进行网络延迟的补偿。通过交换多个时间戳,协议能精确估算出延迟,并且对其进行校正。
-
层级结构与多层时钟同步: IEEE 1588协议支持多层次的时钟同步结构。比如,一个网络中可以有多个从时钟,而这些从时钟可以进一步成为其他从时钟的主时钟,从而实现多级的精确时间同步。
IEEE 1588标准的版本
-
IEEE 1588-2002(PTP v1):这是最早的版本,主要解决了局域网内的时间同步问题。它规定了精确时间同步的基本框架,但对网络延迟的补偿和精度的提升有一定的限制。
-
IEEE 1588-2008(PTP v2):这是改进后的版本,对原有协议进行了优化,加入了更多的特性,如:
- 精确的时间戳算法
- 支持更多的时钟类型(如Boundary Clocks、Transparent Clocks)
- 支持多层次的时钟同步和更高的网络延迟补偿机制
- 提供更好的容错性和稳定性
IEEE 1588的应用
IEEE 1588的高精度时钟同步特性使其在许多领域中得到了广泛应用,特别是在那些要求精确时间同步的工业、科研和商业场景中。常见的应用包括:
-
工业自动化与控制系统: 在一些分布式控制系统中,多个控制设备需要在微秒级别同步时间,以确保它们的协同工作。例如,机器人控制、生产线的自动化控制等。
-
通信系统: 在移动通信、光纤网络、5G网络等领域,IEEE 1588用于确保基站之间和网络设备之间的时间同步,以支持数据传输的时延控制、流量管理和协调。
-
电力系统: 在电力网络中,特别是智能电网中,精确的时间同步对于保护设备的协调性、故障检测以及事件的记录至关重要。
-
金融系统: 在金融交易系统中,时间的精确同步对于确保交易的准确记录、执行顺序以及合规性至关重要。IEEE 1588被用于高频交易、交易时钟的同步等场景。
-
音视频同步: 在音视频流的传输中,尤其是在广播和直播领域,IEEE 1588被用来保持音视频数据流的精确同步,避免因时差导致音视频不同步的问题。
设备支持与硬件加速
为了达到纳秒级别的时间同步精度,IEEE 1588协议通常需要专门的硬件支持。许多网络设备和芯片(如交换机、网卡、路由器等)支持IEEE 1588协议的硬件加速。通过硬件时间戳、精确的时钟同步机制和延迟补偿技术,能够大大提高同步精度,减少由软件引入的误差。
报文流程图
报文说明
在 精密时间协议(PTP,IEEE 1588) 中,通信过程中使用不同类型的报文来同步主时钟和从时钟。每种报文类型都有其特定的功能和作用。以下是 PTP 报文的类型、说明以及作用的表格:
报文类型 | 说明 | 作用 |
---|---|---|
Sync | 主时钟发送的同步报文,包含主时钟的当前时间戳。 | 从时钟通过此报文获取主时钟的时间戳,并根据收到的同步信息来校正自己的时钟。 |
Follow_Up | 仅在 2-step 模式下使用,主时钟发送的跟随报文,提供 Sync 报文中时间戳的精确值。 | 用于修正由于传输延迟引起的 Sync 报文时间戳误差。它提供了主时钟发出 Sync 报文时的准确时间戳,使从时钟能够准确同步。 |
Delay_Req | 从时钟发送的延迟请求报文,用于测量从时钟到主时钟的单程延迟。 | 通过请求报文,向主时钟询问从时钟与主时钟之间的网络延迟。该报文是同步过程的一部分,帮助从时钟计算与主时钟的时钟偏差。 |
Delay_Resp | 主时钟响应从时钟的延迟请求报文,包含主时钟的时间戳。 | 主时钟返回此报文以告知从时钟延迟请求的时间。通过该报文,从时钟可以计算出从时钟到主时钟的单程延迟,从而补偿网络传输延迟。 |
PDelay_Req | 使用于点对点(peer-to-peer)通信的延迟请求报文。 | 点对点网络中的设备通过此报文交换时间戳来测量延迟,帮助两个设备测量彼此之间的延迟并进行时钟同步。 |
PDelay_Resp | 点对点通信中的延迟请求响应报文,回应 PDelay_Req 报文,包含发送此报文的设备的时间戳。 | 在点对点的时钟同步过程中,响应对方的延迟请求报文,帮助计算从时钟到主时钟的单程延迟。 |
PDelay_Resp_Follow_Up | 点对点模式中的跟随报文,提供 PDelay_Resp 报文的精确时间戳。 | 该报文修正 PDelay_Resp 报文中的时间戳误差,用于高精度时钟同步。 |
Announce | 用于广播或多播的报文,包含主时钟的身份信息、优先级等。 | 用于在网络中宣布主时钟的存在,允许从时钟选择最佳主时钟来进行同步。 |
Sync_Follow_Up | 用于支持主时钟与从时钟之间精确同步的补充报文,仅在某些高精度模式中使用。 | 提供与 Sync 报文相关的更多同步信息,用于进一步修正时间戳误差。 |
Management | 用于管理和配置 PTP 网络的报文,允许修改协议参数、查询状态等。 | 用于设备间配置 PTP 设置或获取网络状态信息,支持网络管理和调试。 |
Signaling | 用于 PTP 网络中设备之间的控制和信令通信,传递状态信息或警告。 | 用于设备间传递控制信号或状态更新信息,帮助管理和调节 PTP 网络的运行状态。 |
主要报文类型的作用
- Sync 和 Follow_Up:这两个报文是 PTP 中时钟同步的核心报文,通过它们主时钟和从时钟共享时间信息。
- Delay_Req 和 Delay_Resp:用于测量和补偿网络延迟,以保证精确同步。通过这两类报文,系统可以计算出单程延迟并调整时钟。
- Announce:用于主时钟的广播,使得从时钟能够选择最优的主时钟进行同步,尤其是在多主时钟环境下非常有用。
- PDelay_Req 和 PDelay_Resp:用于点对点同步,尤其是在网络拓扑结构为点对点的情况下。
1-step 模式与 2-step 模式的区别:
-
1-Step 模式:
- 在 1-step 模式 中,
Sync
报文直接携带主时钟的时间戳。同步操作只需要一次消息传递,即主时钟直接发送Sync
报文给从时钟,且时间戳信息在同一报文内传送。 - 优点:同步过程简化,降低了延迟和网络带宽需求。
- 缺点:由于时间戳是在
Sync
报文中传递,可能会存在更高的时钟漂移或误差,需要更高精度的时钟硬件支持。
- 在 1-step 模式 中,
-
2-Step 模式:
- 在 2-step 模式 中,
Sync
报文不包含时间戳,主时钟首先发送Sync
报文,然后通过单独的Follow_Up
报文来传递准确的时间戳。这样能够更精确地控制时间戳的传输。 - 优点:由于时间戳是在
Follow_Up
报文中传递,它能够提供更高的精度和准确性,尤其适合精密时钟同步。 - 缺点:同步过程需要两次消息传递,因此网络延迟和带宽使用量可能会增加。
- 在 2-step 模式 中,
OC(Ordinary Clock)、BC(Boundary Clock) 和 TC透明时钟(Transparent Clock) 三种时钟模式的对比说明:
时钟模式对比表
时钟模式 | 功能描述 | 优点 | 缺点 | 应用场景 |
---|---|---|---|---|
OC(普通时钟,Ordinary Clock) | 设备通过接收来自主时钟的同步信号(Sync 报文),调整自己的本地时钟。它在网络中充当从时钟角色。 |
- 配置简单,易于实现。<br> - 无需额外的硬件,只需要一个普通的时钟源即可。 | - 需要依赖主时钟进行同步。<br> - 可能受到传输延迟的影响,导致同步误差。 | - 在简单的网络结构中使用,通常作为从时钟。 |
BC(边界时钟,Boundary Clock) | 边界时钟不仅可以同步主时钟,还可以作为网络中的中介设备,为其他设备提供时间信号。它通过接收主时钟的同步信号并发送同步信号给其他设备。 | - 能够消除网络中的时钟同步误差,提供多路径同步。<br> - 支持多个子网络的时间同步。 | - 需要更多的硬件和配置。<br> - 增加网络中的复杂性和成本。 | - 在复杂网络或具有多个子网的环境中使用。 |
透明时钟(Transparent Clock) | 透明时钟不会提供时间同步,它通过修正同步报文在网络中的延迟,帮助提高网络同步精度。 | - 提高时间同步精度,减少延迟误差。<br> - 不需要参与时钟同步过程,简化了时钟同步架构。 | - 不能独立进行时钟同步,仅用于延迟补偿。<br> - 需要精确测量网络延迟,增加复杂性。 | - 在高性能网络(如数据中心)或需要低延迟同步的环境中使用。 |
详细说明
-
OC(普通时钟,Ordinary Clock):
- 功能:普通时钟(OC)通常是一个设备,它从网络中的主时钟接收同步信号并调整自己的时钟。这种模式下的设备充当从时钟角色,依赖于主时钟来同步自己的时间。
- 优点:配置简单,适用于小型网络和简单的同步需求。因为它不涉及复杂的硬件或额外的计算,所以成本较低。
- 缺点:由于是从时钟设备,它必须依赖主时钟进行同步,因此一旦主时钟出现故障,整个同步链条就会受到影响。还可能受到网络延迟的影响,导致时钟同步误差。
-
BC(边界时钟,Boundary Clock):
- 功能:边界时钟(BC)在网络中充当桥梁角色,能够接收来自上游主时钟的同步信号,并作为下游网络的时钟源,向其他设备提供时间同步服务。它可以在网络中消除时钟漂移和延迟。
- 优点:边界时钟能够处理网络中的多个路径和多个子网,使得大型复杂网络中的时间同步更加可靠。它支持多层次的同步,有助于在大型网络中确保时间的准确性。
- 缺点:与普通时钟相比,边界时钟的实现更为复杂,需要更多的硬件支持和配置。增加了网络的复杂性和成本。
-
透明时钟(Transparent Clock):
- 功能:透明时钟不参与时钟同步本身,而是在传输时间同步报文时,修正网络中的延迟,以提高时钟同步的精度。透明时钟通常位于网络的转发路径中,负责测量并补偿报文传输过程中的延迟。
- 优点:透明时钟通过减少延迟误差,能够显著提高同步精度。它不直接参与时钟同步,简化了时钟同步架构。适用于需要低延迟和高精度同步的网络环境。
- 缺点:透明时钟只能对网络中的延迟进行补偿,不能作为同步源本身,因此不能独立提供时间同步。它的实现较为复杂,需要精确测量和校准延迟。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2020-01-09 Python语法糖系列
2020-01-09 腾讯、阿里DNS地址
2020-01-09 python带有通用参数的通用装饰器
2020-01-09 python带参数的类装饰器
2019-01-09 c linux ping 实现