论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com技术社区
»
论坛
›
运维.售后
›
运维.售后
›
Linux 使用 PTP 举行时间同步
Linux 使用 PTP 举行时间同步
李优秀
论坛元老
|
2024-7-13 01:23:21
|
显示全部楼层
|
阅读模式
楼主
主题
1377
|
帖子
1377
|
积分
4131
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
概述
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 接口。INITIALIZING、LISTENING、UNCALIBRATED 和 SLAVE 是发生 INITIALIZE、RS_SLAVE 和 MASTER_CLOCK_SELECTED 事件时更改的端口状态示例。当端口状态从 UNCALIBRATED 更改为 SLAVE 时,表示计算机已与 PTP 主时钟乐成同步。
master offset 行说明:
master offset 值表示测得的与主时钟之间的毛病(以纳秒为单位)。
s0、s1、s2 表示时钟伺服的不同状态。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 的同步原理决定了时钟同步的精度主要取决于时间戳的精度。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
李优秀
论坛元老
这个人很懒什么都没写!
楼主热帖
什么是API密钥及其安全利用指南? ...
基于GLM生成SQL,基于MOSS生成SQL,其 ...
【Java结业计划】基于JavaWeb的在线购 ...
Docker Compose - 安装和基本使用 ...
mac安装java17(jdk17)
【云原生 | 从零开始学Kubernetes】二 ...
亲测有效,彻底解决msvcr100.dll丢失的7 ...
[Qt][Qt 网络][下]具体讲解
Linux体系(CentOS)下安装设置 Nginx 超 ...
C#使用NModbus4库创建Modbus TCP Slave ...
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
网络安全
向量数据库
IT职场那些事
人工智能
MES
DevOps与敏捷开发
物联网
快速回复
返回顶部
返回列表