PTP时钟同步服务

精密时间协议(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中的PtpSupportsupported表示支持,不支持的规格不返回PtpSupport参数。
  • 支持的镜像:支持Linux镜像,建议使用受维护的官方镜像版本。

    点击查看支持的镜像列表

    操作系统

    支持的版本

    Alibaba Cloud Linux

    2、3、4

    AlmaLinux

    8.5~8.10、9.0~9.6、10.0

    Anolis OS

    8.2、8.4、8.6、8.8~8.10

    CentOS Stream

    8~10

    Debian

    11.0~11.11、12.2、12.4~12.11

    Fedora

    33~41

    OpenSUSE

    15.2~15.6

    Rocky Linux

    8.5~8.10、9.0~9.6、10.0

    Ubuntu

    18.04 LTS~24.04 LTS

  • Linux内核版本须为4.12或更高。

ECS实例开启/关闭PTP

开启PTP时钟同步服务

  1. 控制台上开启PTP

    • 创建实例

      前往ECS控制台-自定义购买页面,选择支持PTP的地域、实例规格、镜像后,在高级选项中选择开启PTP时钟同步服务。

    • 已有实例

      若实例当前物理服务器不支持PTP,需重启后(迁移到支持PTP的物理服务器)方可开启。
      1. 前往ECS控制台-实例单击目标实例ID进入实例详情页。

      2. 实例详情页全部操作中选择实例设置 > 设置PTP时钟同步服务

      3. 设置PTP时钟同步服务对话框中,开启PTP时钟同步服务。

        点击确定后,会弹出PTP时钟同步任务窗口。

      4. 点击任务ID,查看任务进度,待任务结束后,弹出框自动关闭,实例完成开启PTP时钟同步服务。

  2. 远程连接Linux实例

  3. 公共镜像已预装云助手。未使用公共镜像的实例,需使用安装包。

    云助手

    1. 查看PHC硬件设备是否存在。

      PHC硬件设备不存在,请提交工单
      lspci | grep 500c

      开启PTP时钟同步服务后,返回如下所示信息:

      image

    2. 执行云助手命令,检查其版本。版本须不低于2.2.3.631。若版本不符,请升级云助手

      acs-plugin-manager --version
    3. 确认云助手插件在当前区域的可用性。

      若云助手插件不存在,请提交工单
      acs-plugin-manager --list | grep ACS-PTP-Monitor
    4. 通过云助手安装驱动。

      命令通常在10分钟内完成。
      acs-plugin-manager --exec --plugin ACS-PTP-Monitor --params --install --timeout 0
    5. 开启ptp-monitor服务。

      更新chrony配置,重启chronyd,启用ptp-monitor开机自启,并启动ptp-monitor。
      acs-plugin-manager --exec --plugin ACS-PTP-Monitor --params --start

    安装包

    1. 执行以下命令,查看PHC硬件设备。

      lspci | grep 500c

      开启PTP时钟同步服务后,返回如下所示信息:

      image

    2. 执行以下命令,获取脚本压缩包(需开通公网)。

      ECS实例开启PTP后,通过ptp-monitor的脚本来完成一键部署及配置。
      wget https://ptp-monitor-hk.oss-cn-hongkong.aliyuncs.com/ptp-monitor/ptp-monitor-latest.zip
    3. 执行以下命令,解压压缩包。

      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
    4. 执行以下命令,完成驱动的编译及安装。

      bash ptp-monitor.sh --install
    5. 执行以下命令,确认PTP驱动是否已安装完成。

      ptp-monitor会根据当前系统版本编译PTP驱动,驱动名称为ptp_cipu
      lsmod | grep ptp_cipu
    6. 执行以下命令,确认PTP设备文件是否已成功生成。

      ll /dev/ptp*

      若返回设备文件信息,表示驱动运行正常:

      image

    7. 执行以下命令,完成chrony配置、重启chronyd服务、运行ptp-monitor服务。

      bash ptp-monitor.sh --start

      重启chronyd服务后,约几十秒内PTP时钟源生效,可通过查看实例的PTP时钟同步服务进行确认。

关闭PTP时钟同步服务

  1. 控制台上关闭PTP

    1. 前往ECS控制台-实例单击目标实例ID进入实例详情页。

    2. 实例详情页全部操作中选择实例设置 > 设置PTP时钟同步服务

    3. 设置PTP时钟同步服务对话框中,关闭PTP时钟同步服务。

      点击确定后,会弹出PTP时钟同步任务窗口。

    4. 点击任务ID,查看任务进度,待任务结束后,弹出框自动关闭,实例完成关闭PTP时钟同步服务。

  2. 远程连接Linux实例

  3. 公共镜像已预装云助手。未使用公共镜像的实例,需使用安装包。

    云助手

    执行以下命令,停止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硬件时钟同步,同步精度达到纳秒级:

image

  • 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),硬件时钟稳定性良好:

image

  • System time:系统时钟与PTP硬件时钟PHC0的当前偏差, slow 表示系统时间慢1纳秒(1 纳秒=10⁻⁹ 秒)

  • RMS offset:长期统计的均方根偏移量,此处为1175纳秒,反映时间同步的稳定性

  • Frequency:系统时钟的频率偏差, slow 表示本地时钟每秒比PTP硬件时钟PHC05.213微秒(ppm=百万分之一)

  • Root delay:到根时间源的总网络延迟,图中所示极低的延迟表示网络环境高度稳定

常见问题

可以通过OpenAPI的方式开启/关闭PTP时钟同步服务嘛?

  1. 开启/关闭PTP时钟同步服务。

    • 创建实例:调用RunInstances,指定ClockOptionsPtpStatusenableddisabled,创建开启、关闭PTP时钟同步服务的ECS实例。

    • 已有实例:调用ModifyInstanceClockOptions,指定PtpStatusenableddisabled,配置实例开启/关闭PTP时钟同步服务。

      成功后将返回任务ID(TaskId),可调用DescribeTasks指定TaskActionModifyInstanceClockOptionsTaskIds为对应的任务ID实时查询PTP时钟同步服务的启停操作执行状态。

  2. 调用DescribeInstances,指定AdditionalAttributesCLOCK_OPTIONS,确认实例的PTP时钟同步服务是否启用。

  3. 调用RunCommand,执行相关命令,完成配置。

PTP可以和NTP一起使用吗?

可以。PTP不会影响NTP,chronyd会根据内部的算法来挑选最佳的一个时钟源,根据配置会优先选择PTP作为时钟源。

安装驱动的时候,报错dkms: command not found

安装PTP驱动的时候,会先安装依赖的工具包,dkms工具就是依赖之一,需要解决dkms包安装的问题。驱动安装失败的具体报错日志可以查看/var/log/ptp-cipu-ptp-monitor.log

  • 情况1:repo源配置可能不是最新,可更新repo后重试。

  • 情况2:到dkms官网获取对应的安装包。

如何设置和取消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