PTP4L使用方法速览

1. 了解 PTP

精确时间协议(PTP)是用于网络中同步时钟的协议。当与硬件支持结合使用时,PTP 能够达到亚微秒级的精度。为了达到最佳精度,建议 PTP 时钟之间的所有网络组件都启用 PTP 硬件支持。
linuxptp是根据IEEE-1588标准的一种PTPv2实际实现,包括ptp4l和phc2sys程序。

  • ptp4l 程序通过硬件时间戳将 PTP 硬件时钟与主时钟同步,或通过软件时间戳将系统时钟与主时钟同步;
  • phc2sys 实现系统时钟与网卡硬件时钟之间的同步(仅限硬件时间戳模式)。

2. 使用 PTP

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

使用 ethtool 程序验证驱动程序和网卡的时间戳功能,如下所示:

~] ethtool -T em3  #其中em3是对应的网卡名称
Time stamping parameters for em3:
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

2.2. 安装 PTP

以银河麒麟桌面版V10操作系统为例,建议使用离线包安装。
导入deb安装包,在安装包所在位置打开终端并执行以下命令:

~] sudo dpkg -i ./*.deb

也可以下载离线源码包,按照README文件进行编译和安装

2.3. 启动 PTP

以下为硬件时间戳模式的使用示例,实际的命令与参数选项请参考第3章。
使用前请确认网络连通,且已配置网关参数。
启动 ptp4l 与 phc2sys

~] sudo ptp4l -i em3 -H -s		#其中,em3为网卡名称
~] sudo phc2sys -a -r

查看程序后台运行状态

~] ps -ef | grep ptp4l
~] ps -ef | grep phc2sys

输出程序运行日志

~] sudo ptp4l -i em3 -H -s -m		#在终端中查看,自启动则输出到日志
~] sudo ptp4l -i em3 -H -s -m [logfile-path]	#日志重定向到日志文件
~] sudo phc2sys -a -r -m
~] sudo phc2sys -a -r -m -m [logfile-path]

日志输出示例及释义:
网卡上的 PTP 时钟与主设备同步时 ptp4l 的示例输出:

~] sudo ptp4l -i em3 -m  #其中em3是对应的网卡名称
selected em3 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 offset 值表示与主时钟之间的时间偏差(以纳秒为单位)。
  • s0、s1、s2 指示器显示时钟伺服的不同状态:s0 表示已解锁,s1 表示时钟步进,s2 表示已锁定。如果伺服处于已锁定状态 (s2),并且pi_offset_const 选项在配置文件中设置为负值,则时钟不会步进,而只会缓慢调整(有关详细信息,请参见 man 8 ptp4l)。
  • freq 值表示时钟的频率调整(以十亿分率 (ppb) 为单位)。
    path delay 值表示从主时钟发送的同步消息的预计延迟(以纳秒为单位),该延迟可通过E2E或P2P方式测量,默认为E2E。
  • port 0 是用于本地 PTP 管理的 Unix 域套接字。port 1 是 eth0 接口。
  • INITIALIZING、LISTENING、UNCALIBRATED 和 SLAVE 是发生 INITIALIZE(初始化)、RS_SLAVE(本地时钟成为slave) 和 MASTER_CLOCK_SELECTED(选定了对应的主时钟) 事件时更改的端口状态。当端口状态从 UNCALIBRATED 更改为 SLAVE 时,表示计算机已与 PTP 主时钟成功同步。

2.4. 常用的参数选项

指定配置文件

-f /etc/linuxptp/ptp4l.conf	 #ptp4l

指定使用频率修正方式的最大误差值(误差大于该值时,改用时钟步进方式)

--step_threshold=0.00002	 #ptp4l
-S 0.00002				     #phc2sys

注:使用 --step-threshold 和 -S 选项可能会造成系统时间的跳跃,会对一些依赖时间的程序和服务(如sleep,timer等)造成影响。交付产品中请就此与使用方确认!!!
减少日志输出,仅打印统计信息:

--summary_interval=60		#ptp4l
-u 60					    #phc2sys

3. Linuxptp的命令与建议参数选项

以下命令可直接在命令行执行(以下省略ROOT权限);
也可以通过配置系统文件 /etc/rc.local 或系统服务等方式开机自动运行。

3.1. 软件时间戳模式的建议参数选项

主时钟端启动命令:

~] ptp4l -i em3 -S

从时钟端启动命令:

~] ptp4l -i em3 -S -s –step_threshold=0.001

3.2. 硬件时间戳模式的建议参数选项

主时钟端启动命令:

~] ptp4l -i em3 -H      					#其中em3是对应的网卡名称
~] phc2sys -a -rr -S 0.00002

从时钟端启动命令:

~] ptp4l -i em3 -H -s –step_threshold=0.00002	#其中em3是对应的网卡名称
~] phc2sys -a -r -S 0.00002

4. 通过系统服务方式加载运行PTP

服务的配置文件修改
可通过系统服务方式启动,对应的服务配置文件分别位于:

/usr/lib/systemd/system/ptp4l.service
/usr/lib/systemd/system/phc2sys.service	#仅硬时戳下修改
  • 在配置文件中 ExecStart= 字段后内容修改为上文的命令与建议参数选项
  • 在 ExecStart= 字段前一行增加以下内容,用于启动延时:
    ExecStartPre=/bin/sleep 10
  • 在 ExecStart 字段后一行增加以下内容,用于自动重新加载:
    Restart=always

服务的启动运行

~] # 启动运行服务
~] systemctl start ptp4l
~] systemctl start phc2sys
~] 
~] # 开机自启动
~] systemctl enable ptp4l 
~] systemctl enable phc2sys	

作为服务启动情况下查看运行状态

~] # 查看服务状态
~] systemctl status ptp4l
~] systemctl status phc2sys
~] 
~] # 查看运行日志
~] journalctl -fu ptp4l
~] journalctl -fu phc2sys

服务配置示例:/usr/lib/systemd/system/ptp4l.service

[Unit]
Description=Precision Time Protocol (PTP) service
Documentation=man:ptp4l

[Service]
Type=simple
ExecStartPre=/bin/sleep 10
ExecStart=/usr/sbin/ptp4l -i enp9s0f0 -H -s --step_threshold=0.00002
Restart=always

[Install]
WantedBy=multi-user.target

服务配置示例:/usr/lib/systemd/system/phc2sys.service

[Unit]
Description=Synchronize system clock or PTP hardware clock (PHC)
Documentation=man:phc2sys
After=ntpdate.service
Requires=ptp4l.service
After=ptp4l.service

[Service]
Type=simple
ExecStartPre=/bin/sleep 10
ExecStart=/usr/sbin/phc2sys -a -r -S 0.00002
Restart=always

[Install]
WantedBy=multi-user.target

附录. NTP配置服务

1. 配置服务

将/usr/lib/systemd/system/ntp.service修改
原有的ExexStart行前加#注释
在此后增加以下三行内容,然后保存并重启计算机

ExexStartPre=/bin/sleep 10
ExexStart=/usr/sbin/ntpdate [server_ip]
Restart=always

2. 查看ntp服务状态和日志

~]# systemctl status ntp
~]# journalctl -fu ntp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值