当前位置: 首页 > news >正文

Linux时间体系与LinuxPTP

Linux时间体系

Linux 需要提供“知道当前时间、计算时间长度、定时提醒”这三种功能。

其中知道当前时间和计算时间长度在某种程度上可以互相转换。即以UNIX Epoch计时开始可以知道当前时间。

一般硬件可以提供下列的硬件时钟:

  • RTC 【真实时钟】 对于PC而言,一般通过主板上的纽扣电池供电维护,防止断电后时间信息不对。对于嵌入式设备,我觉得一般没有使用这个时钟。RTC时钟一般需要通过IO接口读取进入Kernel,然后更新内部的时间计数器,然后在关机过程中写入。以保存时间。对于嵌入式设备,我觉得可以靠NTP之类的授时协议来更新时钟。
  • 定时器【TImer】 这个一般是定时中断,可能精度较低
  • 计时器【counter】 递增的CPU计数器 属于是寄存器。读取超级快。精度高,准确。

下面是一些常用概念:

UNIX Epoch:
UNIX诞生那一年,作为类UNIX计时的起点,即1970-01-01。

UTC:
世界协调时间,一般认为的0时区时间。计算机底层都是用UTC交互,应用层上面再加逻辑换算时区。


Linux的时间接口,会用到这些参数:

timespec:是一个结构体,内有两个参数,一个是秒,一个是纳秒。表示精度到那纳秒。

clockid:用于区分使用的不同时钟体系:

【CLOCK_REALTIME】
自然时间,也就是壁挂时钟。可设置,可跳跃。可往前可往后。
会影响到这些时间体系:CLOCK_REALTIME_ALARM(定时专用)/COARSE(粗糙读取快)/TAI(无闰)
这些不可设置。

【CLOCK_MONOTONIC】
单调递增时钟,只能往后调整,不能往前调。一般是以系统启动为起点。

【CLOCK_MONOTONIC_RAW】
不能调整。

linuxptp

查看网卡是否有ptp硬件时钟

sudo ethtool -T  网卡名 [ 如eth0 ]  

ptp4l

ptp4l is an implementation of the Precision Time Protocol (PTP) according to IEEE standard 1588 for Linux. It implements Boundary Clock (BC), Ordinary Clock (OC), and Transparent Clock (TC).

选项:

-H
使用硬件时钟
Select the hardware time stamping. All ports specified by the -i option and in the configuration file must be attached to the same PTP hardware clock (PHC). This is the default time stamping.

-S
使用软件时钟
Select the software time stamping.

-f config
指定配置文件
Read configuration from the specified file. No configuration file is read by default.

-i interface
指定ptp硬件时钟 如果不指定好像会自动选择。一般一个网卡可能也就一个硬件ptp时钟 在/dev/ptp* 可以看到
Specify a PTP port, it may be used multiple times. At least one port must be specified by this option or in the configuration file.

-s
纯纯slave模式
Enable the clientOnly mode.

-m
标准输出端口打印log
Print messages to the standard output.

配置文件示例

Automotive MasterAutomotive profile example configuration for master containing those attributes which differ from the default configuration. Refer to ptp4l(8) for the complete list of available options.
[global]
# Options carried over from gPTP.
gmCapable               1     #让本地时钟可以作为grandmaster 使用802.1AS时钟
priority1               248    #本地时钟的priority1属性。它用于PTP服务器选择算法,较低的值优先。必须在0到255之间。默认值为128。
priority2               248    #本地时钟的priority2属性。它用于PTP服务器选择算法,较低的值优先。必须在0到255之间。默认值为128。
logSyncInterval         -3
syncReceiptTimeout      3
neighborPropDelayThresh 800
min_neighbor_prop_delay -20000000
assume_two_step         1
path_trace_enabled      1
follow_up_info          1
transportSpecific       0x1
ptp_dst_mac             01:80:C2:00:00:0E
network_transport       L2
delay_mechanism         P2P
#
# Automotive Profile specific options
#
BMCA                    noop
serverOnly              1
inhibit_announce        1
asCapable               true
inhibit_delay_req       1

说实话,配置文件我没有用。目前来看指令比较简单。可能面对特殊的环境和应用需要做配置文件发布和定制。会比较好。
比如车内TSN就需要配置文件 指明使用TSN AS协议。

phc2sys(8): synchronize two or more clocks

