Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

17.6. ハードウェアのタイムスタンプを使用した Chrony

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

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

例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