优秀网页翻译:同步你的时钟, Raspberry Pi 上更好的 PTP 设置

原文链接:
https://medium.com/inatech/sync-your-clocks-better-ptp-settings-on-raspberry-pi-37a9a54e4802

开篇

Raspberry Pi 上的 PTP,它很容易安装,apt install linuxptp ,这样就完成了,对吧?
也许不吧。以下是一些比默认设置更好地运行它的提示。

本文是关于 inastitch 的系列文章的一部分。
在这个项目中,时钟同步对于帧捕获对齐至关重要。

看呐!两个树莓派的心一起跳动。

这一切都始于这个 git repo 的补丁,以使 PTP 在 Raspberry Pi 3 上工作https://github.com/twteamware/raspberrypi-ptp。这些补丁现在集成在 RPi OS 的正式版本中。

页面 performance.md 是最有趣的。它比较了 RPi3(带有软件时间戳)和 NXP iMX7(带有硬件时间戳)之间的时钟同步质量。
(译者注:performance.md的翻译在此:performance.md

结果:
RMS 偏移接近,但最小/最大偏移对于 RPi3 来说大一个数量级。这是软件时间戳的预期结果。

第一个问题:
我如何生成那些漂亮的小图?

如何绘制 PTP 指标?

从 journalctl -u ptp4l.service 中提取 ptp4l 日志,使用正则表达式和 python 处理日志行,并使用旧的 gnuplot 绘制数据。

Python 代码

# Parser script to plot PTP delay
# Vincent Jordan
# 2020.10.12# Run with:
# journalctl -u ptp4l.service | grep "master offset" | python3 parse_ptp.pyimport re
import fileinput
import sysminKernelTime = 0;
maxKernelTime = 1000;pattern = '^(.+)ptp4l\[[0-9]+\]: \[(.+)\] master offset\s+(-?[0-9]+) s([012]) freq\s+([+-]\d+) path delay\s+(-?\d+)$'
test_string = 'Oct 20 11:44:18 raspberrypi ptp4l[353]: [27.058] master offset 1169073126895 s0 freq      +0 path delay    267760'# Gnuplot data header
print('# time, offset, freq, pathDelay')for line in fileinput.input():
    # Regex search
    res = re.search(pattern, line)# if pattern was matched
    if res:
        # Capture result
        timeAndHost  = res.group(1)
        kernelTime   = res.group(2)
        masterOffset = res.group(3)
        state        = res.group(4)
        freq         = res.group(5)
        pathDelay    = res.group(6)    if (state == '2') and (float(kernelTime) > minKernelTime) and (float(kernelTime) < maxKernelTime):
            print(kernelTime, masterOffset, freq, pathDelay)
        
    # if issue in patter
    else:
        print("Regex error:", line)
        sys.exit()

gnuplot:

# Output in PNG image file
set term png
set output "output.png"set xtics font "Verdana,10"
set ytics font "Verdana,6"# for multiple plot in one image
set multiplot
set size 1, 0.3set origin 0.0,0.6
plot 'ptp.dat' using 1:2 with lines title 'offset' lc 'black'set origin 0.0,0.3
plot 'ptp.dat' using 1:3 with lines title 'freq' lc 'black'set origin 0.0,0.0
plot 'ptp.dat' using 1:4 with lines title 'pathDelay' lc 'black'

结果:

在这里插入图片描述
上图:冷启动时的 PTP 时钟稳定(默认设置)

从冷启动开始同步时钟大约需要 1200 秒(20 分钟)

在这里插入图片描述上图:PTP 稳定后运行 20 分钟
20 分钟后,时钟偏移在 ±80µs 之间相当稳定。

完美,因为我们需要不到 100µs 的偏移一遍 inastitch 能够工作。让我们连接一切……

把所有东西放在一起,然后……?

现在是时候连接拼接板,并开始流式传输了。
在这里插入图片描述

上图:在同一网络接口上流式传输视频时 PTP 第一次干扰

你能猜出拼接板是什么时候连接的吗?是的,在内核时间 3800。它造成了网络路径延迟的巨大不稳定性,导致大时钟偏移…
在这里插入图片描述
上图:与视频流共享链接时 PTP 不稳定

即使在流媒体开始很久之后,PTP 也会遭受看似周期性的延迟。这个不稳定的时钟不再适合画面缝合了。

解决方案 1:使用专用网络

使用专用网络交换机将使 PTP 不受干扰地运行。在更专业的设置中,PTP 流量将在具有高优先级的不同 VLAN 中运行,而不是冗余交换机,以最大限度地减少延迟。 AVB/TSN 网络特别支持内置的 PTP。

在专用网络上:

在这里插入图片描述上图:冷启动的 PTP 时钟稳定(在专用网络上)
在这里插入图片描述

上图:PTP 在稳定后运行 20 分钟,同时在不同网络上流式传输视频

20 分钟后,时钟偏移与之前一样稳定在 ±80µs 之间。开始流式传输,在 PTP 同步中看不到差异……真棒!

在这里插入图片描述

上图:PTP 运行 2 小时,同时在不同网络上流式传输视频

运行 2 小时后,仍然可以看到尖峰。

解决方案 2:使用不同的时钟伺服

在较新版本的 ptp4l 中,clock_servo 有两个选项:

pi 是默认选项。它的准确性取决于 pi 常量(即,配置文件中以 pi_ 开头的所有选项)。
linreg 是一个较新的选项,它不回复硬编码的常量。

让我们试试 linreg 而不是 pi。
冷启动的 PTP 时钟稳定(在专用网络和 linreg 伺服上)

使用 linreg 可以更快地稳定 PTP,并且经过几个小时后,时钟看起来仍然更稳定,见下图:
在这里插入图片描述

上图:视频流时 PTP 运行数小时(linreg 伺服) 在不同的网络上

在这里插入图片描述上图:inastitch 帧内延迟始终低于 5ms,持续 2 小时

其他似乎变化不大或不可能的想法

内核动态滴答

内核选项 nohz=off 告诉内核禁用动态滴答。动态滴答有助于内核让 CPU 更长时间处于睡眠状态。通过禁用此省电功能,预计系统时钟将具有更高的精度。

现代内核应该可以缓解这个问题,在现实生活中 nohz=off 和 nohz=on 之间几乎没有区别。

注意:以上所有测试都设置了 nohz=off。

同步频率

在配置文件 /etc/linuxptp/ptp4l.conf 中,有更改循环同步和延迟请求消息频率的选项:

logSyncInterval 是“同步消息之间的平均时间间隔。较短的间隔可能会提高本地时钟的准确性”(引用手册页)
logMinDelayReqInterval 是“Delay_Req 消息之间允许的最小平均时间间隔。更短的间隔使 ptp4l 对路径延迟的变化做出更快的反应”(引用手册页)

这两个设置都指定为以秒为单位的 2 的幂。例如,0 是 2 次方零 = 1 秒。

对于低于 1 秒的间隔,负值似乎被接受,并且应该导致更新率高于 1 秒。

P2P 代替 E2E

在 /etc/linuxptp/ptp4l.conf 中,选项 delay_mechanism 可以更改为 P2P(Peer-to-Peer)而不是 E2E(End-to-End,默认)。
在这里插入图片描述
P2P 不能与旧式交换机一起使用。

这张幻灯片来自 NetTimeLogic 对 PTP 的精彩介绍,请参阅完整演示文稿的参考资料。

参考

NetTimeLogic 对 PTP 的介绍:
https://www.nettimelogic.com/resources/PTP%20Basics.pdf

关于 PTP 的 Fedora 项目文档:
https://docs.fedoraproject.org/en-US/fedora/rawhide/system-administrators-guide/servers/Configuring_PTP_Using_ptp4l/

ptp4l 手册页:
https://manpages.debian.org/unstable/linuxptp/ptp4l.8.en.html

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值