精确时钟:亚马逊 EC2 实例上的微秒级时钟

关键要点

亚马逊更新了时间同步服务,提供微秒级的时钟精度,适用于支持的 EC2 实例。通过新能力,用户可以简化应用程序并提高数据传输速率,支持时间敏感型工作负载,如金融交易和广播。可通过网络时间协议NTP和精确时间协议PTP连接到这些高精度时钟。

今天,我们宣布对亚马逊时间同步服务进行了改进,现已支持在特定的亚马逊 EC2 实例上提供微秒级时钟精度。此次新功能为您的 EC2 实例添加了本地参考时钟,旨在确保您的实例的操作系统软件中的时钟精度达到低双位微秒范围。本文将指导您如何连接到改进后的时钟,并演示如何使用开源守护进程和库 ClockBound 来测量时钟精度并轻松生成和比较时间戳。

一般来说,由于硬件限制和网络波动,实现高保真时钟同步很难。虽然客户一直依赖亚马逊时间同步服务提供毫秒级的时钟精度,但需要微秒级精度的工作负载例如金融交易和广播迫使客户维护自己的时间基础设施,这既繁琐又昂贵。其他对时钟敏感的云计算应用程序,如分布式数据库和存储,也需要通过消息交换延迟、等待时间、数据锁定或事务日志来维护一致性。

通过全球和可靠的微秒级时钟精度,您现在可以将最时间敏感的应用程序迁移和现代化到云端,并淘汰繁重的本地时间基础设施。您还可以利用高精度时间戳简化应用程序,并提高其吞吐量,以确定跨实例、可用区和区域的事件和事务顺序。此外,您可以审计改进后的亚马逊时间同步服务,以测量和监控预期的微秒级精度。

亚马逊时间同步服务的新改进

新的本地时钟源可以通过现有的亚马逊时间同步服务的网络时间协议NTPIPv4 和 IPv6 端点访问,或者通过配置新的精确时间协议PTP参考时钟设备来获取尽可能最佳的精度。需要注意的是,NTP 和新的 PTP 硬件时钟PHC设备共享相同的高精度时间源。新的 PHC 设备是 AWS Nitro 系统 的一部分,因此可以在支持的裸金属和虚拟化 EC2 实例上直接访问,无需使用任何客户资源。

关于闰秒的简要说明

自 1972 年以来,闰秒是用于调整 UTC 时间的偶发一秒,旨在因应地球自转与国际原子时间TAI及太阳时间Ut1之间的不一致而进行调整。为了帮助客户管理闰秒,我们在亚马逊时间同步服务中设计了闰秒涂抹有关涂抹时间的详细信息,请参见 “Look Before You Leap”。

闰秒即将被放弃,我们完全支持在 第27届国际计量大会上放弃闰秒至2035年之前的决议。

为了支持这一过渡,我们仍计划在通过本地 NTP 连接或公共 NTP 池timeawscom访问亚马逊时间同步服务时涂抹时间。然而,新的 PHC 设备不会提供涂抹时间选项。如果发生闰秒,则 PHC 将按照 UTC 标准添加闰秒。涂抹时间和闰秒时间源在大多数情况下是相同的。但在闰秒事件期间,由于二者存在差异,我们不建议在闰秒事件期间混合涂抹和非涂抹的时间源进行时间客户端配置。

使用 NTP 连接大多数客户可以自动完成

您可以通过 NTP 连接到新的微秒级时钟,方式与当前使用亚马逊时间同步服务相同,使用 IPv4 地址 169254169123 或 IPv6 地址 fd00ec2123。这已经是所有亚马逊 AMI 及许多合作伙伴 AMI包括 RHEL、Ubuntu 和 SUSE的默认配置。您可以在 NTP 守护进程中验证此连接。下面是使用 chrony 守护进程的示例,验证 chrony 正在使用亚马逊时间同步服务的 IPv4 地址 169254169123 进行时间同步:

[ec2user@ ] chronyc sourcesMS Name/IP address Stratum Poll Reach LastRx Last sample=============================================================================== pacificlattnet 3 10 377 69 5630us[5632us] / 90ms edgelaxtxryancom 2 8 377 224 691us[ 689us] / 33ms 169254169123 1 4 377 2 4487ns[5914ns] / 85us blotchimage1technet 2 9 377 327 1710us[1720us] / 64ms 4419040123 2 9 377 161 3057us[3060us] / 84ms

亚马逊时间同步服务的 169254169123 IPv4 地址用 标记,表明这是该实例的同步源。有关如何配置亚马逊时间同步服务的更多详细信息,请参见 EC2 用户指南。

使用 PTP 硬件时钟连接

首先,您需要安装最新的弹性网络适配器ENA驱动程序。此驱动程序将允许您直接连接到 PHC。连接到您的实例并安装弹性网络适配器ENA版本 2100 或更高版本的 Linux 内核驱动程序。有关安装说明,请参见 Linux 内核驱动程序 GitHub。要在驱动程序中启用 PTP 支持,请遵循 “PTP 硬件时钟PHC 中的说明。

