高精度時刻同期プロトコル (PTP) は、高頻度の金融取引などの分散システム向けに、ハードウェアタイムスタンプを使用してサブマイクロ秒のクロック同期を実現します。
PTP とは
PTP 時刻同期機能は現在、招待制プレビュー段階です。この機能を使用するには、チケットを送信してお申し込みください。
高精度時刻同期プロトコル (PTP) は、IEEE 1588 に基づく高精度な時刻同期プロトコルです。PTP は、ハードウェアタイムスタンプ、動的なパス補正、およびマスター/スレーブクロックネゴシエーションを使用して、ソフトウェア処理の遅延やネットワークジッターによって引き起こされるネットワークタイムプロトコル (NTP) のミリ秒レベルの精度限界を克服します。PTP は、分散システムにサブマイクロ秒の同期を提供します。
NTP と比較して、PTP はタイムスタンプ処理をハードウェアにオフロードすることで、CPU とネットワークのオーバーヘッドを削減し、精度を向上させます。
|
機能 |
PTP |
NTP |
|
精度 |
サブマイクロ秒 |
ミリ秒 |
|
タイムスタンプの実装 |
ハードウェアサポート (PHC デバイスなど) |
ソフトウェア実装 |
|
ネットワーク環境 |
ローカルエリアネットワークまたは低遅延 |
ワイドエリアネットワーク |
|
リソース消費 |
低 (メッセージ頻度を制御可能) |
高 (頻繁なメッセージ交換に依存) |
|
代表的なアプリケーション |
金融取引 |
インターネットサーバー、一般デバイス |
Alibaba Cloud は、ゾーンごとに冗長なアクティブ/スタンバイ構成の原子時計をデプロイしています。プライマリクロックは GPS と同期し、IEEE 1588 のバウンダリクロックを使用して階層的なトポロジーを構築し、Elastic Compute Service (ECS) インスタンスにサブマイクロ秒の時刻信号を配信します。
デフォルトでは、ECS インスタンスは Chrony または NTP を使用して時刻同期を行います。サポートされているリージョンとインスタンスタイプで PTP を有効にすると、サブマイクロ秒の精度を実現できます。
ユースケース
高頻度の金融取引:PTP のハードウェアタイムスタンプは、取引所間の注文タイミングをサブマイクロ秒の精度で整合させ、クロックドリフトによる紛争を防ぎ、タイミングの公平性とコンプライアンス要件を満たします。
制限事項
-
サポートされているリージョンとゾーン:
リージョン名
リージョン ID
ゾーン名
ゾーン ID
中国 (香港)
cn-hongkong
ゾーン B (招待制プレビュー)
cn-hongkong-b
ゾーン C (招待制プレビュー)
cn-hongkong-c
ゾーン D (招待制プレビュー)
cn-hongkong-d
-
サポートされているインスタンスファミリー:
DescribeInstanceTypes API を呼び出すことで、インスタンスタイプがサポートされているかどうかを照会できます。レスポンスの Clock パラメーター内の PtpSupport パラメーターが supported に設定されている場合、そのインスタンスタイプは PTP をサポートしています。インスタンスタイプが PTP をサポートしていない場合、PtpSupport パラメーターはレスポンスに含まれません。
-
汎用インスタンスファミリー g9i、コンピューティング最適化インスタンスファミリー c9i、および メモリ最適化インスタンスファミリー r9i (招待制プレビュー)
-
汎用 ECS ベアメタルインスタンスファミリーの ebmg9i、ebmc9i、および ebmr9i (招待制プレビュー)
-
高クロック周波数コンピューティング最適化インスタンスファミリー hfc9i、高クロック周波数汎用インスタンスファミリー hfg9i、および高クロック周波数メモリ最適化インスタンスファミリー hfr9i
-
-
サポートされているイメージ:Linux イメージのみ。公式イメージバージョンを推奨します。
-
Linux カーネルのバージョンは 4.12 以降である必要があります。
ECS インスタンスの PTP の有効化または無効化
PTP 時刻同期サービスの有効化
-
コンソールでの PTP の有効化
-
インスタンスの作成
ECS コンソールの [カスタム購入] タブに移動します。PTP をサポートするリージョン、インスタンスタイプ、イメージを選択します。詳細オプション セクションで、PTP を有効にします。
-
既存のインスタンスの場合
物理サーバーが PTP をサポートしていない場合は、インスタンスを再起動してサポートされているサーバーに移行してから PTP を有効にしてください。
-
に移動し、対象インスタンスの ID をクリックしてインスタンスの詳細ページに移動します。
-
[インスタンス詳細] ページで、すべての操作 ドロップダウンリストから、 を選択します。
-
[PTP 時刻同期サービスの設定] ダイアログボックスで、PTP を有効にします。
[OK] をクリックすると、[PTP 時刻同期タスク] ウィンドウが表示されます。
-
タスク ID をクリックして進捗状況を表示します。タスクが完了すると、インスタンスで PTP が有効になります。
-
-
-
クラウドアシスタントはパブリックイメージにプリインストールされています。
公開コマンドとプラグイン機能にはクラウドアシスタントが必要です。
クラウドアシスタントの共通コマンド
-
ECS コンソールの Cloud Assistant ページに移動し、共通コマンド タブに切り替えます。
-
ACS-ECS-EnablePTP-for-linux.shコマンドを見つけ、実行 列の [実行] をクリックします。 -
実行中のインスタンスを選択し、実行 をクリックします。
クラウドアシスタントプラグイン
-
PHC ハードウェアデバイスが存在するかどうかを確認します。
PHC ハードウェアデバイスが存在しない場合は、チケットを送信してください。
lspci | grep 500cPTP が有効な場合、コマンドは以下を返します。