phc2sys is a program which synchronizes two or more clocks in the system. Typically, it is used to synchronize the system clock to a PTP hardware clock (PHC), which itself is synchronized by the ptp4l(8) program.With the -a option, the clocks to synchronize are fetched from the running ptp4l daemon and the direction of synchronization automatically follows changes of the PTP port states.Manual configuration is also possible. When using manual configuration, two synchronization modes are supported, one uses a pulse per second (PPS) signal provided by the source clock and the other mode reads time from the source clock directly. Some clocks can be used in both modes, the mode which will synchronize the time sink with better accuracy depends on hardware and driver implementation.

网卡的硬件时钟是PTP,或者叫PHC。程序用的时钟是上面的CLOCK_REALTIME
phc2sys的作用就是在自己内部,不同的时钟之间做同步。

常用指令:
-a
Read the clocks to synchronize from running ptp4l and follow changes in the port states, adjusting the synchronization direction automatically. The system clock (CLOCK_REALTIME) is not synchronized, unless the -r option is also specified.
似乎是添加经由ptp4l同步的时钟(软或者硬实现同步)进入同步组。和谁同步呢,-a说是自动选择,但是我没考虑过如果不指定还能和谁同步。
这里指出了-r表示开启CLOCK_REALTIME作为同步对象。

也就是说:

phc2sys -a -r

是从ptp4l的同步时钟–同步至–》CLOCK_REALTIME

-r
Only valid together with the -a option. Instructs phc2sys to also synchronize the system clock (CLOCK_REALTIME). By default, the system clock is not considered as a possible time source. If you want the system clock to be eligible to become a time source, specify the -r option twice.

这里实际上指出要使用-rr

phc2sys -a -rr

-rr表示把系统时钟当做了时钟源,然后 CLOCK_REALTIME–同步至–>PHC

我之前测试的时候,没有在作为grandmaster的host内执行phc2sys -a -rr, 造成虽然我在host内用date修改了时间,但是slave的时间虽然运行了phc2sys -a -r也没有被修改。
甚至在slave同步成功后变成了UNXI Epoch。

总结

【grand master】

phc2sys -a -rr # sys time --> ptp clock
ptp4l -i 网卡 -H -m # 指定接口(网卡) 使用硬件时钟 打印log

【slave】

ptp4l -i 网卡 -H -m -s# -s 表示仅仅以 slave的模式执行
phc2sys -a -r# ptp clock --> sys time

相关文章:

Linux时间体系与LinuxPTP

Linux时间体系 Linux 需要提供“知道当前时间、计算时间长度、定时提醒”这三种功能。 其中知道当前时间和计算时间长度在某种程度上可以互相转换。即以UNIX Epoch计时开始可以知道当前时间。 一般硬件可以提供下列的硬件时钟: RTC 【真实时钟】 对于PC而言&…...

最优除法(力扣)数学 JAVA

给定一正整数数组 nums,nums 中的相邻整数将进行浮点除法。例如, [2,3,4] -> 2 / 3 / 4 。 例如,nums [2,3,4],我们将求表达式的值 “2/3/4”。 但是,你可以在任意位置添加任意数目的括号,来改变算数的…...

Git代码管理

目录: git环境配置 git工作流程git常用命令gitlab实战gitlog分析与检索分支管理策略git合并与冲突 1.git环境配置 Git 简介: Git 是目前世界上最先进的分布式版本控制系统。Git 优点: 适合分布式开发,强调个体…...

使用vscode进行远程开发服务器配置

1.下载vscode 2.给vscode 安装python 和 remote ssh插件 remote—SSH扩展允许您使用任何具有SSH服务器的远程机器作为您的开发环境。 3.安装remote-SSH插件之后,vscode左侧出现电脑图标,即为远程服务,按图依次点击,进行服务器配置…...

北斗gps卫星授时服务器(NTP)应用于防火墙场景

北斗gps卫星授时服务器(NTP)应用于防火墙场景 北斗gps卫星授时服务器(NTP)应用于防火墙场景 作为网络建设中不可或缺的两方面,在保证网络安全稳定以及时间同步精确性方面,防火墙和NTP服务器都极为重要。而防…...

Quartz中Misfire机制源码级解析

