11.4. ハードウェアのタイムスタンプを使用した Chrony
一部のネットワークインターフェイスコントローラー (NIC) のハードウェアタイムスタンプ (HW) は、着信パケットと発信パケットの正確なタイムスタンプを提供します。NTP タイムスタンプは通常、カーネルにより作成され、システムクロックを使用して chronyd が作成されます。ただし、ハードウェアのタイムスタンプが有効な場合、NIC は独自のクロックを使用して、パケットがリンク層または物理層に出入りするときにタイムスタンプを生成します。ハードウェアスタンプで NTP を使用すると、同期の精度を大幅に向上できます。最高精度を実現するには、NTP サーバーおよび NTP クライアントの両方が、ハードウェアのタイムスタンプを使用している必要があります。理想的な条件下では、サブマイクロ秒単位の精度を実現できるかもしれません。
ハードウェアのタイムスタンプを使用する時間同期の別のプロトコルには、PTP があります。
NTP とは異なり、PTP は、ネットワークスイッチおよびルーターの補助に依存しています。最高の同期精度を実現する場合は、PTP をサポートするスイッチやルーターがあるネットワークでは PTP を使用し、そのようなスイッチやルーターがないネットワークでは NTP を選択してください。
11.4.1. ハードウェアタイムスタンプのサポートの確認 リンクのコピーリンクがクリップボードにコピーされました!
NTP を使用したハードウェアのタイムスタンプがインターフェイスでサポートされていることを確認するには、ethtool -T コマンドを実行します。ethtool が、SOF_TIMESTAMPING_TX_HARDWARE 機能、SOF_TIMESTAMPING_TX_SOFTWARE 機能、および HWTSTAMP_FILTER_ALL フィルターモードをリスト表示する場合は、NTP を使用して、ハードウェアのタイムスタンプにインターフェイスを使用できます。
手順
- デバイスのタイムスタンプ機能と、関連する PTP ハードウェアクロックを表示します。
ethtool -T enp1s0
# ethtool -T enp1s0
11.4.2. ハードウェアのタイムスタンプの有効化 リンクのコピーリンクがクリップボードにコピーされました!
/etc/chrony.conf ファイルの hwtimestamp ディレクティブを使用して、1 つまたは複数のインターフェイスでハードウェアタイムスタンプを有効にできます。ディレクティブは、個別のインターフェイスを指定できますが、ワイルドカード文字を使用して、ハードウェアのタイムスタンプをサポートするすべてのインターフェイスでハードウェアのタイムスタンプを有効にすることもできます。
手順
/etc/chrony.confファイルを編集し、次の変更を加えます。ハードウェアタイムスタンプをサポートするインターフェイスに
hwtimestamp設定を追加します。以下に例を示します。hwtimestamp enp1s0 hwtimestamp eno*
hwtimestamp enp1s0 hwtimestamp eno*Copy to Clipboard Copied! Toggle word wrap Toggle overflow ptp4lなどの他のアプリケーションがハードウェアタイムスタンプを使用していない場合は、ワイルドカード * を使用できます。minpollおよびmaxpollオプションをサーバー設定に追加して、短いクライアントポーリング間隔を設定します。次に例を示します。server ntp.example.comlocal minpoll 0 maxpoll 0
server ntp.example.comlocal minpoll 0 maxpoll 0Copy to Clipboard Copied! Toggle word wrap Toggle overflow ハードウェアタイムスタンプの場合、システムクロックのオフセットを最小限に抑えるために、デフォルトの範囲 (64 - 1024 秒) よりも短いポーリング間隔を設定する必要があります。
サーバー設定に
xleaveオプションを追加して、NTP インターリーブモードを有効にします。server ntp.example.comlocal minpoll 0 maxpoll 0 xleave
server ntp.example.comlocal minpoll 0 maxpoll 0 xleaveCopy to Clipboard Copied! Toggle word wrap Toggle overflow この設定では、chrony はパケットを送信した後にのみハードウェア送信タイムスタンプを取得します。この動作により、サーバーが応答するパケット内のタイムスタンプを、サーバーが保存できなくなります。
xleaveオプションを使用すると、chrony は送信後に生成された送信タイムスタンプを受信できます。オプション: サーバーでクライアントのアクセスのロギング用に割り当てられるメモリーの最大サイズを増やします。次に例を示します。
clientloglimit 100000000
clientloglimit 100000000Copy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトのサーバー設定では、数千のクライアントが同時にインターリーブモードを使用できます。
clientloglimit設定の値を増やすことで、多数のクライアントに対応するサーバーを設定できます。
chronyd サービスを再起動します。
systemctrl restart chronyd
# systemctrl restart chronydCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
オプション:
/var/log/messagesログファイルでハードウェアタイムサンプリングが有効になっていることを確認します。chronyd[4081]: Enabled HW timestamping on enp1s0 chronyd[4081]: Enabled HW timestamping on eno1
chronyd[4081]: Enabled HW timestamping on enp1s0 chronyd[4081]: Enabled HW timestamping on eno1Copy to Clipboard Copied! Toggle word wrap Toggle overflow chronyd が NTP クライアントまたはピアとして設定されている場合、送信および受信タイムスタンプモードとインターリーブモードを表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow NTP 測定の安定性を表示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
この安定性は、Std Dev 列に表示されます。ハードウェアタイムスタンプを有効にすると、NTP 測定の安定性は、通常の負荷で数十または数百ナノ秒になります。
11.4.3. PTP-NTP ブリッジの設定 リンクのコピーリンクがクリップボードにコピーされました!
非常に精度が高い PTP (Precision Time Protocol) のプライマリータイムセーバーが、PTP サポートのあるスイッチまたはルーターを持たないネットワークで利用可能な場合、コンピューターは、PTP スレーブおよび stratum-1 の NTP サーバーとしての操作に専念する可能性があります。このようなコンピューターには、2 つ以上のネットワークインターフェイスが必要であり、プライマリータイムサーバーの近くに配置するか、プライマリータイムサーバーに直接接続する必要があります。これにより、ネットワークで非常に精度の高い同期が確実に実行されます。
手順
-
1 つのインターフェイスを使用して、
PTPでシステムクロックを同期するように、linuxptpパッケージの ptp4l プログラムおよび phc2sys プログラムを設定します。
chronydを設定して、その他のインターフェイスを使用してシステム時間を提供するには、以下を行います。bindaddress 203.0.113.74 hwtimestamp enp1s0 local stratum 1
bindaddress 203.0.113.74 hwtimestamp enp1s0 local stratum 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow chronyd サービスを再起動します。
systemctrl restart chronyd
# systemctrl restart chronydCopy to Clipboard Copied! Toggle word wrap Toggle overflow