Linux PTP学习

前言

本文是对Linux PTP的学习记录,不足之处请指出。Linux PTP用于在Linux系统的精确时钟同步,支持IEEE 1588 Precision Time Protocol(PTP)标准,目的是实现在网络中,设备之间的高精度时间同步。它是一个工具的集合,核心工具有ptp4l,phc2sys等。ptp4l作为最核心的工具,用于网络中的PTP设备通信,可以将本地PTP 硬件时钟与PTP grandmatser同步,而phc2sy可以将本地 PTP 硬件时钟同步到系统时钟(反之也可),从而实现了本地系统时钟对PTP grandmatser的同步。

前提条件

首先要检查本地的PTP 硬件设备例如网卡是否支持软硬件时间戳,可以用ifconfig查看网卡名称,然后 使用命令:

ethtool -T enp23s0f0

对于软件时间戳的支持应该包括:

  • SOF_TIMESTAMPING_SOFTWARE
  • SOF_TIMESTAMPING_TX_SOFTWARE
  • SOF_TIMESTAMPING_RX_SOFTWARE

对于硬件时间戳的支持应该包括:

  • SOF_TIMESTAMPING_RAW_HARDWARE
  • SOF_TIMESTAMPING_TX_HARDWARE
  • SOF_TIMESTAMPING_RX_HARDWARE

安装Linux PTP

下载源码:

git clone http://git.code.sf.net/p/linuxptp/code linuxptp
git checkout v2.0

build and install:

cd linuxptp
make
sudo make install

ptp4l使用范例(软件时间戳)

用网线连接两台主机的网卡,eno1和enp0s25。eno1作为主时钟,enp0s25作为从时钟。
首先可以用ptp4l -h查看运行选项:

 [options]

 Delay Mechanism

 -A        Auto, starting with E2E # 自动选择延迟机制。,从E2E开始,当收到对等延迟请求时切换到P2P
 -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'                   # 从指定文件file中读取配置。 默认情况下不读取配置文件
 -i [dev]  interface device to use, for example 'eth0'      # 选择PTP接口设备,例如eno1
           (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

master 主机使用命令和日志:

sudo ptp4l -i eno1 -m -S

slave 主机使用命令和日志:

sudo ptp4l -i enp0s25 -m -S -s
  • master offset值表示从主设备测量的偏移量(以纳秒为单位)
  • s0/s1/s2表示PTP设备的不同状态,s0表示未锁定,s1表示正在同步,s2表示锁定,即SERVO_LOCKED,同步到了稳定状态,之后会根据时间戳做细微调整,继续保持和 master 时钟的同步
  • 当端口状态从UNCALIBRATED改变到SLAVE时,表示已经成功与一个PTP主时钟同步
  • freq表示时钟频率的调整,以十亿分之一(ppb)为单位
  • path delay表示从主时钟发送的同步消息的估算延迟(以纳秒为单位)

ptp4l使用范例(硬件时间戳)

master主机使用命令:

sudo ptp4l -i eno1 -m -H

slave主机使用命令:

sudo ptp4l -i enp0s25 -m -H -s

phc2sys使用范例

首先可以用phc2sys -h查看运行选项:

usage: phc2sys [options]

 automatic configuration:
 -a             turn on autoconfiguration                         # 自动寻找当前运行的ptp4l程序,利用它的时钟,同步给操作系统时钟,操作系统时钟是slave
 -r             synchronize system (realtime) clock
                repeat -r to consider it also as a time source
 manual configuration:
 -c [dev|name]  slave clock (CLOCK_REALTIME)                      # 指定slave clock
 -d [dev]       master PPS device                                 
 -s [dev|name]  master clock                                      # 指定master clock
 -O [offset]    slave-master time offset (0)
 -w             wait for ptp4l                                    # 等待ptp4l
 common options:
 -f [file]      configuration file
 -E [pi|linreg] clock servo (pi)
 -P [kp]        proportional constant (0.7)
 -I [ki]        integration constant (0.3)
 -S [step]      step threshold (disabled)
 -F [step]      step threshold only on start (0.00002)
 -R [rate]      slave clock update rate in HZ (1.0)
 -N [num]       number of master clock readings per update (5)
 -L [limit]     sanity frequency limit in ppb (200000000)
 -M [num]       NTP SHM segment number (0)
 -u [num]       number of clock updates in summary stats (0)
 -n [num]       domain number (0)
 -x             apply leap seconds by servo instead of kernel
 -z [path]      server address for UDS (/var/run/ptp4l)
 -l [num]       set the logging level to 'num' (6)
 -t [tag]       add tag to log messages
 -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

例如将上面slave主机的系统时钟与网卡同步命令与日志:

sudo phc2sys -s enp0s25 -w -m -R 8
上一篇:Pytorch中保存模型的两种方法-一、保存整个模型


下一篇:html--雨滴