13.3. ハードウェアのタイムスタンプを使用した Chrony
ハードウェアのタイムスタンプは、一部の Network Interface Controller (NIC) でサポートされている機能です。着信パケットおよび送信パケットのタイムスタンプを正確に提供します。NTP
タイムスタンプは通常、カーネルにより作成され、システムクロックを使用して chronyd が作成されます。ただし、ハードウェアのタイムスタンプが有効な場合、NIC は独自のクロックを使用して、パケットがリンク層または物理層に出入りするときにタイムスタンプを生成します。ハードウェアスタンプで NTP
を使用すると、同期の精度を大幅に向上できます。最高精度を実現するには、NTP
サーバーおよび NTP
クライアントの両方が、ハードウェアのタイムスタンプを使用している必要があります。理想的な条件下では、サブマイクロ秒単位の精度を実現できるかもしれません。
ハードウェアのタイムスタンプを使用する時間同期の別のプロトコルには、PTP
があります。
NTP
とは異なり、PTP
は、ネットワークスイッチおよびルーターの補助に依存しています。同期の精度を最高の状態にしたい場合は、PTP
をサポートしているスイッチやルーターがあるネットワークで PTP
を使用し、そのようなスイッチおよびルーターがないネットワークでは、NTP
を使用することが推奨されます。
以下のセクションでは、次の方法を説明します。
- ハードウェアタイムスタンプのサポートの確認
- ハードウェアのタイムスタンプの有効化
- クライアントポーリング間隔の設定
- インターリーブモードの有効化
- 多数のクライアント向けのサーバー設定
- ハードウェアのタイムスタンプの確認
- PTP-NTP ブリッジの設定
13.3.1. ハードウェアタイムスタンプのサポートの確認
NTP
を使用したハードウェアのタイムスタンプがインターフェイスでサポートされていることを確認するには、ethtool -T
コマンドを実行します。ethtool
が、SOF_TIMESTAMPING_TX_HARDWARE
機能、SOF_TIMESTAMPING_TX_SOFTWARE
機能、および HWTSTAMP_FILTER_ALL
フィルターモードをリスト表示する場合は、NTP
を使用して、ハードウェアのタイムスタンプにインターフェイスを使用できます。
例13.2 特定のインターフェイスにおけるハードウェアのタイムスタンプのサポートの確認
# ethtool -T eth0
出力:
Timestamping parameters for eth0: Capabilities: hardware-transmit (SOF_TIMESTAMPING_TX_HARDWARE) software-transmit (SOF_TIMESTAMPING_TX_SOFTWARE) hardware-receive (SOF_TIMESTAMPING_RX_HARDWARE) software-receive (SOF_TIMESTAMPING_RX_SOFTWARE) software-system-clock (SOF_TIMESTAMPING_SOFTWARE) hardware-raw-clock (SOF_TIMESTAMPING_RAW_HARDWARE) PTP Hardware Clock: 0 Hardware Transmit Timestamp Modes: off (HWTSTAMP_TX_OFF) on (HWTSTAMP_TX_ON) Hardware Receive Filter Modes: none (HWTSTAMP_FILTER_NONE) all (HWTSTAMP_FILTER_ALL) ptpv1-l4-sync (HWTSTAMP_FILTER_PTP_V1_L4_SYNC) ptpv1-l4-delay-req (HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ) ptpv2-l4-sync (HWTSTAMP_FILTER_PTP_V2_L4_SYNC) ptpv2-l4-delay-req (HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ) ptpv2-l2-sync (HWTSTAMP_FILTER_PTP_V2_L2_SYNC) ptpv2-l2-delay-req (HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ) ptpv2-event (HWTSTAMP_FILTER_PTP_V2_EVENT) ptpv2-sync (HWTSTAMP_FILTER_PTP_V2_SYNC) ptpv2-delay-req (HWTSTAMP_FILTER_PTP_V2_DELAY_REQ)
13.3.2. ハードウェアのタイムスタンプの有効化
ハードウェアのタイムスタンプを有効にするには、/etc/chrony.conf
ファイルの hwtimestamp
ディレクティブを使用します。ディレクティブは、個別のインターフェイスを指定できますが、ワイルドカード文字を使用して、ハードウェアのタイムスタンプをサポートするすべてのインターフェイスでハードウェアのタイムスタンプを有効にすることもできます。linuxptp
パッケージの ptp4l などのアプリケーションが、ハードウェアのタイムスタンプを使用していない場合は、ワイルドカード仕様を使用してください。chrony 設定ファイルで、複数の hwtimestamp
ディレクティブが使用されます。
例13.3 hwtimestamp のディレクティブを使用したハードウェアのタイムスタンプの有効化
hwtimestamp eth0 hwtimestamp eth1 hwtimestamp *
13.3.3. クライアントポーリング間隔の設定
インターネット上のサーバーのポーリング間隔は、デフォルトの範囲である 64 秒から 1024 秒が推奨されています。ローカルサーバーおよびハードウェアのタイムスタンプでは、システムクロックのオフセットを最小限にとどめるため、ポーリング間隔は短く設定する必要があります。
/etc/chrony.conf
における以下のディレクティブは、1 秒のポーリング間隔を使用してローカルの NTP
サーバーを指定します。
server ntp.local minpoll 0 maxpoll 0
13.3.4. インターリーブモードの有効化
ハードウェアの NTP
アプライアンスではなく、chrony など、ソフトウェアの NTP
実装を実行する汎用コンピューターの NTP
サーバーは、パケット送信後にのみハードウェア送信タイムスタンプを取得します。この動作により、サーバーは、対応するパケットのタイムスタンプを保存できません。NTP
クライアントが、送信後に生成された送信タイムスタンプを受け取るようにするには、/etc/chrony.conf
のサーバーディレクティブに xleave
オプションを追加し、クライアントが NTP
インターリーブモードを使用するように設定します。
server ntp.local minpoll 0 maxpoll 0 xleave
13.3.5. 多数のクライアント向けのサーバーの設定
デフォルトのサーバー設定では、最多で数千のクライアントが同時にインターリーブモードを使用できます。さらに多くのクライアント向けにサーバーを設定するには、/etc/chrony.conf
の clientloglimit
ディレクティブを増やします。このディレクティブは、サーバーでクライアントのアクセスログに割り当てられるメモリーの最大サイズを指定します。
clientloglimit 100000000
13.3.6. ハードウェアのタイムスタンプの確認
インターフェイスがハードウェアのタイムスタンプを有効にできたことを確認するには、システムログを確認してください。ログには、chronyd
からの各インターフェイス向けメッセージに、有効にしたハードウェアのタイムスタンプが追記されているはずです。
例13.4 ハードウェアのタイムスタンプが有効になったインターフェイスのログメッセージ
chronyd[4081]: Enabled HW timestamping on eth0 chronyd[4081]: Enabled HW timestamping on eth1
chronyd
が、NTP
クライアントまたはピアとして設定されている場合は、chronyc ntpdata
コマンドにより、送信先と受信先のタイムスタンプおよびインターリーブモードを、各 NTP
ソースに報告できます。
例13.5 各 NTP ソースの送信先および受信先のタイムスタンプおよびインターリーブモードの報告
# chronyc ntpdata
出力:
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
例13.6 NTP 測定の安定性の報告
# chronyc sourcestats
ハードウェアのタイムスタンプを有効にすると、NTP
測定の安定性は、通常のロードにおいて数十ナノ秒または数百ナノ秒となります。この安定性は、chronyc sourcestats
コマンドの出力の Std Dev
列に報告されます。
出力:
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
13.3.7. PTP-NTP ブリッジの設定
非常に精度が高い PTP
(Precision Time Protocol) のプライマリータイムセーバーが、PTP
サポートのあるスイッチまたはルーターを持たないネットワークで利用可能な場合、コンピューターは、PTP
スレーブおよび stratum-1 の NTP
サーバーとしての操作に専念する可能性があります。このようなコンピューターには、2 つ以上のネットワークインターフェイスが必要であり、プライマリータイムサーバーの近くに配置するか、プライマリータイムサーバーに直接接続する必要があります。これにより、ネットワークで非常に精度の高い同期が確実に実行されます。
1 つのインターフェイスを使用して、PTP
でシステムクロックを同期するように、linuxptp
パッケージの ptp4l プログラムおよび phc2sys プログラムを設定します。
chronyd
を設定して、その他のインターフェイスを使用してシステム時間を提供するには、以下を行います。
例13.7 その他のインターフェイスを使用してシステム時間を提供するように chronyd を設定
bindaddress 203.0.113.74 hwtimestamp eth1 local stratum 1