Linux 使用 PTP 进行时间同步

这篇具有很好参考价值的文章主要介绍了Linux 使用 PTP 进行时间同步。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

概述​

PTP(精确时间协议)是一种用于在网络中进行时钟同步的协议。当与硬件支持结合使用时,PTP 能够达到亚微秒的精度,这种精度远高于 NTP 协议。

PTP 时间同步协议的支持分为内核空间和用户空间两部分。在 Linux 系统中,PTP 协议的实际实现称为 LinuxPTP,它是 PTPv2 根据 Linux 的 IEEE 1588 标准实现的。在 LinuxPTP 软件包包括 ptp4l 和 phc2sys 用于时钟同步的程序,其中 ptp4l 程序实现了 PTP 边界时钟和普通时钟,支持硬件时钟同步和软件时间同步,硬件时间戳用于将 PTP 硬件时钟与主时钟同步,软件时间戳用于将系统时钟与主时钟同步。phc2sys 程序则用于将系统时钟同步到网卡上的 PTP 硬件时钟(PHC)。

准备工作​

安装 LinuxPTP​

首先,需要在 Linux 系统中安装 LinuxPTP。

Debian/Ubuntu 系统使用 apt 命令安装:

sudo apt install linuxptp

对于 RHEL/CentOS 6/7 系统,使用 yum 命令安装:

sudo yum install linuxptp

对于 RHEL/CentOS 8 和 Fedora 系统,使用 dnf 命令安装:

sudo dnf install linuxptp

如果是其他嵌入式 Linux 系统,或者你想安装最新版本的 LinuxPTP,可以采用源码编译安装方式:

sudo git clone git://git.code.sf.net/p/linuxptp/code linuxptp
cd linuxptp
sudo make
sudo make install

安装完成后可通过 ptp4l -v 命令检查是否安装成功:

$ ptp4l -v
1.92

检查网卡驱动​

为了使用 PTP ,网络接口的内核网络驱动程序必须支持软件或硬件时间戳功能。除了驱动程序中存在的硬件时间戳支持之外,NIC 还必须能够在物理硬件中支持此功能。验证特定驱动程序和 NIC 的时间戳功能的最佳方法是使用 ethtool 查询接口。

例如:检查 eth0 网卡对硬件时间戳的支持

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)
	one-step-sync         (HWTSTAMP_TX_ONESTEP_SYNC)
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

配置文件​

ptp4l 配置文件​

ptp4l 程序启动时会从 /etc/linuxptp/ptp4l.conf 文件读取配置选项,部分配置如下所示。

[global]
#
# Default interface options
#
network_transport	UDPv4
delay_mechanism		E2E
time_stamping		hardware
tsproc_mode		filter
delay_filter		moving_median
delay_filter_length	10
egressLatency		0
ingressLatency		0
boundary_clock_jbod	0

ptp4l 服务配置文件​

ptp4l 可以作为服务运行,对应的配置文件是 /lib/systemd/system/ptp4l.service。

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

[Service]
Type=simple
ExecStart=/usr/sbin/ptp4l -f /etc/linuxptp/ptp4l.conf -i eth0

[Install]
WantedBy=multi-user.target

执行以下命令即可启动 ptp4l 服务:

sudo systemctl start ptp4l

如果要永久启用 ptp4l 服务,可执行以下命令:

sudo systemctl enable ptp4l

如果要禁用 ptp4l 服务,可执行以下命令:

sudo systemctl disable ptp4l

phc2sys 服务配置文件​

phc2sys 也可以作为服务运行,对应的配置文件是 /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
ExecStart=/usr/sbin/phc2sys -w -s eth0

[Install]
WantedBy=multi-user.target

执行以下命令即可启动 phc2sys 服务:

sudo systemctl start phc2sys

如果要永久启用 phc2sys 服务,可执行以下命令:

sudo systemctl enable phc2sys

如果要禁用 phc2sys 服务,可执行以下命令:

sudo systemctl disable phc2sys

实验​

我们可以通过修改 /etc/linuxptp/ptp4l.conf 来设置 ptp4l 的模式,再通过 systemctl start ptp4l 启动。但为了更加直观,下面的实验我们将直接通过 ptp4l 命令行启动。

提示:为了完成 PTP 时间同步实验,我们需要两台 Linux 设备,其中一台作为 PTP master,另一台作为 PTP slave。

PTP 硬件时钟同步​

ptp4l 默认使用硬件时间戳,也可以显式指定 -H 选项使用硬件时间戳。-i 选项指定支持硬件时戳的网络接口;-m 指示 ptp4l 将其输出列显到标准输出,而不是列显到系统的日志记录工具。

PTP 主端口(Master),-H 选项显式指定使用硬件时间戳。

sudo ptp4l -m -H -i eth0

PTP 从端口(Slave),-s 选项设置为从端口。

sudo ptp4l -m -H -s -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

其中,port 0 是用于本地 PTP 管理的 Unix 域套接字。port 1 是 eth0 接口。INITIALIZINGLISTENINGUNCALIBRATED 和 SLAVE 是发生 INITIALIZERS_SLAVE 和 MASTER_CLOCK_SELECTED 事件时更改的端口状态示例。当端口状态从 UNCALIBRATED 更改为 SLAVE 时,表示计算机已与 PTP 主时钟成功同步。

