前段时间测试现场车辆上报云端数据的延迟,使用的测试方案是车端上报数据中携带精确到毫秒的时间戳,云端收到协议之后在本身的日志存储接收时的时间戳,比对两者的差异从而确认网络+业务延迟。
当然正常情况下测试两者延迟的方法是客户端发送时记录时间戳,然后服务端接收后马上进行业务处理同步的返回回复协议,客户端计算发收时间间隔的1/2就是延迟。这里不使用这种方法的原因有二,一是车和平台目前只有个别这样同步收发消息的业务,难以做长时间的拷机稳定测试;二是我们不关想测试网络延迟,是想测试车云真正的业务处理延迟,所以为了不增加新的测试代码,我们的测试方案是最方便的;当然这就要求车云双方对时间的高度同步。
最初为了摸清车云的现有时间环境,做了初步测试,测试延迟大概有500ms,而ping延迟只有50ms左右,基本确认两者的时间高度不同步。为了车云的时间同步问题接触了三个实现ntp协议的软件的使用,下面做一下简单的总结。
1.systemd-timesyncd
systemd 提供了 systemd-timesyncd 客户端,它是一个用于跨网络同步系统时钟的守护服务。它实现了一个 SNTP 客户端。与NTP的复杂实现相比,这个服务简单的多,它只专注于从远程服务器查询然后同步到本地时钟。在/etc/systemd/timesyncd.conf 中配置你的(时间)服务器。大多数 Linux 发行版都提供了一个默认配置,它指向发行版维护的时间服务器上。systemd-timesyncd只会更改系统时间不会更改硬件时间,可以通过hwclock -w命令将系统时间同步到硬件时间
配置文件
/etc/systemd/timesyncd.conf 存储校时,修改ntp服务ip,其中
[Time]
NTP=192.168.33.105
NTP可以配置ntp协议的校时服务器;
控制命令
timedatectl timesync-status,查看校时状态
systemctl restart systemd-timesyncd, 重启服务
timedatectl , 查看同步状态
System clock synchronized: yes
NTP service: active
RTC in local TZ: no
(System clock synchronized: yes ##如果和远程NTP服务器成功同步,显示为yessystemd-timesyncd.service active: yes ##NTP时间同步是否开启,yes表示是,systemd-timesyncd服务为活动也就是开启了NTP时间同步)
2. chrony
Chrony包含chronyd一个在用户空间中运行的守护程序,以及chronyc一个命令行程序,可用于监视其性能chronyd并在运行时更改各种操作参数。chronyd可以监测和由命令行实用程序来控制chronyc。该实用程序提供了一个命令提示符,该命令提示符允许输入许多命令来查询其当前状态chronyd并对其配置进行更改。chrony既作为校时服务器,又作为校时客户端为本机校时。
配置文件
/etc/chrony.conf(/etc/chrony/chrony.conf) 配置文件,可以修改新增server
控制命令
systemctl status chronyd -l 查看校时状态
chronyc activity 查看校时源状态
chronyc sources -v 查看时间同步源
chronyc tracking 查看实际校时源和校时情况
使用chrony进行PPS校时参考了
Linux服务器时间同步chrony详解+案例_云烟成雨TD的博客-CSDN博客_chronyc tracking
另外chrony的官方文档介绍的也比较详细
3.ntpdate
ntpdate -s ntp.ming.com 手动同步时间
ntpdate了解的并不是很多,主要是上面这个命令。
还有就是可以通过crontab和ntpdate实现定时同步时间的功能
sudo vim /etc/crontab
以上修改即可配置1小时同步一次时间