關於時間:亞馬遜EC2實例上的微秒精確時鐘
Amazon宣布改善时间同步服务,使支援的Amazon EC2实例能够达到微秒级的时钟精准度。这项新能力为您的EC2实例新增了一个本地参考时钟,旨在提供低至数十微秒范围内的时钟精准度给实例内的客户操作系统软件。本文将展示您如何连接到您的EC2实例上的改进时钟,并演示如何使用ClockBound——一个开源守护程序和库来测量您的时钟精度,并轻松生成及比较您EC2实例的时间戳。
通常,由于硬件限制和网络变动,要达到高精度的时钟同步相当困难。尽管客户依赖Amazon时间同步服务来提供毫秒级的时钟精度,但像金融交易和广播这样需要微秒级精度的工作负载,客户必须维持自己的时间基础设施,这不仅运营负担重,而且成本高昂。其他在云端运行且对时钟敏感的应用程序,包括分布式数据库和储存,必须结合讯息交换延迟、等候周期、数据锁定或交易日志来在大规模环境下保持一致性。
现在,有了全球性且可靠的微秒级时钟精度,您可以将最具时间敏感性的应用迁移到云端并进行现代化改造,同时淘汰您繁重的本地时间基础设施。您还可以通过利用高精度时间戳确定跨实例、可用区域和地区的工作负载的事件和交易顺序,来简化您的应用程序并增加其吞吐量。此外,您还可以审查改进的Amazon时间同步服务,测量和监控预期的微秒级精度。
亞馬遜時間同步服務的新改進
新的本地時鐘源可透過現有的亞馬遜時間同步服務的網絡時間協議(NTP)IPv4和IPv6端點訪問,或者通過配置新的精密時間協議(PTP)參考時鐘裝置,以獲得最佳精確度。值得注意的是,NTP和新的PTP硬體時鐘(PHC)裝置都共享同一高精準度的時間源。新的PHC裝置是AWS Nitro系統的一部分,因此在支援的裸機和虛擬化Amazon EC2實例上可以直接存取,無需使用任何客戶資源。
關於閏秒的快速說明
自1972年引入的閏秒,是對UTC時間偶爾進行的一秒調整,以考慮地球自轉的不規則性並將UTC時間與國際原子時間(TAI)和太陽時間(Ut1)之間的差異進行調和。為了代表客戶管理閏秒,我們在亞馬遜時間同步服務中設計了閏秒平滑(在“跳躍之前看”中有關平滑時間的詳細信息)。
閏秒即將消失,我們全力支持第27屆國際度量衡大會決定在2035年或之前放棄閏秒的決定。
為了支持這一過渡,我們仍然計劃在通過本地NTP連接或我們的公共NTP池(time.aws.com)訪問亞馬遜時間同步服務時進行時間平滑。然而,新的PHC裝置將不提供平滑時間選項。在閏秒事件發生時,PHC將根據UTC標準添加閏秒。在大多數情況下,平滑和閏秒時間源是相同的。但是,由於它們在閏秒事件期間有所不同,我們不建議在閏秒事件期間在您的時間客戶端配置中混合使用平滑和非平滑時間源。
使用NTP連接(對於大多數客戶是自動的)
您可以像今天使用亞馬遜時間同步服務一樣,透過NTP連接到新的微秒精確時鐘,IPv4地址為169.254.169.123,IPv6地址為fd00:ec2::123。這已經是所有Amazon AMIs和許多合作夥伴AMIs的預設配置,包括RHEL、Ubuntu和SUSE。您可以在NTP守護進程中驗證此連接。下面的例子使用chrony守護進程,驗證chrony正在使用亞馬遜時間同步服務的169.254.169.123 IPv4地址來同步時間:
[ec2-user@ ~]$ chronyc sources
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^- pacific.latt.net 3 10 377 69 +5630us[+5632us] +/- 90ms
^- edge-lax.txryan.com 2 8 377 224 -691us[ -689us] +/- 33ms
^* 169.254.169.123 1 4 377 2 -4487ns[-5914ns] +/- 85us
^- blotch.image1tech.net 2 9 377 327 -1710us[-1720us] +/- 64ms
^- 44.190.40.123 2 9 377 161 +3057us[+3060us] +/- 84ms
亞馬遜時間同步服務的169.254.169.123 IPv4地址被指定為*,顯示它是此實例上的同步源。若尚未預設配置,請參閱EC2使用者指南了解更多關於配置亞馬遜時間同步服務的詳細信息。
使用PTP硬體時鐘連接
首先,您需要安裝最新的Elastic Network Adapter (ENA)驅動程序。這個驅動程序將允許您直接連接到PHC。連接到您的實例並安裝Linux內核驅動程序,適用於Elastic Network Adapter (ENA)版本2.10.0或更高版本。有關安裝指南,請參閱GitHub上的Linux內核驅動程序Elastic Network Adapter (ENA)系列。要在驅動程序中啟用PTP支援,請按照“PTP硬體時鐘(PHC)”部分的指示操作。
安裝驅動程序後,您需要配置NTP守護進程以連接到PHC。以下是如何在chrony中更改配置的例子,將PHC添加到您的chrony配置文件中。然後重啟chrony使更改生效:
[ec2-user ~]$ sudo sh -c 'echo "refclock PHC /dev/ptp0 poll 0 delay 0.000010 prefer" >> /etc/chrony.conf'
[ec2-user ~]$ sudo systemctl restart chronyd
此例子使用了+/-5微秒的範圍來接收來自PHC的參考信號。這10微秒是為了考慮操作系統的延遲。
更改配置後,您可以驗證您的守護程序是否正確地與PHC同步。以下是來自chronyc命令的輸出範例。一個星號將出現在PHC0來源旁邊,表示您現在正在與PHC同步:
[ec2-user@ ~]$ chronyc sources
MS Name/IP address Stratum Poll Reach LastRx Last sample
=============================================================================
#* PHC0 0 0 377 1 +18ns[ +20ns] +/- 5032ns
亞馬遜時間同步服務的PHC0裝置被指定為*,顯示它是此實例上的同步源。
您的chrony追蹤信息也會顯示您正在與PHC同步:
[ec2-user@ ~]$ chronyc tracking
Reference ID : 50484330 (PHC0)
Stratum : 1
Ref time (UTC) : Mon Nov 13 18:43:09 2023
System time : 0.000000004 seconds fast of NTP time
Last offset : -0.000000010 seconds
RMS offset : 0.000000012 seconds
Frequency : 7.094 ppm fast
Residual freq : -0.000 ppm
Skew : 0.004 ppm
Root delay : 0.000010000 seconds
Root dispersion : 0.000001912 seconds
Update interval : 1.0 seconds
Leap status : Normal
測量您的時鐘精度
時鐘精度是衡量時鐘誤差的指標,通常定义为与UTC的偏差。這個時鐘誤差是計算機上觀察到的時間和參考時間(也稱為真實時間)之間的差異。如果您的實例配置為使用Amazon時間同步服務,並且可用微秒精度增強功能,您通常會看到使用NTP連接的時鐘誤差界限在100微秒以下。當正確配置並與新的PHC連接同步時,您通常會看到時鐘誤差界限在40微秒以下。
我們之前發表了一篇關於通過NTP測量和監控時鐘精度的博客,這仍然適用於改進的NTP連接。
如果您連接到PHC,您的時間守護程序,如chronyd,將低估時鐘誤差界限。這是因為本質上,Linux中的PTP硬體時鐘裝置不會像NTP那樣向chrony傳遞任何“誤差界限”信息。結果,您的時鐘同步守護程序假定時鐘本身精確至UTC,因此具有“0”的誤差界限。為了解決這個問題,Nitro系統計算PTP硬體時鐘本身的誤差界限,並通過ENA驅動程序的sysfs文件系統將其暴露給您的EC2實例。您可以直接使用cat /sys/devices/pci0000:00/0000:00:05.0/phc_error_bound命令以納秒為單位讀取這個值。要在某一時刻獲得您的時鐘誤差界限,您需要添加chrony或ClockBound在chronyd輪詢PTP硬體時鐘時的時鐘誤差界限和這個phc_error_bound值。
下面是您如何計算包含PHC時鐘誤差的時鐘誤差,以獲得您的真正時鐘誤差界限:
時鐘誤差界限 = 系統時間 + (.5 * 根延遲) + 根分散 + PHC誤差界限
示例中的值如下:
PHC誤差界限 = cat /sys/devices/pci0000:00/0000:00:05.0/phc_error_bound
系統時間、根延遲和根分散是從chrony追蹤信息中取得的值。
ClockBound
不管一個時鐘有多精確,它永遠不會是完美的。ClockBound不是提供時鐘誤差的估計,而是通過自動計算時鐘精度(在參考時間(真實時間)確實存在的計算中)來提供一個可靠的置信區間。開源的ClockBound守護程序提供了一種方便的方法來獲取這個置信區間,工作正在進行中以使其更容易整合到高性能工作負載中。
結論
Amazon時間同步服務的新微秒精確時鐘可以用來迁移和现代化您在云端的最敏感时钟应用程序。在这篇文章中,我们展示了如何连接到支持的Amazon EC2实例上的改进时钟,如何测量您的时钟精度,以及如何使用ClockBound轻松生成和比较您的Amazon EC2实例的时间戳。今天就启动一个支持的实例,开始使用这个新能力构建。
要了解更多关于Amazon时间同步服务,请查阅Linux和Windows的EC2用户指南。