master offset 行说明:

  • master offset 值表示测得的与主时钟之间的偏差(以纳秒为单位)。
  • s0s1s2 表示时钟伺服的不同状态。s0 表示已解锁(unlocked),s1 表示时钟步进(clock step),s2 表示已锁定(locked)。如果伺服处于已锁定状态(s2),并且 pi_offset_const 选项在配置文件中设置为负值,则时钟不会步进,而只会缓慢调整。
  • freq 值表示时钟的频率调整,以十亿分率(ppb)为单位。
  • path delay 值表示从主时钟发送的同步消息的预计延迟(以纳秒为单位)。

PTP 软件时间同步​

PTP 主端口(Master),使用 -S 选项启用软件时间戳。

sudo ptp4l -m -S -i eth0

PTP 从端口(Slave),-s 选项设置为从端口。

sudo ptp4l -m -S -s -i eth0

使用软件时间戳进行时间同步的准确度比硬件时间戳要低,这是因为 IEEE 1588 的同步原理决定了时钟同步的精度主要取决于时间戳的精度。文章来源地址https://www.toymoban.com/news/detail-848063.html

到了这里,关于Linux 使用 PTP 进行时间同步的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Linux进行时】磁盘文件结构

    上篇文章,我们提及文件是存放在磁盘当中,本篇文件我们来了解一下磁盘的结构!!! ❓什么是磁盘? 💡磁盘(disk)是指利用磁记录技术存储数据的存储器。 磁盘是计算机主要的存储介质,可以存储大量的二进制数据,并且断电后也能保持数据不丢失。早期计算机使用

    2024年02月05日
    浏览(46)
  • 【Linux进行时】进程地址空间

    我们在讲C语言的时候,老师给大家画过这样的空间布局图,但是我们对它不了解 我们写一个代码来验证Linux进程地址空间 这里没什么问题,就是他们的g_valule 和其地址都是一样的, 我们将代码调整一下,让子进程的g_value++ 我们可以发现子进程的g_value变了,但是父进程没有

    2024年02月08日
    浏览(41)
  • 【Linux进行时】环境变量and进程优先级

    ❓首先一个问题:我写的代码(这个代码很简单,不用管)编译之后运行的时候为什么要带./ ? 或者说我怎么才可以让我不用带./ ? 💡.代表当前文件下,/是文件分隔符,这是用相对路径的方式来访问,所以我们也可以用绝对路径 myproc和ls都是指令,ls可以直接输入,但是我

    2024年02月08日
    浏览(46)
  • 【数据挖掘】使用 LSTM 进行时间和序列预测

            每天,人类在执行诸如过马路之类的任务时都会做出被动预测,他们估计汽车的速度和与汽车的距离,或者通过猜测球的速度并相应地定位手来接球。这些技能是通过经验和实践获得的。然而,由于涉及众多变量,预测天气或经济等复杂现象可能很困难。在这种情

    2024年02月15日
    浏览(45)
  • 2.电赛进行时......(AD9833(DDS)模块的学习使用)

    如果是玫瑰,它总会开花的。——歌德 直接数字合成是生成模拟信号的一种常用方法,简单意义上的DDS,主要由相位累加器、相位幅度转换、数模转换器组成。 因为AD9833的输入时钟频率最高是25MHz,由于奈奎斯特采样定律的限制,输出波形的每个周期内至少要2个点才能还原

    2024年02月10日
    浏览(39)
  • MySQL:查询时进行时间比较

    在 MySQL 中查数据的时候,往往需要对记录的创建时间进行筛选,比如只需要查询今年1-5月份的,或者查询距离当前时间多久以前的。 本文介绍了在 MySQL 中查询记录时如何进行时间比较 解决办法:使用 TIMESTAMPDIFF 函数 查询特定时间范围的记录有多种方法,这里介绍几种 查询

    2024年02月16日
    浏览(45)
  • Arrow:在项目中进行时间处理的强大工具

    目录 一、Arrow简介 二、安装与配置 三、基础功能与使用 1. 日期和时间格式转换 2. 时区处理 3. 时间序列分析 四、进阶应用与案例分析 五、性能与优化 六、最佳实践与经验分享 七、总结与展望 在处理日期和时间时,我们经常需要一个精确、可靠的库来帮助我们。Python的Ar

    2024年02月02日
    浏览(56)
  • Mybatis-Plus如何进行时间日期的比较

    获取数据库中跟当前日期相等的记录时,还是调用eq方法,所以实体类包括数据库中的类型是Date,而不是DateTime,否则只能获取相同时刻的数据。 Mybatis-Plus的时间比较是基于数据库的函数进行的,而不是字符串的比较。在Mybatis-Plus中,可以使用Wrapper对象的 ge、gt、le、lt 方法

    2024年02月11日
    浏览(44)
  • ESP8266调用NTP服务器进行时间校准

    NTP是网络时间协议(Network Time Protocol,简称NTP),是一种用于同步计算机时间的协议。NTP服务器指的是提供NTP服务的计算机或设备。NTP服务器的主要功能是保证网络上的所有设备的时间同步,以确保各个设备相互之间的时间协调一致。NTP服务器通常连接到具有高度精确时间源

    2024年02月08日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包