-
クラウドアシスタントのバージョンを確認します。バージョン
2.2.3.631以降が必要です。それより古い場合は、Cloud Assistant をアップグレードしてください。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 500cPTP が有効な場合、コマンドは以下を返します。

-
圧縮されたスクリプトパッケージをダウンロードします。インターネット接続が必要です。
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-latestUbuntu や 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 --startPTP クロックソースは数十秒以内に有効になります。PTP 同期ステータスの表示で確認してください。
-
PTP 時刻同期サービスの無効化
-
コンソールでの PTP の無効化
-
に移動し、対象インスタンスの ID をクリックしてインスタンスの詳細ページに移動します。
-
[インスタンス詳細] ページで、すべての操作 ドロップダウンリストから、 を選択します。
-
[PTP 時刻同期サービスの設定] ダイアログボックスで、PTP を無効にします。
[OK] をクリックすると、[PTP 時刻同期タスク] ウィンドウが表示されます。
-
タスク ID をクリックして進捗状況を表示します。タスクが完了すると、インスタンスで PTP が無効になります。
-
-
クラウドアシスタントはパブリックイメージにプリインストールされています。
公開コマンドとプラグイン機能にはクラウドアシスタントが必要です。
クラウドアシスタントの共通コマンド
-
ECS コンソールの Cloud Assistant ページに移動し、共通コマンド タブに切り替えます。
-
ACS-ECS-DisablePTP-for-linux.shコマンドを見つけ、実行 列の [実行] をクリックします。 -
実行中のインスタンスを選択し、実行 をクリックします。
クラウドアシスタントプラグイン
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 ハードウェアクロックを主要な同期ソースとしてナノ秒レベルの精度で使用しているインスタンスを示しています。

-
MS:時刻ソースの識別子。PHC0は PTP ハードウェアクロックを示し、IP アドレスは NTP サーバーを示します。#*はアクティブな同期ソースを示します。この例では、インスタンスは PTP ハードウェアクロックを使用しています。 -
Stratum:Stratum レベル。値が小さいほど精度が高くなります (0 = 原子時計または GPS、1 = 直接接続された高精度ソース)。 -
Poll:ポーリング間隔の指数。間隔 =2^Poll秒。たとえば、Poll=4= 16 秒です。 -
Reach:直近 8 回の同期試行の成功率を示す 8 進数。 -
LastRx:最後の応答を受信してからの秒数。 -
Last sample:最後の測定からのクロックオフセット。フォーマットはoffset [raw offset] +/- errorで、システム時刻とソース時刻の差を反映します。
PTP 同期状態の監視
chronyc tracking を実行して、時刻の偏り、周波数エラー、ネットワーク遅延などのシステムクロックの状態メトリクスを表示してください。
出力例:
この例では、時刻の偏りはナノ秒レベル (System time = 1 ns、RMS offset = 1,175 ns) であり、周波数エラーは低い (5.213 ppm) ため、ハードウェアクロックが安定して動作していることを示しています。

-
System time:システムクロックと PTP ハードウェアクロックPHC0との間の偏り。slowは、システム時刻が 1 ナノ秒遅れていることを意味します (1 ns = 10⁻⁹ s)。 -
RMS offset:長期的な二乗平均平方根オフセット (この例では 1,175 ns) で、同期の安定性を反映します。 -
Frequency:システムクロックの周波数の偏り。slowは、ローカルクロックがPHC0よりも 5.213 µs/s 遅く動作していることを意味します (ppm = parts per million、100 万分の 1)。 -
Root delay:ルート時刻ソースまでの合計ネットワーク遅延。低遅延は、安定したネットワーク環境を示します。
よくある質問
OpenAPI を使用して PTP 時刻同期サービスを有効または無効にできますか?
-
OpenAPI を介して PTP を有効または無効にできます。
-
インスタンスの作成:RunInstances API を呼び出し、ClockOptions の PtpStatus を enabled または disabled に設定します。
-
既存のインスタンスの場合:ModifyInstanceClockOptions API を呼び出し、PtpStatus を enabled または disabled に設定します。
成功すると、タスク ID (TaskId) が返されます。DescribeTasks API を呼び出し、TaskAction を ModifyInstanceClockOptions に、TaskIds をタスク ID に設定して、タスクのステータスを照会してください。
-
-
DescribeInstances API を呼び出し、AdditionalAttributes を CLOCK_OPTIONS に設定して PTP のステータスを確認してください。
-
RunCommand API を呼び出して関連コマンドを実行し、設定を完了してください。
PTP は NTP と併用できますか?
はい。PTP は NTP に影響しません。chronyd は内部アルゴリズムを使用して最適なクロックソースを選択し、設定に基づいて PTP を優先します。
ドライバーをインストールする際に "dkms: command not found" エラーが報告されます。
PTP ドライバーのインストールでは、まず dkms を含む必要なツールパッケージがインストールされます。dkms パッケージのインストールの問題を解決してください。詳細なエラーログについては、/var/log/ptp-cipu-ptp-monitor.log を参照してください。
-
シナリオ 1:リポジトリソースが古い可能性があります。リポジトリソースを更新して、再試行してください。
-
シナリオ 2:dkms の公式ウェブサイトからパッケージをダウンロードしてください。
ptp-monitor プログラムの自動起動を有効または無効にするにはどうすればよいですか?
ptp-monitor はインスタンス上で実行される O&M コンポーネントです。実行し続けることを推奨しますが、必須ではありません。デフォルトでは、起動時に自動的に開始されます。
-
起動時の自動起動を無効にします。
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 に必要であり、インスタンスには影響しません。アンインストールするには、次のクラウドアシスタントコマンドを実行してください。
acs-plugin-manager --exec --plugin ACS-PTP-Monitor --params --uninstall