Precision Time Protocol (PTP) は、ハードウェアレベルのタイムスタンプと動的パス補正を使用して、サブマイクロ秒レベルのクロック同期を実現します。この機能は、分散システムにおけるタイミングの一貫性を保証し、高頻度金融取引など、厳格な時刻精度が求められるシナリオに最適です。
PTP とは
PTP 時刻同期機能は現在、招待プレビュー段階です。この機能を利用するには、チケットを送信して申請してください。
Precision Time Protocol (PTP) は、IEEE 1588 標準に基づく高精度なネットワーク時刻同期プロトコルです。PTP は、ハードウェアレベルのタイムスタンプ、動的パス補正、インテリジェントなマスター/スレーブクロックのネゴシエーションなどの技術を利用して、従来のネットワーク時刻プロトコル (Network Time Protocol (NTP) など) におけるミリ秒レベルの誤差のボトルネックを克服します。このボトルネックは、主にソフトウェア処理の遅延とネットワークジッターによって引き起こされます。PTP は、分散システム内のデバイスにサブマイクロ秒レベルの時刻同期を提供します。
NTP と比較して、PTP はハードウェアタイムスタンプを使用して計算をオフロードします。これにより、CPU とネットワークリソースの消費を削減しながら、より高い精度を実現します:
特徴 | PTP | NTP |
精度 | サブマイクロ秒 | ミリ秒 |
タイムスタンプの実装 | ハードウェアサポート (PHC デバイスなど) | ソフトウェア実装 |
ネットワーク環境 | ローカルエリアネットワークまたは低遅延 | 広域ネットワーク |
リソース消費 | 低 (メッセージ交換頻度を制御可能) | 高 (頻繁なメッセージ交換に依存) |
代表的なアプリケーション | 金融取引 | インターネットサーバー、一般デバイス |
Alibaba Cloud の PTP 同期アーキテクチャは、ゾーンレベルでアクティブおよびスタンバイの原子時計を冗長構成でデプロイします。プライマリ原子時計は GPS 時刻と同期し、その後、IEEE 1588 PTP バウンダリクロックプロトコルを使用して階層的な同期トポロジを構築し、サブマイクロ秒レベルの時刻信号を Elastic Compute Service (ECS) インスタンスに配信します。
デフォルトでは、ECS インスタンスは Chrony または NTP サービスを実行して時刻同期を行います。サポートされているリージョンとインスタンスタイプで PTP 時刻同期サービスを有効にすることで、高精度な時刻同期を実現できます。
利用シーン
高頻度金融取引:PTP のサブマイクロ秒レベルの同期精度とハードウェアタイムスタンプにより、取引所間での注文タイミングの厳密な整合性が保証されます。これにより、クロックドリフトによる取引順序の紛争を回避できます。低遅延ネットワークにおけるサブマイクロ秒レベルのジッター制御と組み合わせることで、PTP は高頻度取引におけるタイミングの公平性とコンプライアンスに関する厳しい要件を満たします。
制限事項
サポートされるリージョンとゾーン:
リージョン名
リージョン ID
ゾーン名
ゾーン ID
中国 (香港)
cn-hongkong
ゾーン B (招待プレビュー)
cn-hongkong-b
ゾーン C (招待プレビュー)
cn-hongkong-c
ゾーン D (招待プレビュー)
cn-hongkong-d
サポートされるインスタンスファミリー:
API 操作 DescribeInstanceTypes を呼び出して、インスタンスタイプがサポートされているかどうかをクエリできます。応答の Clock パラメーター内の PtpSupport パラメーターが supported に設定されている場合、そのインスタンスタイプは PTP をサポートしています。インスタンスタイプが PTP をサポートしていない場合、PtpSupport パラメーターは応答に含まれません。
サポートされるイメージ:Linux イメージがサポートされています。公式イメージバージョンの使用を推奨します。
Linux カーネルのバージョンは 4.12 以降である必要があります。
ECS インスタンスの PTP の有効化または無効化
PTP 時刻同期サービスの有効化
コンソールで PTP を有効化
インスタンスの作成
ECS コンソールの [カスタム起動] タブに移動します。PTP をサポートするリージョン、インスタンスタイプ、イメージを選択します。次に、[詳細設定 (オプション)] セクションで、PTP 時刻同期サービスを有効にします。
既存のインスタンスの場合
インスタンスが配置されている物理サーバーが PTP をサポートしていない場合は、インスタンスを再起動してサポートされている物理サーバーに移行してから PTP を有効にする必要があります。
に移動し、対象インスタンスの ID をクリックしてインスタンス詳細ページに移動します。
[インスタンス詳細] ページで、[その他] ドロップダウンリストから を選択します。
[PTP 時刻同期サービスの設定] ダイアログボックスで、PTP 時刻同期サービスを有効にします。
[OK] をクリックすると、[PTP 時刻同期タスク] ウィンドウが表示されます。
タスク ID をクリックしてタスクの進捗状況を表示します。タスクが完了すると、ダイアログボックスは自動的に閉じ、インスタンスの PTP 時刻同期サービスが有効になります。
パブリックイメージには Cloud Assistant がプリインストールされています。
パブリックコマンドとプラグイン機能を使用するには Cloud Assistant が必要です。
Cloud Assistant パブリックコマンド
ECS コンソールの [Cloud Assistant] ページに移動し、[パブリックコマンド] タブに切り替えます。
ACS-ECS-EnablePTP-for-linux.shコマンドを見つけ、[操作] 列の [実行] をクリックします。実行中のインスタンスを選択し、[実行] をクリックします。
Cloud Assistant プラグイン
PHC ハードウェアデバイスが存在するかどうかを確認します。
PHC ハードウェアデバイスが存在しない場合は、チケットを送信してください。
lspci | grep 500cPTP 時刻同期サービスが有効になっている場合、コマンドは次の情報を返します:

