原文:https://github.com/ptpd/ptpd/blob/master/INSTALL
目录
PTP守护进程版本2的构建和安装说明
2015年6月15日
George V. Neville-Neil, Wojciech Owczarek
众所周知,PTP守护进程用于FreeBSD、NetBSD、OpenBSD、OpenSolaris及其衍生产品,Mac OS X和Linux系统。
*)前提
您将需要以下工具和库来构建ptpd2:
1. GNU自动工具(automake, autoconf, libtool等)-必需
2. PCAP库(libpcap/bpf)和开发头(可选但推荐)-以太网传输所需,并且通常推荐用于提高消息性能
*注意:Libpcap在OpenSolaris / OmniOS上似乎是坏的,编译并运行,但是没有收到任何数据。
3.SNMP库(可选)——允许使用SNMP进行构建支持
*)构建
1. 切换到树的根目录中(也就是您阅读的文件所在的位置)
2. 如果从存储库构建,如Subversion, CVS或GIT,运行:
autoreconf -vi
3.如果是从发行版.tar.gz包构建,您可以运行
autoreconf -vi
但是在大多数情况下,运行
./configure
就足够了——你必须运行autoreconf(如果configure错误或结果错误)。
4 . . / configure
configure脚本输出的最后一部分将显示所有库依赖项检查和特性检查的结果:特性和依赖项可以使用下面描述的选项来控制。运行
./configure --help
将显示所有可用选项。
*注意*在QNX系统上,configure脚本可能不接受可用的“rm”命令实现,因此,如果它运行不了,输入./configure和以下环境变量:
导出ACCEPT_INFERIOR_RM_PROGRAM = yes
========= 为ptpd配置脚本选项 ========================
*禁用统计代码,以降低计算费用和RAM使用,配置以下选项构建:
./configure --disable-statistics
*要构建一个纯从时钟版本(禁用GM逻辑),请使用:
./configure --enable-slave-only
这将构建一个无法作为主机运行的版本。
*在2.3.1,用于定期操作的默认定时器隐含使用POSIX计时器,如果只有操作系统支持它。要禁用POSIX定时器支持和使用旧的间隔定时器实现,以下选项可以使用:
./configure --disable-posix-timers
*从2.3.1开始,增加了对多个单播目的地(包括GMs和从站)的支持——有协商(信令)和没有协商。默认的最大单播目的地数(也是信令GM的最大从服务器数)设置为128。这个设置会对PTPd使用的RAM数量产生影响。单播表容量可以更改为最大2048使用:
./configure --with-max-unicast-destinations=[16...2048]
可以将这个限制更改为超过2048,但实际上,由于消息调度、计时器信号使用和单线程架构,任何超过1000 ptpd的地方都将显示较高的CPU使用率。Ptpd作为1000个从站和高消息率(32/秒)的单播通信(协商)主服务器已经被成功测试,并提供了足够的性能。当运行大量的从服务器时,建议使用libpcap (ptpengine:use_libpcap=y)来更容易匹配同步和跟踪,除非NIC支持软件传输时间戳。如果没有这些和libpcap, ptpd就会循环数据包回到自己的套接字中,因此后续目标无法与同步目标匹配,就会使用查找表。散列排序很低,但也有可能发生,在这种情况下,ptpd将迭代包含最后时间戳的表。这只是极端情况下的问题。
* Linux上的某些NIC驱动程序提供了so_timestamp功能与软件传输时间戳(SOF_TIMESTAMPING_TX_SOFTWARE),不可预测的传输时间戳故障可能会发生,这可能导致不稳定的操作,在某些情况下,高CPU使用率(见https://sourceforge.net/p/ptpd/discussion/469208/thread/4aea6e47)。
虽然已经实施了修复措施并取得了成功,但仍然存在一些风险。要完全禁用Linux上的SO_TIMESTAMPING支持,不管操作系统支持,使用:
./configure --disable-so-timestamping
*启用实验选项使用:
./configure --enable-experimental-options
这使得:
-运行SO_TIMESTAMPING而不验证NIC驱动程序是否支持给定的时间戳选项
-运行消息间隔超出PTP规范
*注*在QNX系统上,当实验选项被启用时,使用一个clock_gettime近似使用CPU时钟计数器和附加到IRQ0,这也被用来检索包RX和TX时间戳,忽略PCAP时间戳和套接字选项。为了获得最佳性能,建议这样做,但是在成为默认值之前需要进行更多的测试。
默认情况下,在QNX中,时钟的时间增量可达10毫秒,而PCAP和套接字时间戳仅精确到几毫秒。
5. make
6. 阅读手册页ptpd2(8)和ptpd2.conf(5)。手册页是配置信息的最完整的来源。
ptpd2本身也提供了广泛的帮助:
运行 ptpd2 --help 查看简短帮助
运行 ptpd2 --long-help 以查看所有设置的long help
运行 ptpd2 -e [key:setting] 显示单个设置的帮助
7. 更新test/client-e2e-socket.conf,使其“ptpengine:interface =”设置指向测试机器上的一个网络接口,该接口可以看到来自主机的PTP包。
8. 在适当的地方测试:
./src/ptpd2 -c Test /client-e2e-socket.conf
9.检查/var/run/ptpd2.event.log中守护进程的日志输出
检查/var/run/ptpd2.stats.log中守护进程输出的统计信息
检查状态文件/var/run/ptpd2.status.log
10. 如果结果看起来不错,就进行安装
守护进程可以在其他基于POSIX的系统上工作,但这不是保证。在SourceForge页面上欢迎补充和指正:
http://ptpd.sf.net