精密时间协议(PTP)通过硬件级时间戳和动态路径补偿,实现亚微秒级精准时钟同步,保障分布式系统时序一致性,适用于高频金融交易等对时间精度要求严苛的场景。
什么是PTP
PTP时钟同步功能目前在邀测中,如需使用,请提交工单申请。
PTP(Precision Time Protocol,精密时间协议)是基于IEEE 1588标准的高精度网络时间同步协议。它通过硬件级时间戳、动态路径补偿及主从时钟智能协商等技术,解决了传统网络时间协议(如NTP)主要因软件处理延迟和网络抖动等因素造成的毫秒级误差瓶颈,可为分布式系统中的设备提供亚微秒级的时间同步服务。
相对于NTP,PTP通过硬件时间戳卸载计算,在降低CPU/网络资源消耗的同时,实现更高精度:
特性 | PTP | NTP |
精度 | 亚微秒级 | 毫秒级 |
时间戳实现 | 硬件支持(如PHC设备) | 软件实现 |
网络环境 | 局域网或低延迟 | 广域网 |
资源消耗 | 低(报文交互频率可控) | 较高(依赖频繁的报文切换) |
典型应用 | 金融交易 | 互联网服务器、普通设备 |
阿里云PTP同步架构采用可用区粒度主备原子钟冗余部署,主原子钟同步GPS时间后,通过IEEE 1588 PTP边界时钟协议构建层级时间同步拓扑,向ECS实例逐级传递亚微秒级时间信号。
ECS实例默认运行Chrony或者NTP服务进行时间同步,可以在支持的地域、实例规格上开启PTP时钟同步服务,实现高精度时间同步。
适用场景
金融高频交易:PTP的亚微秒级同步精度与硬件时间戳保障跨交易所订单时序严格对齐,规避时钟偏差导致的交易顺序争议;结合低延迟网络的亚微秒级抖动控制,满足高频交易对时序公平及合规的严苛需求。
使用限制
支持的地域和可用区:
地域名称
地域ID
可用区名称
可用区ID
中国香港
cn-hongkong
可用区B(即将上线)
cn-hongkong-b
可用区C(即将上线)
cn-hongkong-c
可用区D(可测试环境使用)
cn-hongkong-d
支持的实例规格族:
可以通过DescribeInstanceTypes接口查询规格支持情况,返回参数Clock中的PtpSupport为supported表示支持,不支持的规格不返回PtpSupport参数。
通用型实例规格族g9i、计算型实例规格族c9i、内存型实例规格族r9i(可测试环境使用)
支持的镜像:支持Linux镜像,建议使用受维护的官方镜像版本。
Linux内核版本须为4.12或更高。
ECS实例开启/关闭PTP
开启PTP时钟同步服务
控制台上开启PTP
创建实例
前往ECS控制台-自定义购买页面,选择支持PTP的地域、实例规格、镜像后,在高级选项中选择开启PTP时钟同步服务。
已有实例
若实例当前物理服务器不支持PTP,需重启后(迁移到支持PTP的物理服务器)方可开启。
前往ECS控制台-实例单击目标实例ID进入实例详情页。
在实例详情页,全部操作中选择
。在设置PTP时钟同步服务对话框中,开启PTP时钟同步服务。
点击确定后,会弹出PTP时钟同步任务窗口。
点击任务ID,查看任务进度,待任务结束后,弹出框自动关闭,实例完成开启PTP时钟同步服务。
公共镜像已预装云助手。未使用公共镜像的实例,需使用安装包。
云助手
查看PHC硬件设备是否存在。
若PHC硬件设备不存在,请提交工单。
lspci | grep 500c
开启PTP时钟同步服务后,返回如下所示信息:
执行云助手命令,检查其版本。版本须不低于
2.2.3.631
。若版本不符,请升级云助手。acs-plugin-manager --version
确认云助手插件在当前区域的可用性。
若云助手插件不存在,请提交工单。
acs-plugin-manager --list | grep ACS-PTP-Monitor
通过云助手安装驱动。
命令通常在10分钟内完成。
acs-plugin-manager --exec --plugin ACS-PTP-Monitor --params --install --timeout 0
开启ptp-monitor服务。
更新chrony配置,重启chronyd,启用ptp-monitor开机自启,并启动ptp-monitor。
acs-plugin-manager --exec --plugin ACS-PTP-Monitor --params --start
安装包
执行以下命令,查看PHC硬件设备。
lspci | grep 500c
开启PTP时钟同步服务后,返回如下所示信息:
执行以下命令,获取脚本压缩包(需开通公网)。
ECS实例开启PTP后,通过
ptp-monitor
的脚本来完成一键部署及配置。wget https://ptp-monitor-hk.oss-cn-hongkong.aliyuncs.com/ptp-monitor/ptp-monitor-latest.zip
执行以下命令,解压压缩包。
yum install -y unzip unzip ptp-monitor-latest.zip -d ptp-monitor-latest cd ptp-monitor-latest
Ubuntu、Debian等系统可以通过
sudo apt update && sudo apt install unzip
命令安装unzip
。执行以下命令,完成驱动的编译及安装。
bash ptp-monitor.sh --install
执行以下命令,确认PTP驱动是否已安装完成。
ptp-monitor
会根据当前系统版本编译PTP驱动,驱动名称为ptp_cipu
。lsmod | grep ptp_cipu
执行以下命令,确认PTP设备文件是否已成功生成。
ll /dev/ptp*
若返回设备文件信息,表示驱动运行正常:
执行以下命令,完成chrony配置、重启chronyd服务、运行ptp-monitor服务。
bash ptp-monitor.sh --start
重启chronyd服务后,约几十秒内PTP时钟源生效,可通过查看实例的PTP时钟同步服务进行确认。
关闭PTP时钟同步服务
控制台上关闭PTP
前往ECS控制台-实例单击目标实例ID进入实例详情页。
在实例详情页,全部操作中选择
。在设置PTP时钟同步服务对话框中,关闭PTP时钟同步服务。
点击确定后,会弹出PTP时钟同步任务窗口。
点击任务ID,查看任务进度,待任务结束后,弹出框自动关闭,实例完成关闭PTP时钟同步服务。
公共镜像已预装云助手。未使用公共镜像的实例,需使用安装包。
云助手
执行以下命令,停止ptp-monitor服务。
关闭PTP将移除PTP设备。更新chrony配置文件,移除PTP硬件时钟源。重启chronyd服务恢复默认的NTP等时钟服务。停止ptp-monitor监控程序。
acs-plugin-manager --exec --plugin ACS-PTP-Monitor --params --stop
安装包
停用PTP时钟源。
关闭PTP将移除PTP设备。更新chrony配置文件,移除PTP硬件时钟源。重启chronyd服务恢复默认的NTP等时钟服务。停止ptp-monitor监控程序。
bash ptp-monitor.sh --stop
查看实例的PTP时钟同步服务
执行chronyc sources
命令,查看所配置的时间源(PTP、NTP)状态。
输出示例:
以开启并配置了PTP时钟同步服务的实例为例,下图表示实例当前优先使用PTP硬件时钟同步,同步精度达到纳秒级:
MS
:时间源标识符,PHC0
表示PTP硬件时钟,IP地址表示NTP服务器#*
表示当前同步源,即实例正在使用PTP硬件时钟同步Stratum
:时间源的层级,数值越小精度越高(0 为原子钟/GPS,1 为直接连接的高精度源)Poll
:轮询间隔指数,当前轮询间隔为2^Poll
秒(例如Poll=4
表示 16 秒)Reach
:八进制值,表示最近8次同步成功率LastRx
:上次接收到响应的时间,单位为秒Last sample
:最后一次测量的时钟偏移量,格式为偏移 [原始偏移] +/- 误差
,反映系统时间与源时间的差异
监控PTP时钟同步健康度
执行chronyc tracking
命令,监控、评估系统时钟的健康状态(时间偏差、频率误差、网络延迟等动态指标),确保时间敏感应用(如金融交易)的可靠性。
输出示例:
如图所示,时间偏差在纳秒级(System time=1ns,RMS offset=1175ns),满足高精度场景需求,且频率误差较低(5.213ppm),硬件时钟稳定性良好:
System time
:系统时钟与PTP硬件时钟PHC0
的当前偏差,slow
表示系统时间慢1纳秒(1 纳秒=10⁻⁹ 秒)RMS offset
:长期统计的均方根偏移量,此处为1175纳秒,反映时间同步的稳定性Frequency
:系统时钟的频率偏差,slow
表示本地时钟每秒比PTP硬件时钟PHC0
慢5.213微秒(ppm=百万分之一)Root delay
:到根时间源的总网络延迟,图中所示极低的延迟表示网络环境高度稳定
常见问题
可以通过OpenAPI的方式开启/关闭PTP时钟同步服务嘛?
开启/关闭PTP时钟同步服务。
创建实例:调用RunInstances,指定ClockOptions的PtpStatus为enabled、disabled,创建开启、关闭PTP时钟同步服务的ECS实例。
已有实例:调用ModifyInstanceClockOptions,指定PtpStatus为enabled、disabled,配置实例开启/关闭PTP时钟同步服务。
成功后将返回任务ID(TaskId),可调用DescribeTasks,指定TaskAction为ModifyInstanceClockOptions,TaskIds为对应的任务ID,实时查询PTP时钟同步服务的启停操作执行状态。
调用DescribeInstances,指定AdditionalAttributes为CLOCK_OPTIONS,确认实例的PTP时钟同步服务是否启用。
调用RunCommand,执行相关命令,完成配置。
PTP可以和NTP一起使用吗?
可以。PTP不会影响NTP,chronyd会根据内部的算法来挑选最佳的一个时钟源,根据配置会优先选择PTP作为时钟源。
安装驱动的时候,报错dkms: command not found
安装PTP驱动的时候,会先安装依赖的工具包,dkms工具就是依赖之一,需要解决dkms包安装的问题。驱动安装失败的具体报错日志可以查看/var/log/ptp-cipu-ptp-monitor.log
。
如何设置和取消ptp-monitor程序开机自动运行
ptp-monitor是一个实例内部的运维组件。建议运行,但非强制。安装后,该组件默认开机自启动。
禁用开机自启动。
acs-plugin-manager --exec --plugin ACS-PTP-Monitor --params --disable-service
开启开机自动运行。
acs-plugin-manager --exec --plugin ACS-PTP-Monitor --params --enable-service
如何卸载PTP驱动
PTP驱动名为ptp_cipu。该驱动为PTP功能所必需,其安装不影响实例。如需卸载PTP驱动,可执行以下云助手命令:
acs-plugin-manager --exec --plugin ACS-PTP-Monitor --params --uninstall