17.6. HW タイムスタンプを使った Chrony

17.6.1. ハードウェアタイムスタンプについて

ハードウェアタイムスタンプは、一部の Network Interface Controller (NIC) でサポートされている機能です。これは、送受信されるパケットの正確なタイムスタンプを提供します。NTP タイムスタンプは通常、システムクロックを使用してカーネルおよび chronyd が作成します。しかし、HW タイムスタンプが有効になると、パケットがリンク層または物理層に出入りする際に、NIC は独自のクロックを使用してタイムスタンプを生成します。NTP と共に使用すると、ハードウェアタイムスタンプは、同期の精度を大幅に向上させることができます。 最高精度を実現するには、NTP サーバーと NTP クライアントの両方が、ハードウェアタイムスタンプを使用しなければなりません。理想的な条件下では、サブマイクロ秒単位の精度を実現できるかもしれません。
ハードウェアタイムスタンプを使用する時間同期の別のプロトコルに、PTP があります。PTP に関する詳細は、19章ptp4l を使用した PTP の設定 を参照してください。NTP とは異なり、PTP はネットワークスイッチおよびルーターの支援に依存します。最高精度の同期を実現したい場合は、PTP サポートのあるスイッチおよびルーターを持つネットワーク上で PTP を使用し、このようなスイッチおよびルーターを持たないネットワーク上では NTP を使用します。

17.6.2. ハードウェアタイムスタンプのサポートの確認

NTP でのハードウェアタイムスタンプがインターフェースによってサポートされていることを確認するには、ethtool -T コマンドを使用します。ethtool が、SOF_TIMESTAMPING_TX_HARDWARE および SOF_TIMESTAMPING_TX_SOFTWARE 機能、そして HWTSTAMP_FILTER_ALL フィルターモードも一覧表示する場合、NTP を使ったハードウェアタイムスタンプにインターフェースを使用できます。

例17.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)

17.6.3. ハードウェアタイムスタンプの有効化

ハードウェアタイムスタンプを有効にするには、/etc/chrony.conf ファイルの hwtimestamp ディレクティブを使用します。ディレクティブは、単一のインターフェースを指定できます。または、ワイルドカードキャラクター (*) を使用して、ハードウェアタイムスタンプをサポートするすべてのインターフェース上で、ハードウェアタイムスタンプを有効にすることができます。linuxptp パッケージの ptp4l など、他のアプリケーションがインターフェース上でハードウェアタイムスタンプを使用していない場合に備えて、ワイルドカード仕様を使います。複数の hwtimestamp ディレクティブが、chrony 設定ファイルで許可されています。

例17.3 hwtimestamp のディレクティブを使用したハードウェアタイムスタンプの実現

hwtimestamp eth0
hwtimestamp eth1
hwtimestamp *

17.6.4. クライアントポーリング間隔の設定

インターネット上のサーバーのポーリング間隔は、デフォルトの範囲である 64 秒から 1024 秒が推奨されています。ローカルサーバーおよびハードウェアタイムスタンプでは、システムクロックのオフセットを最小限にとどめるため、ポーリング間隔は短く設定する必要があります。
/etc/chrony.conf 内の以下のディレクティブは、1 秒のポーリング間隔を使用してローカルの NTP サーバーを指定します。
server ntp.local minpoll 0 maxpoll 0

17.6.5. インターリーブモードの有効化

ハードウェアの NTP アプライアンスではなく、たとえば chrony など、ソフトウェアの NTP 実装を実行する一般目的のコンピューターである NTP サーバーは、パケット送信後にのみハードウェア転送先タイムスタンプを取得します。この動作により、サーバーは対応するパケットにタイムスタンプを保存することができません。転送後に生成された転送先タイムスタンプを受信する NTP クライアントを有効にするには、/etc/chrony.conf のサーバーディレクティブに xleave オプションを追加し、クライアントが NTP インターリーブモードを使用するように設定します。
server ntp.local minpoll 0 maxpoll 0 xleave

17.6.6. 多数のクライアント向けのサーバーの設定

デフォルトのサーバー設定では、最多で数千のクライアントが同時にインターリーブモードを使用できます。さらに多くのクライアント向けにサーバーを設定するには、/etc/chrony.confclientloglimit ディレクティブを増やします。このディレクティブは、サーバー上でクライアントのアクセスログに割り当てられたメモリーの最大サイズを指定します。
clientloglimit 100000000

17.6.7. ハードウェアタイムスタンプの確認

インターフェースがハードウェアタイムスタンプを正常に有効化したことを確認するには、システムログを確認してください。ログには、各インターフェース向けに chronyd からのメッセージが、正常に有効化されたハードウェアタイムスタンプと共に含まれているはずです。

例17.4 ハードウェアタイムスタンプが有効化されたインターフェースでメッセージをログ

chronyd[4081]: Enabled HW timestamping on eth0
chronyd[4081]: Enabled HW timestamping on eth1
chronyd が、NTP クライアントまたはピアとして設定されている場合、chronyc ntpdata コマンドにより、転送先と受信先タイムスタンプモードおよびインターリーブモードを各 NTP ソースに報告することができます。

例17.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

例17.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

17.6.8. PTP-NTP ブリッジの設定

非常に精度が高い Precision Time Protocol (PTP) のグランドマスターが、 PTP サポートのあるスイッチまたはルーターを持たないネットワークで利用可能な場合、コンピューターは、PTP スレーブおよび stratum-1 NTP サーバーとしての操作に専念する可能性があります。このようなコンピューターには、2 つ以上のネットワークインターフェースが必要なほか、グランドマスターに近いか、またはグランドマスターと直接接続されている必要があります。これにより、ネットーワークで非常に精度の高い同期が確実に実行されます。
linuxptp パッケージから ptp4l および phc2sys のプログラムを設定し、PTP を使用してシステムクロックを同期するためにインターフェースを 1 つ使用します。この設定は、19章ptp4l を使用した PTP の設定 で説明しています。他のインターフェースを使用してシステムの時間を提供するために chronyd を設定します。

例17.7 他のインターフェースを使用してシステムに時間を提供するよう chronyd を設定

bindaddress 203.0.113.74
hwtimestamp eth1
local stratum 1