Cloud Assistant コマンドを実行してバージョンを確認します。バージョンは
2.2.3.631以降である必要があります。バージョンが古い場合は、Cloud Assistant をアップグレードしてください。acs-plugin-manager --version現在のリージョンで Cloud Assistant プラグインが利用可能であることを確認します。
Cloud Assistant プラグインが利用できない場合は、チケットを送信してください。
acs-plugin-manager --list | grep ACS-PTP-MonitorCloud Assistant を使用してドライバーをインストールします。
このコマンドは通常 10 分以内に完了します。
acs-plugin-manager --exec --plugin ACS-PTP-Monitor --params --install --timeout 0ptp-monitor サービスを開始します。
このコマンドは、chrony の設定を更新し、chronyd を再起動し、起動時に ptp-monitor が開始されるように有効化し、ptp-monitor サービスを開始します。
acs-plugin-manager --exec --plugin ACS-PTP-Monitor --params --start
インストールパッケージ
次のコマンドを実行して、PHC ハードウェアデバイスを確認します。
lspci | grep 500cPTP 時刻同期サービスが有効になっている場合、コマンドは次の情報を返します:

次のコマンドを実行して、圧縮されたスクリプトパッケージを取得します。インターネット接続が必要です。
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-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 --startchronyd サービスが再起動された後、PTP クロックソースは数十秒以内に有効になります。これは、インスタンスの PTP 時刻同期サービスを表示することで確認できます。
PTP 時刻同期サービスの無効化
コンソールで PTP を無効化
に移動し、対象インスタンスの ID をクリックしてインスタンス詳細ページに移動します。
[インスタンス詳細] ページで、[その他] ドロップダウンリストから を選択します。
[PTP 時刻同期サービスの設定] ダイアログボックスで、PTP 時刻同期サービスを無効にします。
[OK] をクリックすると、[PTP 時刻同期タスク] ウィンドウが表示されます。
タスク ID をクリックしてタスクの進捗状況を表示します。タスクが完了すると、ダイアログボックスは自動的に閉じ、インスタンスの PTP 時刻同期サービスが無効になります。
パブリックイメージには Cloud Assistant がプリインストールされています。
パブリックコマンドとプラグイン機能を使用するには Cloud Assistant が必要です。
Cloud Assistant パブリックコマンド
ECS コンソールの [Cloud Assistant] ページに移動し、[パブリックコマンド] タブに切り替えます。
ACS-ECS-DisablePTP-for-linux.shコマンドを見つけ、[操作] 列の [実行] をクリックします。実行中のインスタンスを選択し、[実行] をクリックします。
Cloud Assistant プラグイン
次のコマンドを実行して、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:時刻ソースの階層レベルです。値が小さいほど精度が高くなります (原子時計や GPS は 0、直接接続された高精度ソースは 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 ナノ秒 = 10⁻⁹ 秒)。RMS offset:長期的な二乗平均平方根オフセットで、この例では 1,175 ナノ秒です。これは時刻同期の安定性を反映しています。Frequency:システムクロックの周波数バイアスです。slowは、ローカルクロックが PTP ハードウェアクロックPHC0よりも 1 秒あたり 5.213 マイクロ秒遅れていることを示します (ppm = parts per million)。Root delay:ルート時刻ソースまでの合計ネットワーク遅延です。図に示されている非常に低い遅延は、非常に安定したネットワーク環境を示しています。
よくある質問
OpenAPI を使用して PTP 時刻同期サービスを有効または無効にできますか?
PTP 時刻同期サービスを有効または無効にできます。
インスタンスの作成:RunInstances を呼び出し、ClockOptions の PtpStatus パラメーターを enabled または disabled に設定して、PTP 時刻同期サービスが有効または無効になった ECS インスタンスを作成します。
既存のインスタンスの場合:ModifyInstanceClockOptions を呼び出し、PtpStatus を enabled または disabled に設定して、インスタンスの PTP 時刻同期サービスを有効または無効にします。
呼び出しが成功すると、タスク ID (TaskId) が返されます。DescribeTasks を呼び出し、TaskAction を ModifyInstanceClockOptions に設定し、TaskIds を対応するタスク ID に設定することで、タスクのリアルタイム実行ステータスをクエリできます。
DescribeInstances を呼び出し、AdditionalAttributes を CLOCK_OPTIONS に設定して、インスタンスで PTP 時刻同期サービスが有効になっているかどうかを確認します。
RunCommand を呼び出し、関連するコマンドを実行して設定を完了します。
PTP は NTP と併用できますか?
はい、できます。PTP は NTP に影響を与えません。chronyd は内部アルゴリズムを使用して最適なクロックソースを選択します。設定に基づいて、PTP をクロックソースとして優先します。
ドライバーをインストールする際に、「dkms: command not found」というエラーが報告されます。
PTP ドライバーをインストールする際、まず必要なツールパッケージがインストールされます。dkms ツールはこれらの依存関係の 1 つです。dkms パッケージのインストール問題を解決する必要があります。ドライバーのインストール失敗に関する詳細なエラーログについては、/var/log/ptp-cipu-ptp-monitor.log をご参照ください。
シナリオ 1:repo ソースの設定が最新でない可能性があります。repo ソースを更新して、再度お試しください。
シナリオ 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 機能に必要であり、そのインストールはインスタンスに影響を与えません。PTP ドライバーをアンインストールするには、次の Cloud Assistant コマンドを実行します:
acs-plugin-manager --exec --plugin ACS-PTP-Monitor --params --uninstall