Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

4.6 问题排查与优化

常见问题

问题1:收不到消息

# 检查:防火墙
sudo iptables -A INPUT -p udp --dport 319 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 320 -j ACCEPT

# 检查:组播路由
ip maddr show eth0
# 应该看到组播地址

问题2:时间不准

# 检查:系统时钟
timedatectl status
# 关闭NTP:timedatectl set-ntp false

问题3:偏差大

# 原因:软件时间戳精度低
# 解决:使用硬件时间戳(需要网卡支持)

性能优化

/* 优化1:提高优先级 */
#include <sched.h>
struct sched_param param;
param.sched_priority = 99;
sched_setscheduler(0, SCHED_FIFO, &param);

/* 优化2:CPU亲和性 */
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(2, &cpuset);
sched_setaffinity(0, sizeof(cpuset), &cpuset);

/* 优化3:减少延迟 */
/* 使用clock_gettime(CLOCK_MONOTONIC_RAW, ...) */

总结

我们完成了一个完整的轻量级PTP实现:

第四章成果

  • ✅ 4.1 项目概述
  • ✅ 4.2 消息结构与编码
  • ✅ 4.3 主时钟程序
  • ✅ 4.4 从时钟程序
  • ✅ 4.5 编译运行与测试
  • ✅ 4.6 问题排查与优化

代码量统计

  • ptp_common.h: 83行
  • ptp_message.h: 96行
  • ptp_message.c: 99行
  • ptp_servo.h: 40行
  • ptp_servo.c: 53行
  • ptp_master.c: 219行
  • ptp_slave.c: 324行
  • Makefile: 86行
  • 总计:1000行

实现功能

  • 完整的PTP同步流程
  • Announce/Sync/Follow_Up/Delay_Req/Delay_Resp
  • PI伺服控制器
  • 时钟调整
  • 基本监控输出

学习收获

  • 理解PTP消息格式
  • 掌握时间戳处理
  • 实现伺服算法
  • 完成时钟同步

全书结语

恭喜你完成了整个PTP教程的学习!

从第一章的时间概念,到第二章的协议深度分析,再到第三章的源码解析,最后第四章的亲手实践——你已经全面掌握了PTP时间同步技术。

你学到了

  • 时间同步的基本原理
  • PTP协议的完整规范
  • LinuxPTP的实现细节
  • 从零实现PTP程序

下一步

  • 深入学习IEEE 1588-2019标准
  • 探索硬件时间戳优化
  • 研究电信、电力等行业应用
  • 参与LinuxPTP开源社区

祝你在时间同步领域越走越远!