驱动程序安装完成后,您需要配置您的 NTP 守护进程以连接到 PHC。下方是如何通过将 PHC 添加到 chrony 配置文件中更改配置的示例。然后重启 chrony 使更改生效:

[ec2user ] sudo sh c echo refclock PHC /dev/ptp0 poll 0 delay 0000010 prefer gtgt /etc/chronyconf[ec2user ] sudo systemctl restart chronyd

此示例在接收来自 PHC 的参考信号时使用 /5 微秒范围。此 10 微秒用于考虑操作系统延迟。

更改配置后,您可以验证守护进程是否正确同步到 PHC。下面是 chronyc 命令输出的示例。PHC0 源旁将出现星号,表示您现在正在与 PHC 同步:

[ec2user@ ] chronyc sourcesMS Name/IP address Stratum Poll Reach LastRx Last sample==============================================================================

PHC0 0 0 377 1 18ns[ 20ns] / 5032ns

亚马逊时间同步服务的 PHC0 设备用 标记,表明这是该实例的同步源。

您的 chrony 跟踪信息将显示您正在同步 PHC:

[ec2user@ ] chronyc trackingReference ID 50484330 (PHC0)Stratum 1Ref time (UTC) Mon Nov 13 184309 2023System time 0000000004 seconds fast of NTP timeLast offset 0000000010 secondsRMS offset 0000000012 secondsFrequency 7094 ppm fastResidual freq 0000 ppmSkew 0004 ppmRoot delay 0000010000 secondsRoot dispersion 0000001912 secondsUpdate interval 10 secondsLeap status Normal

有关如何配置 PHC 的更多详细信息,请参见 EC2 用户指南。

测量时钟精度

时钟精度是时钟误差的衡量,通常定义为与 UTC 的偏差。这个时钟误差是计算机上观察到的时间与参考时间即真实时间之间的差异。如果您的实例配置为使用提供微秒级精度增强的亚马逊时间同步服务,通常您会看到通过 NTP 连接获得的时钟误差范围低于 100us。若通过新的 PHC 连接正确配置和同步,您会看到时钟误差范围通常低于 40us。

我们 之前已发布关于使用亚马逊时间同步服务和亚马逊 CloudWatch 监测时钟精度的博客,这些内容同样适用于改进后的 NTP 连接。

如果您与 PHC 连接,则时间守护进程例如 chronyd所估算的时钟误差范围将被低估。这是因为在 Linux 中,PTP 硬件时钟设备本身不会向 chrony 传递任何“误差范围”信息,就像 NTP 一样。因此,您的时钟同步守护进程假设时钟本身是准确的,因此具有“误差范围”为 0。为了解决此问题,Nitro 系统计算 PTP 硬件时钟自身的误差范围,并通过 ENA 驱动程序的 sysfs 文件系统将其暴露给您的 EC2 实例。您可以使用命令 cat /sys/devices/pci000000/000000050/phcerrorbound 直接读取此值单位为纳秒。要获得某一瞬间的时钟误差范围,您需要将 chrony 或 ClockBound 在 cronyd 查询 PTP 硬件时钟时的时钟误差范围加到这个 phcerrorbound 的值上。

以下是如何结合 PHC 时钟误差计算您的真实时钟误差范围:

时钟误差范围 = 系统时间 (05 根延迟) 根离散 PHC 误差范围

示例中的值为:

该是时候了:在 Amazon EC2 实例上实现微秒级准确性的时钟 计算博客

PHC 误差范围 = cat /sys/devices/pci000000/000000050/phcerrorbound

系统时间、根延迟和根离散是从 chrony 跟踪信息中获取的值。

ClockBound

无论多么准确,时钟都无法达到完美。相较于提供时钟误差的估算, ClockBound 提供了可靠的置信区间,通过自动计算时钟精度,在真实时间存在的情况下获得结果。开源的 ClockBound 守护进程提供了一种方便的方法来获取置信区间,并正在持续努力使其更容易集成到高性能工作负载中。

结论

亚马逊时间同步服务的新微秒级时钟能够帮助您迁移和现代化您在云中的时钟敏感型应用程序。本文中,我们展示了如何连接到支持的亚马逊 EC2 实例上的改进时钟,如何测量时钟精度,以及如何使用 ClockBound 轻松地生成和比较来自亚马逊 EC2 实例的时间戳。立即启动支持的实例,利用这项新功能进行构建。

要了解更多有关亚马逊时间同步服务的信息,请参阅 EC2 用户指南 Linux 和 Windows。

奈云npv加速器官网

如果您对本文有任何疑问,请在 AWS Compute rePost 开始新的讨论或者 联系 AWS 支持。

在 reInvent 了解亚马逊时间同步服务

我们将在 reInvent 2023 上更详细地介绍亚马逊时间同步服务。请查看 AWS reInvent 会议目录 中的会议 ID CMP220 注册参加。