EC2の新しいPlacement Group戦略「precision-time」でマイクロ秒精度の時刻同期環境を構築してみた
はじめに
2026年6月30日、Amazon EC2に新しいPlacement Group戦略 precision-time が追加されました。
Precision Time Placement Group(PTPG)にインスタンスを配置して起動することで、Enhanced NTP(Stratum 1)を追加設定なしに利用できます。さらにPTP Hardware Clock(PHC)を有効化すれば、マイクロ秒精度の時刻同期が可能です。PHCの利用にはENAドライバのPHC有効化が必要です。
既存戦略との比較
今回precision-timeが4つ目の戦略として追加されました。
| 戦略 | 目的 | 配置の特徴 |
|---|---|---|
| cluster | 低レイテンシ通信 | 同一AZ内の近接ハードウェアに配置 |
| spread | 障害分離 | 異なるハードウェアに分散配置 |
| partition | 大規模分散処理の障害分離 | パーティション単位でハードウェアを分離 |
| precision-time(New) | 高精度時刻同期 | 時刻同期対応ハードウェアに配置 |
Precision Time Placement Group の価値
PTPGがもたらすメリットは以下の通りです。
- 配置保証: PTPG内で起動に成功した場合、マイクロ秒精度の時刻同期に対応したハードウェアへ配置されます。PTPGを使わない場合、非対応ハードウェアに配置される可能性があります
- 起動直後から Enhanced NTP: PGを指定して起動するだけで、追加設定なしにStratum 1のNTPソースにアクセスできます
- PHC の利用前提: PTP Hardware Clock(PHC)デバイスへのアクセスには、PTPGでの起動に加えENAドライバのPHC有効化が必要です
- cluster PGとの組み合わせ:
ParentGroupIdパラメータでPTPGを親に指定したcluster PGを作成できます。低レイテンシ通信と高精度時刻同期を1つのインスタンス配置で両立できます
対応インスタンスファミリー
Gen7以降の主要ファミリーが対応しています。
- General purpose: M7a, M7g, M7g-flex, M7gd, M7i, M7i-flex, M8a, M8g, M8g-flex
- Compute optimized: C7a, C7gd, C7i, C7i-flex, C8g, C8g-flex, C8gd
- Memory optimized: R7a, R7g, R7i, R7id, R8g, X8adez, X8adz-3tb, X8adz-6tb, X8adzs, X8aedez, X8aedz-3tb, X8aedz-6tb, X8aez, X8az, X8g, X8ge
- Storage optimized: I8g, I8ge
検証内容
検証環境
| 項目 | 値 |
|---|---|
| リージョン | ap-northeast-1 |
| インスタンスタイプ | m8g.medium |
| AMI | Amazon Linux 2023 (arm64) |
| ENA ドライバ | 2.17.1g(プリインストール、PHC 対応) |
Placement Group の作成
まず precision-time 戦略でPTPGを作成します。
aws ec2 create-placement-group \
--group-name pt-precision-time \
--strategy precision-time
{
"PlacementGroup": {
"GroupName": "pt-precision-time",
"State": "available",
"Strategy": "precision-time",
"GroupId": "pg-0648b44a41XXXXXXXX",
"GroupArn": "arn:aws:ec2:ap-northeast-1:XXXXXXXXXXXX:placement-group/pt-precision-time"
}
}
次に、このPTPGを親としてcluster PGを作成します。--parent-group-id にPTPGのGroupIdを指定します。
aws ec2 create-placement-group \
--group-name pt-cluster \
--strategy cluster \
--parent-group-id pg-0648b44a41XXXXXXXX
{
"PlacementGroup": {
"GroupName": "pt-cluster",
"State": "available",
"Strategy": "cluster",
"GroupId": "pg-067283747bXXXXXXXX",
"GroupArn": "arn:aws:ec2:ap-northeast-1:XXXXXXXXXXXX:placement-group/pt-cluster",
"ParentGroupId": "pg-0648b44a41XXXXXXXX"
}
}
describe-placement-groups で確認します。
aws ec2 describe-placement-groups \
--group-ids pg-0648b44a41XXXXXXXX pg-067283747bXXXXXXXX
{
"PlacementGroups": [
{
"GroupName": "pt-precision-time",
"State": "available",
"Strategy": "precision-time",
"GroupId": "pg-0648b44a41XXXXXXXX",
"GroupArn": "arn:aws:ec2:ap-northeast-1:XXXXXXXXXXXX:placement-group/pt-precision-time"
},
{
"GroupName": "pt-cluster",
"State": "available",
"Strategy": "cluster",
"GroupId": "pg-067283747bXXXXXXXX",
"GroupArn": "arn:aws:ec2:ap-northeast-1:XXXXXXXXXXXX:placement-group/pt-cluster",
"ParentGroupId": "pg-0648b44a41XXXXXXXX"
}
]
}
cluster PGの ParentGroupId にPTPGのGroupIdが設定されていることが確認できました。この構成により、cluster PG内のインスタンスは低レイテンシ通信と高精度時刻同期の両方の恩恵を受けられます。
インスタンス起動(UserDataでPHC自動設定)
UserDataでPHCの有効化とchrony設定を自動化します。起動完了時点で、chronyがPHCをrefclockとして参照する状態にします。
#!/bin/bash
# PHC有効化
echo "options ena phc_enable=1" > /etc/modprobe.d/ena.conf
modprobe -r ena && modprobe ena phc_enable=1
# デバイスノード再生成
udevadm control --reload-rules && udevadm trigger
sleep 2
# chronyにPHC refclock追加
if ! grep -q "refclock PHC" /etc/chrony.conf; then
echo "refclock PHC /dev/ptp0 poll 0 delay 0.000010 prefer" >> /etc/chrony.conf
fi
systemctl restart chronyd
cluster PG(親=PTPG)にこのUserDataを指定してインスタンスを起動します。
aws ec2 run-instances \
--image-id ami-06c0572560181f1c8 \
--instance-type m8g.medium \
--placement GroupId=pg-067283747bXXXXXXXX \
--iam-instance-profile Name=SSMInstanceProfile \
--user-data file://userdata-phc.sh \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=pt-test}]'
インスタンスが正常に起動しました。cloud-initの完了まで約8.5秒で、その時点でchronydはPHC refclockを同期ソースとして選択していました。
起動後の確認
起動後にSSM Session Managerで接続し、PHCの動作を確認します。
$ chronyc sources
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
#* PHC0 0 0 377 1 -253ns[ -288ns] +/- 5030ns
^- 169.254.169.123 1 4 177 5 +11us[ +11us] +/- 101us
PHC0がStratum 0のrefclockとして選択されています。UserDataによる自動設定が正常に動作し、chronyがPHCを同期ソースとして利用していることを確認できました。
$ chronyc tracking
(抜粋)
Stratum : 1
System time : 0.000000113 seconds slow of NTP time
Root delay : 0.000010000 seconds
Root dispersion : 0.000001312 seconds
chronyc trackingではStratum 1と表示されています。これはStratum 0のPHCを参照したシステムがStratum 1になる正常な挙動です。chronyc trackingの表示上、System timeは約113ナノ秒、Root dispersionは約1.3マイクロ秒でした。これらはchronyによる推定値ですが、PHCを同期ソースとして利用している状態を確認できます。なおRoot delayの値はchrony設定で指定したdelay 0.000010が反映されたものです。
PHCデバイスも確認します。
$ cat /sys/class/ptp/ptp0/clock_name
ena-ptp-00
UserDataのポイント
modprobe -r ena && modprobe ena phc_enable=1でENAドライバを再ロードしています。再ロード中は一時的にネットワークが切断されますが、UserData(cloud-init)はインスタンス起動初期に実行されるため、手動接続中のセッションに影響する場面はありませんudevadm trigger後のsleep 2はPHCデバイスノード(/dev/ptp0)の生成待ちです- 今回の環境ではENA再ロード後に
/dev/ptp_enasymlinkを確認できなかったため、chrony設定では/dev/ptp0を直接指定しています modprobe.d/ena.confへの永続化設定により、インスタンス再起動時もPHCが自動的に有効化されます
クリーンアップ
cluster PG → PTPGの順で削除します(親を先に削除できません)。
# インスタンス終了
aws ec2 terminate-instances --instance-ids i-XXXXXXXXXXXXXXXXX
# cluster PG 削除
aws ec2 delete-placement-group --group-name pt-cluster
# PTPG 削除
aws ec2 delete-placement-group --group-name pt-precision-time
まとめ
EC2のPlacement Groupに新しい戦略 precision-time が追加されました。PTPGで起動に成功した対応インスタンスは、マイクロ秒精度の時刻同期に対応したハードウェアへ配置されます。
今回の検証では、PTPGにインスタンスを配置して起動することでEnhanced NTP(Stratum 1)を追加設定なしに利用できること、さらにENAドライバでPHCを有効化することでchronyがPHCを同期ソースとして利用できることを確認しました。
また、ParentGroupId パラメータによりPTPGを親にしたcluster PGを作成でき、低レイテンシ通信と高精度時刻同期を1つのインスタンス配置で両立できます。分散データベースの時刻管理やホスト間のログ相関など、厳密な時刻同期が求められるワークロードで活用できる機能です。