文章目录 前文案例展示Misfire机制1. 启动过程补偿2. 定时任务补偿3. 查询待触发列表时间区间补偿 前文 Misfire是啥意义的?使用翻译软件结果是"失火"。一个定时软件,还来失火?其实在Java里面,fire的含义更应该是触发&…...

每日一题——重建二叉树

重建二叉树 题目描述 给定节点数为 n 的二叉树的前序遍历和中序遍历结果,请重建出该二叉树并返回它的头结点。 例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建出如下图所示。 提示: 1.vin.length pre.length 2.pre 和…...

Python - json与字典dict

Python中的JSON和字典都是数据序列化的格式,它们都可以将数据转换为字符串以便于存储或传输。虽然它们有一些相似之处,但也有很多不同之处。 字典 字典是Python中的一种数据类型,它是一个键值对的集合。每个键对应一个值,可以通…...

性能测试必备监控技能linux篇

前言 如果性能测试的目标服务器是linux系统,在如何使用linux自带的命令来实现性能测试过程的监控分析呢? 对于日常性能测试来讲,在linux下或是类Unix系统,我们必须掌握以下常用的指标查看命令。 ps pstree top free vmstat …...

【如何训练一个中英翻译模型】LSTM机器翻译模型部署之ncnn(python)(五)

系列文章 【如何训练一个中英翻译模型】LSTM机器翻译seq2seq字符编码(一) 【如何训练一个中英翻译模型】LSTM机器翻译模型训练与保存(二) 【如何训练一个中英翻译模型】LSTM机器翻译模型部署(三) 【如何训练…...

C++ 面向对象三大特征

文章目录 一、封装二、继承三、多态 一、封装 目的:隐藏实现细节;模块化 特性: 1) 访问权限: public 所有 protected 子类 private 自己(友元类也可以访问) 2)属性 3)方…...

【Github】自动监测 SSL 证书过期的轻量级监控方案 - Domain Admin

在现代的企业网络中,网站安全和可靠性是至关重要的。一个不注意的SSL证书过期可能导致网站出现问题,给公司业务带来严重的影响。针对这个问题,手动检测每个域名和机器的证书状态需要花费大量的时间和精力。为了解决这个问题,我想向…...

Echarts常见图表展示

