14.5. ハードウェアのタイムスタンプを使用した Chrony
一部のネットワークインターフェイスコントローラー (NIC) のハードウェアタイムスタンプ (HW) は、着信パケットと発信パケットの正確なタイムスタンプを提供します。NTP
タイムスタンプは通常、カーネルにより作成され、システムクロックを使用して chronyd が作成されます。ただし、ハードウェアのタイムスタンプが有効な場合、NIC は独自のクロックを使用して、パケットがリンク層または物理層に出入りするときにタイムスタンプを生成します。ハードウェアスタンプで NTP
を使用すると、同期の精度を大幅に向上できます。最高精度を実現するには、NTP
サーバーおよび NTP
クライアントの両方が、ハードウェアのタイムスタンプを使用している必要があります。理想的な条件下では、サブマイクロ秒単位の精度を実現できるかもしれません。
ハードウェアのタイムスタンプを使用する時間同期の別のプロトコルには、PTP
があります。
NTP
とは異なり、PTP
は、ネットワークスイッチおよびルーターの補助に依存しています。最高の同期精度を実現する場合は、PTP
をサポートするスイッチやルーターがあるネットワークでは PTP
を使用し、そのようなスイッチやルーターがないネットワークでは NTP
を選択してください。
14.5.1. ハードウェアタイムスタンプのサポートの確認
NTP
を使用したハードウェアのタイムスタンプがインターフェイスでサポートされていることを確認するには、ethtool -T
コマンドを実行します。ethtool
が、SOF_TIMESTAMPING_TX_HARDWARE
機能、SOF_TIMESTAMPING_TX_SOFTWARE
機能、および HWTSTAMP_FILTER_ALL
フィルターモードをリスト表示する場合は、NTP
を使用して、ハードウェアのタイムスタンプにインターフェイスを使用できます。
手順
- デバイスのタイムスタンプ機能と、関連する PTP ハードウェアクロックを表示します。
# ethtool -T enp1s0
14.5.2. ハードウェアのタイムスタンプの有効化
/etc/chrony.conf
ファイルの hwtimestamp
ディレクティブを使用して、1 つまたは複数のインターフェイスでハードウェアタイムスタンプを有効にできます。ディレクティブは、個別のインターフェイスを指定できますが、ワイルドカード文字を使用して、ハードウェアのタイムスタンプをサポートするすべてのインターフェイスでハードウェアのタイムスタンプを有効にすることもできます。
手順
/etc/chrony.conf
ファイルを編集し、次の変更を加えます。ハードウェアタイムスタンプをサポートするインターフェイスに
hwtimestamp
設定を追加します。以下に例を示します。hwtimestamp enp1s0 hwtimestamp eno*
ptp4l
などの他のアプリケーションがハードウェアタイムスタンプを使用していない場合は、ワイルドカード * を使用できます。minpoll
およびmaxpoll
オプションをサーバー設定に追加して、短いクライアントポーリング間隔を設定します。次に例を示します。server ntp.example.comlocal minpoll 0 maxpoll 0
ハードウェアタイムスタンプの場合、システムクロックのオフセットを最小限に抑えるために、デフォルトの範囲 (64 - 1024 秒) よりも短いポーリング間隔を設定する必要があります。
サーバー設定に
xleave
オプションを追加して、NTP インターリーブモードを有効にします。server ntp.example.comlocal minpoll 0 maxpoll 0 xleave
この設定では、chrony はパケットを送信した後にのみハードウェア送信タイムスタンプを取得します。この動作により、サーバーが応答するパケット内のタイムスタンプを、サーバーが保存できなくなります。
xleave
オプションを使用すると、chrony は送信後に生成された送信タイムスタンプを受信できます。オプション: サーバーでクライアントのアクセスのロギング用に割り当てられるメモリーの最大サイズを増やします。次に例を示します。
clientloglimit 100000000
デフォルトのサーバー設定では、数千のクライアントが同時にインターリーブモードを使用できます。
clientloglimit
設定の値を増やすことで、多数のクライアントに対応するサーバーを設定できます。
chronyd サービスを再起動します。
# systemctrl restart chronyd
検証
オプション:
/var/log/messages
ログファイルでハードウェアタイムサンプリングが有効になっていることを確認します。chronyd[4081]: Enabled HW timestamping on enp1s0 chronyd[4081]: Enabled HW timestamping on eno1
chronyd が NTP クライアントまたはピアとして設定されている場合、送信および受信タイムスタンプモードとインターリーブモードを表示します。
# chronyc ntpdata Output: [literal,subs="+quotes,verbatim,normal"] Remote address : 203.0.113.15 (CB00710F) Remote port : 123 Local address : 203.0.113.74 (CB00714A) Leap status : Normal Version : 4 Mode : Server Stratum : 1 Poll interval : 0 (1 seconds) Precision : -24 (0.000000060 seconds) Root delay : 0.000015 seconds Root dispersion : 0.000015 seconds Reference ID : 47505300 (GPS) Reference time : Wed May 03 13:47:45 2017 Offset : -0.000000134 seconds Peer delay : 0.000005396 seconds Peer dispersion : 0.000002329 seconds Response time : 0.000152073 seconds Jitter asymmetry: +0.00 NTP tests : 111 111 1111 Interleaved : Yes Authenticated : No TX timestamping : Hardware RX timestamping : Hardware Total TX : 27 Total RX : 27 Total valid RX : 27
NTP 測定の安定性を表示します。
# chronyc sourcestats Output: [literal,subs="+quotes,verbatim,normal"] .... 210 Number of sources = 1 Name/IP Address NP NR Span Frequency Freq Skew Offset Std Dev ntp.local 12 7 11 +0.000 0.019 +0ns 49ns ....
この安定性は、Std Dev
列に表示されます。ハードウェアタイムスタンプを有効にすると、NTP 測定の安定性は、通常の負荷で数十または数百ナノ秒になります。
14.5.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
chronyd サービスを再起動します。
# systemctrl restart chronyd