一、折线图 1.1 堆叠折线图 const option {title: {text: 折线图,},tooltip: {trigger: axis},legend: {data: [张三, 李四, 王五],bottom: 10,},grid: {left: 3%,right: 4%,bottom: 10%,containLabel: true},xAxis: {type: category,boundaryGap: false,data: [Mon, Tue, We…...

PySpark机器学习实战案例

目录 PySpark机器学习库 分布式机器学习原理 PySpark架构设计 PySpark项目实战...

微软操作系统中,windows server 系列和windows 的区别

Windows Server和Windows Desktop(即我们常说的Windows系统)是Microsoft公司的两种操作系统产品,它们都基于Windows NT内核。两者在设计目标、功能和价格等方面存在显著的区别。 设计目标与功能 Windows Desktop系统主要针对个人用户和企业的…...

本地部署 Stable Diffusion XL 1.0 Gradio Demo WebUI

StableDiffusion XL 1.0 Gradio Demo WebUI 0. 先展示几张 StableDiffusion XL 生成的图片1. 什么是 Stable Diffusion XL Gradio Demo WebUI2. Github 地址3. 安装 Miniconda34. 创建虚拟环境5. 安装 Stable Diffusion XL Gradio Demo WebUI6. 启动 Stable Diffusion XL Gradi…...

模型法在初中物理中的实例与应用

摘要:模型法是初中物理解题的重要方法,它的优点有方便快捷,易于理解等。文章通过列举模型法在初中物理解题时应用的例子,与模型法在学习与生活中的实际应用,说明了模型法可用性高,易于理解,能让…...

el-table 设置行背景颜色 鼠标移入高亮问题处理

一、 设置行背景颜色 1. 需求描述 后端返回表格数据,有特定行数需要用颜色标识。类似于以下需求: 2. 解决方式 方式区别:row-class-name“tableRowClassName”已返回类名的形式设置样式,代码整洁,但是会鼠标高亮&#xff0c…...

嵌入式面试常见题目收藏(超总结)

​ 这篇文章来自很多博客主和其他网站的作者,如有侵权,联系必删 文章出处标注: https://blog.csdn.net/qq_44330858/article/details/128947083 ***如需PDF或者原稿可私信 *** ***如需PDF或者原稿可私信 *** ***如需PDF或者原稿可私信 *** 1.…...

error in file(out, “wt“): cannot open the connection

这个错误在提示我们: 文件无法打开链接,可能是以下原因之一: 文件不存在或者路径错误;文件正在被其他程序占用;没有足够的权限来访问该文件;硬盘内存不足; 可以尝试的方法: 可以检…...

Redis (一)消息订阅和发送测试

〇、redis 配置 1、概况 本文基于 Ubuntu20.04 云服务器配置Redis,且在本地进行 Redis 测试。 2、目录概况 一、配置文件 位于 /config/app.yml 中,目的用于 Redis 初始化: redis:addr: "39.104.**.28:6379"password: "p…...

区间预测 | MATLAB实现QRGRU门控循环单元分位数回归多输入单输出区间预测

区间预测 | MATLAB实现QRGRU门控循环单元分位数回归时间序列区间预测 目录 区间预测 | MATLAB实现QRGRU门控循环单元分位数回归时间序列区间预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 MATLAB实现QRGRU门控循环单元分位数回归分位数回归多输入单输出区间…...

Debian 12.1 “书虫 “发布,包含 89 个错误修复和 26 个安全更新

导读Debian 项目今天宣布,作为最新 Debian GNU/Linux 12 “书虫 “操作系统系列的首个 ISO 更新,Debian 12.1 正式发布并全面上市。 Debian 12.1 是在 Debian GNU/Linux 12 “书虫 “发布六周后推出的,目的是为那些希望在新硬件上部署操作系统…...

hadoop部署配置

端口名称 Hadoop2.x Hadoop3.x NameNode内部通信端口 8020 / 9000 8020 / 9000/9820 NameNode HTTP UI 50070 9870 MapReduce查看执行任务端口 8088 8088 历史服务器通信端口 19888 19888 端口名称Hadoop2.xHadoop3.xNameNode内部通信端口8020 / 90008020 / 9000/9820NameNode…...

文心一言 VS 讯飞星火 VS chatgpt (68)-- 算法导论6.5 7题

文心一言 VS 讯飞星火 VS chatgpt (68)-- 算法导论6.5 7题 七、试说明如何使用优先队列来实现一个先进先出队列,以及如何使用优先队列来实现栈(队列和栈的定义见 10.1 节。) 文心一言: 优先队列是一种数据结构,其中…...

uniapp:手写签名,多张图合成一张图

要实现的内容&#xff1a;手写签名&#xff0c;协议内容。点击提交后&#xff1a;生成1张图片&#xff0c;有协议内容和签署日期和签署人。 实现的效果图如下&#xff1a; 1、签名页面 <template><view class"index"><u-navbar title"电子协议…...

DevExpress WPF Tree List组件,让数据可视化程度更高!(一)

DevExpress WPF Tree List组件是一个功能齐全、数据感知的TreeView-ListView混合体&#xff0c;可以把数据信息显示为REE、GRID或两者的组合&#xff0c;在数据绑定或非绑定模式下&#xff0c;具有完整的数据编辑支持。 DevExpress WPF 拥有120个控件和库&#xff0c;将帮助您…...

Linux操作系统下安装python环境

参考&#xff1a;Linux操作系统下安装python环境_linux如何下载python_秃头小猿-F的博客-CSDN博客 注意 切换用户 二、切换root用户 1.给root用户设置密码&#xff1a;命令&#xff1a;sudo passwd root输入密码&#xff0c;并确认密码。2.重新输入命令&#xff1a;su root …...

JavaScript的宏任务和微任务

宏任务和微任务 JS为微任务和宏任务简单介绍任务执行顺序例子任务执行顺序简单例子 关于new Promise实例化过程的例子 JS为微任务和宏任务简单介绍 js是单线程的&#xff0c;但是分同步异步微任务和宏任务皆为异步任务&#xff0c;它们都属于一个队列宏任务一般是&#xff1a;…...

java的空引用null和空字符串““

java中如果字符串变量指向null&#xff0c;表示空引用&#xff0c;此时对字符串求长度会抛出异常。 而""表示一个空字符串&#xff0c;对字符串求长度是可以的&#xff0c;求出来的字符串长度为0。 举例&#xff1a; package com.thb;public class Test6 {public s…...