第20章 ptp4l を使用した PTP の設定

20.1. PTP の概要

Precision Time Protocol (PTP) は、ネットワーク内でのクロック同期に使用されるプロトコルです。ハードウェアサポートと合わせて使用すると PTP はマイクロ秒以下の正確性があり、これは NTP で得られる正確性よるもはるかに優れています。PTP サポートは、カーネルとユーザースペースに分けられます。Red Hat Enterprise Linux のカーネルには PTP クロックのサポートが含まれており、これはネットワークドライバーが提供しています。実際のプロトコル実装は linuxptp と呼ばれ、これは Linux の IEEE 標準 1588 に準拠した PTPv2 実装です。

linuxptp パッケージには、クロック同期用の ptp4l および phc2sys プログラムが含まれています。ptp4l プログラムは、PTP 境界クロックと通常のクロックを実装します。ハードウェアタイムスタンプでは PTP ハードウェアクロックのマスタークロックとの同期に使用され、ソフトウェアタイムスタンプではシステムクロックのマスタークロックとの同期に使用されます。phc2sys プログラムは、システムクロックを ネットワークインターフェースカード (NIC) 上の PTP ハードウェアクロックと同期するハードウェアタイムスタンプでのみ必要となります。

20.1.1. PTP を理解する

PTP で同期するクロックは、マスター/スレーブ階層で組織されています。スレーブはマスターと同期し、このマスターは別のマスターのスレーブとなっています。この階層は、best master clock (BMC) アルゴリズムで作成され、自動的に更新されます。クロックにポートが 1 つしかない場合は、マスター または スレーブ にすることができます。このようなクロックは 通常のクロック (OC)と呼ばれます。クロックにポートが 1 つしかない場合、これはマスターにもスレーブにもなることができ、boundary クロック (BC) と呼ばれます。トップレベルのマスターは、Global Positioning System (GPS) のタイムソースを使用して同期できる グランドマスタークロック と呼ばれます。GPS ベースの時間ソースを使うことで、高度の正確性を保って異なるネットワークが同期可能になります。

図20.1 PTP グランドマスター、境界、スレーブの各クロック

PTP グランドマスターを示す図

20.1.2. PTP の利点

PTPNetwork Time Protocol (NTP) よりも優れている点の 1 つは、様々な network interface controllers (NIC) およびネットワークスイッチにあるハードウェアサポートです。この特化されたハードウェアにより、PTP はメッセージ送信の遅れを説明でき、時間同期の精度を大幅に高められます。ネットワーク内で PTP 以外に対応するハードウェアコンポーネントを使用することは可能ですが、その場合、変動が増えたり、遅れが非対称となったりして、同期が不正確になります。これにより、通信パスで使用される複数の非 PTP 対応コンポーネントが追加されます。可能な限りの精度を実現するには、PTP クロック間の全ネットワークコンポーネントが PTP ハードウェアを有効にすることが推奨されます。ネットワークハードウェアが PTP に対応していない大規模なネットワークでの時間同期は、NTP に適している場合があります。

ハードウェア PTP サポートでは、NIC には独自のオンボードクロックがあります。これは受信および送信の PTP メッセージのタイムスタンプで使用されます。PTP マスターに同期しているオンボードクロックで、コンピューターのシステムクロックは NIC 上の PTP ハードウェアクロックに同期されます。ソフトウェア PTP サポートでは、システムクロックは PTP メッセージのタイムスタンプに使用され、PTP マスターに直接同期します。ソフトウェア PTP サポートではオペレーティングシステムによる追加の PTP パケット処理を必要としますが、ハードウェア PTP サポートでは、NIC が PTP パケットの送受信時の瞬間にタイムスタンプができるので、より優れた正確性が得られます。

20.2. PTP の使用

PTP を使用するには、対象とするインターフェース用のカーネルネットワークドライバーがソフトウェアまたはハードウェアのタイムスタンプ機能をサポートしている必要があります。

20.2.1. ドライバーおよびハードウェアサポートの確認

ドライバーがハードウェアタイムスタンプをサポートしていることに加え、NIC も物理的なハードウェアでこの機能をサポートできる必要があります。特定のドライバーおよび NIC のタイムスタンプ機能を検証する最善の方法は、以下のように ethtool ユーティリティーを使ってインターフェースにクエリーすることです。

~]# ethtool -T eth3
Time stamping parameters for eth3:
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)

ここでの eth3 は、チェックするインターフェースになります。

ソフトウェアタイムスタンプのサポートについては、パラメーター一覧に以下を含めます。

  • SOF_TIMESTAMPING_SOFTWARE
  • SOF_TIMESTAMPING_TX_SOFTWARE
  • SOF_TIMESTAMPING_RX_SOFTWARE

ハードウェアタイムスタンプのサポートについては、パラメーター一覧に以下を含めます。

  • SOF_TIMESTAMPING_RAW_HARDWARE
  • SOF_TIMESTAMPING_TX_HARDWARE
  • SOF_TIMESTAMPING_RX_HARDWARE

20.2.2. PTP のインストール

Red Hat Enterprise Linux のカーネルには、PTP のサポートが含まれています。ユーザー空間のサポートは、linuxptp パッケージのツールで提供されます。linuxptp をインストールするには、以下のコマンドを root で発行します。

~]# yum install linuxptp

これで ptp4l および phc2sys がインストールされます。

システムクロックの時間を設定するサービスを同時に 2 つ以上実行しないでください。NTP を使用して PTP 時間を提供する場合は、「NTP を使った PTP 時間の実行」 を参照してください。

20.2.3. ptp4l の起動

ptp4l プログラムはコマンドラインから起動することも、サービスとして起動することもできます。サービスとして実行する場合、オプションは /etc/sysconfig/ptp4l ファイルに指定されます。サービスおよびコマンドラインの両方で使用する必要のあるオプションは /etc/ptp4l.conf ファイルに指定されます。/etc/sysconfig/ptp4l ファイルには -f /etc/ptp4l.conf コマンドラインオプションが含まれています。これにより、ptp4l プログラムは /etc/ptp4l.conf ファイルを読み込んで、含まれるオプションを処理します。/etc/ptp4l.conf の使用については、「設定ファイルの指定」 で説明します。各種の異なる ptp4l オプションおよび設定ファイルの設定についての詳細は、ptp4l(8) man ページを参照してください。

ptp4l をサービスとして起動

ptp4l をサービスとして起動するには、root で以下のコマンドを発行します。

~]# systemctl start ptp4l

Red Hat Enterprise Linux 7でのシステムサービスの管理の詳細については、10章systemd によるサービス管理 を参照してください。

コマンドラインからの ptp4l の使用

ptp4l プログラムは、デフォルトでハードウェアタイムスタンプを使用しようとします。ハードウェアタイムスタンプ対応のドライバーおよび NIC で ptp4l を使用するには、使用するネットワークインターフェースに -i オプションを指定します。root で以下のコマンドを入力します。

~]# ptp4l -i eth3 -m

eth3 は、設定するインターフェースに置き換えます。以下は、NIC 上の PTP クロックがマスターに同期された際の ptp4l からの出力例です。

~]# ptp4l -i eth3 -m
selected eth3 as PTP clock
port 1: INITIALIZING to LISTENING on INITIALIZE
port 0: INITIALIZING to LISTENING on INITIALIZE
port 1: new foreign master 00a069.fffe.0b552d-1
selected best master clock 00a069.fffe.0b552d
port 1: LISTENING to UNCALIBRATED on RS_SLAVE
master offset -23947 s0 freq +0 path delay    11350
master offset -28867 s0 freq +0 path delay    11236
master offset -32801 s0 freq +0 path delay    10841
master offset -37203 s1 freq +0 path delay    10583
master offset -7275 s2 freq -30575 path delay  10583
port 1: UNCALIBRATED to SLAVE on MASTER_CLOCK_SELECTED
master offset -4552 s2 freq -30035 path delay  10385

マスターオフセットの値は、マスターからナノ秒で測定されたオフセットです。s0s1s2 文字列は、異なるクロックサーボ状態を示します。s0 はアンロック、s1 はクロックステップ、s2 はロックされていることを示します。servo がロック状態 (s2) の場合は、pi_offset_const オプションが設定ファイルの正の値 (ptp4l(8) で説明) に設定されていない限り、クロックはステップになりません (徐々に調整されるのみ)。adj 値は、10 億分の 1 (ppb) 単位のクロックの周波数調整です。パス遅延値は、マスターから送信される同期メッセージの遅延 (ナノ秒単位) です。Port 0 は、ローカル PTP 管理に使用される Unix ドメインソケットです。Port 1 は、eth3 インターフェースです (上の例に基づく)。 INITIALIZING、LISTENING、UNCALIBRATED、および SLAVE は、INITIALIZE、RS_SLAVE、MASTER_CLOCK_SELECTED イベントで変化する可能性のあるポート状態です。最後の状態変更メッセージでは、ポート状態が UNCALIBRATED から SLAVE に変更し、PTP マスタークロックとの同期が成功したことを示しています。

ptp4l からのメッセージのロギング

デフォルトでは、メッセージは /var/log/messages に送信されます。ただし、-m オプションを指定すると標準出力へのロギングが可能になり、これはデバッグで役に立ちます。

ソフトウェアタイムスタンプを有効にするには、以下のように -S オプションを使用する必要があります。

~]# ptp4l -i eth3 -m -S

20.2.3.1. 遅延測定メカニズムの選択

遅延測定メカニズムには 2 種類あり、以下のように ptp4l コマンドにオプションを追加することで選択できます。

-P

-P オプションは ピアツーピア (P2P) 遅延測定メカニズムを選択します。

P2P メカニズムはネットワークトポロジーの変更に他のメカニズムよりも速く反応し、遅延の測定がより正確であることから、より好まれます。P2P メカニズムが使用できるのは、各ポートが最大で他の 1 つの P2P ポートで PTP メッセージを交換するトポロジーだけです。これは、透過クロックを含む通信パス上のすべてのハードウェアでサポートされ、使用される必要があります。

-E

-E は、エンドツーエンド (E2E) の遅延測定メカニズムを選択します。これはデフォルトです。

E2E メカニズムは、遅延リクエスト-レスポンスメカニズムとも呼ばれます。

-A

-A オプションは、遅延測定メカニズムの自動選択を有効にします。

自動オプションは、E2Eptp4l を起動します。ピアの遅延リクエストを受け取ると、P2P モードに変更します。

注記

1 つの PTP 通信パス上のクロックはすべて、遅延を測定するために同じメカニズムを使用する必要があります。以下の場合に警告が表示されます。

  • E2E メカニズムを使用しているポートでピアの遅延リクエストを受け取る場合
  • P2P メカニズムを使用しているポートで E2E の遅延リクエストを受け取る場合

20.3. 複数のインターフェースでの PTP の使用

PTP を異なるネットワークの複数のインターフェースで使用する場合、reverse path forwarding (逆方向パス転送) モードを loose mode (緩やかなモード) に変更する必要があります。Red Hat Enterprise Linux 7 はデフォルトで Strict Reverse Path Forwarding を使用します。これは、RFC 3704, Ingress Filtering for Multihomed Networks の厳密な逆方向パスに関する推奨事項に準拠します。詳細は、Red Hat Enterprise Linux 7 セキュリティガイド逆方向パス転送 セクションを参照してください。

sysctl ユーティリティーは、チューニング可能なカーネルの値を読み取り、値を書き込むために使用されます。実行中のシステムへの変更は、sysctl コマンドを使用してコマンドラインで直接実行できます。永続的な変更は、行を /etc/sysctl.conf ファイルに追加することで実行できます。

  • loose mode (緩やかなモード) のフィルタリングにグローバルに変更するには、root で以下のコマンドを入力します。

    ~]# sysctl -w net.ipv4.conf.default.rp_filter=2
    ~]# sysctl -w net.ipv4.conf.all.rp_filter=2
  • ネットワークインターフェースごとに逆方向パスフィルタリングモードを変更するには、すべての PTP インターフェースで net.ipv4.interface.rp_filter コマンドを使用します。たとえば、デバイス名が em1 のインターフェースの場合は、以下のようになります。

    ~]# sysctl -w net.ipv4.conf.em1.rp_filter=2

これらの設定を再起動しても保持するには、/etc/sysctl.conf ファイルを変更します。すべてのインターフェースのモード、または特定のインターフェースのモードを変更できます。

すべてのインターフェースのモードを変更するには、/etc/sysctl.conf ユーザーとして実行しているエディターで root ファイルを開き、以下の行を追加します。

net.ipv4.conf.all.rp_filter=2

一部のインターフェースのみを変更するには、以下の形式で複数の行を追加します。

net.ipv4.conf.interface.rp_filter=2
注記

すべてのインターフェースと特定のインターフェースの設定を使用する場合、各インターフェースのソースを検証する際に conf/{all,interface}/rp_filter の最大値が使用されます。

default 設定を使用してモードを変更することも可能です。これは、新規に作成されたインターフェースのみに適用されることを意味します。

sysctl パラメーターにおける allsysctl、または特定のデバイス設定の使用に関する詳細は、Red Hat ナレッジベースの記事「What is the difference between "all", "default" and a specific device in a sysctl parameter?」を参照してください。

起動プロセス中に実行される sysctl サービスのタイミングにより、2 つのタイプの問題が発生する可能性がある点に注意してください。

  1. ドライバーは、sysctl サービスの実行前に読み込まれます。

    この場合、影響のあるネットワークインターフェースは、カーネルで事前に設定されたモードを使用し、sysctl デフォルトは無視されます。

    この問題の解決方法については、Red Hat ナレッジベースの記事「What is the difference between "all", "default" and a specific device in a sysctl parameter?」を参照してください。

  2. ドライバーは、sysctl サービスの実行後に読み込まれるか、または再度読み込まれます。

    この場合、再起動後に一部の sysctl.conf パラメーターは使用されていない可能性があります。これらの設定は利用できないか、またはデフォルトに戻る可能性があります。

    この問題の解決方法については、Red Hat ナレッジベースの記事「Some sysctl.conf parameters are not used after reboot, manually adjusting the settings works as expected を参照してください。

20.4. 設定ファイルの指定

コマンドラインオプションやコマンドラインで設定できないその他のオプションは、オプションの設定ファイルで設定することができます。

デフォルトでは、設定ファイルは読み取られないため、-f オプションを指定してランタイム時に指定する必要があります。以下に例を示します。

~]# ptp4l -f /etc/ptp4l.conf

上記の -i eth3 -m -S オプションと同等の設定ファイルは、以下のようになります。

~]# cat /etc/ptp4l.conf
[global]
verbose        1
time_stamping     software
[eth3]

20.5. PTP 管理クライアントの使用

PTP 管理クライアントである pmc を使うと、以下のように ptp4l から追加情報を取得することができます。

~]# pmc -u -b 0 'GET CURRENT_DATA_SET'
sending: GET CURRENT_DATA_SET
    90e2ba.fffe.20c7f8-0 seq 0 RESPONSE MANAGMENT CURRENT_DATA_SET
        stepsRemoved    1
        offsetFromMaster -142.0
        meanPathDelay   9310.0
~]# pmc -u -b 0 'GET TIME_STATUS_NP'
sending: GET TIME_STATUS_NP
    90e2ba.fffe.20c7f8-0 seq 0 RESPONSE MANAGMENT TIME_STATUS_NP
        master_offset       310
        ingress_time        1361545089345029441
        cumulativeScaledRateOffset  +1.000000000
        scaledLastGmPhaseChange  0
        gmTimeBaseIndicator    0
        lastGmPhaseChange     0x0000'0000000000000000.0000
        gmPresent         true
        gmIdentity         00a069.fffe.0b552d

-b オプションを zero に設定すると、ローカルで実行している ptp4l インスタンスへの境界を制限されます。大きな境界値が大きいと、ローカルクロックからさらに PTP ノードから情報を取得します。取得できる情報は次のとおりです。

  • stepsRemoved は、グランドマスタークロックへの通信パスの数です。
  • offsetFromMaster および master_offset は、マスターから最後に測定されたオフセットをナノ秒で表します。
  • meanPathDelay は、マスターから送信された同期メッセージの遅延予測をナノ秒で表します。
  • gmPresent が true の場合、PTP クロックがマスターに同期され、ローカルクロックはグランドマスタークロックに同期されません。
  • gmIdentity はグランドマスターのアイデンティティーです。

pmc コマンドの完全な一覧を表示するには、root で以下を入力します。

~]# pmc help

pmc(8) man ページでは詳細情報が見られます。

20.6. クロックの同期

phc2sys プログラムは、システムクロックを NIC 上の PHC ハードウェアクロック (PTP) と同期するために使用されます。phc2sys サービスは /etc/sysconfig/phc2sys 設定ファイルで設定されます。/etc/sysconfig/phc2sys ファイルのデフォルト設定は以下のとおりです。

OPTIONS="-a -r"

-a オプションにより、phc2sysptp4l アプリケーションから同期されているクロックを読み取ります。これは、PTP ポートの状態の変更に従い、NIC ハードウェアクロック間の同期を適宜調整します。-r オプションも指定されていない限り、システムクロックは同期されません。システムクロックをタイムソースにするには、-r オプションを 2 回指定します。

/etc/sysconfig/phc2sys への変更後に、root でコマンドを実行し、コマンドラインから phc2sys サービスを再起動します。

~]# systemctl restart phc2sys

通常の状態では、systemctl コマンドを使用して、phc2sys サービスを起動し、停止し、再起動します。

phc2sys をサービスとして起動するには、コマンドラインからこれを起動できます。たとえば、root で以下のコマンドを入力します。

~]# phc2sys -a -r

-a オプションにより、phc2sysptp4l アプリケーションから同期されているクロックを読み取ります。システムクロックをタイムソースにするには、-r オプションを 2 回指定します。

または、-s オプションを指定して、システムクロックを特定のインターフェースの PTP ハードウェアクロックに同期します。以下に例を示します。

~]# phc2sys -s eth3 -w

-w オプションは、実行中の ptp4l アプリケーションが PTP クロックを同期するまで待機し、ptp4l から、TAI から UTC のオフセットを取得します。

通常、PTP国際原子時 (TAI) のタイムスケールで作動し、システムクロックは 協定世界時 (UTC) で維持されます。TAI と UTC のタイムスケール間の現在のオフセットは、36 秒です。このオフセットは、うるう秒が追加もしくは取り除かれると変化します。次のように、-w オプションを使用しない場合は、-O オプションを使用してこのオフセットを手動で設定する必要があります。

~]# phc2sys -s eth3 -O -36

phc2sys servo がロックされた状態になると、-S オプションを指定しない限り、クロックはステップされません。つまり、phc2sys プログラムは、ptp4l プログラムが PTP ハードウェアクロックを同期した後に起動すべきということになります。ただし、-w を使用すると、ptp4l の後に phc2sys を起動する必要はありません。これは、クロックの同期を待つためです。

phc2sys プログラムは、以下のコマンドを実行してサービスとしても起動できます。

~]# systemctl start phc2sys

サービスとして実行する場合、オプションは /etc/sysconfig/phc2sys ファイルに指定されます。phc2sys の他のオプションについての詳細情報は、phc2sys(8) man ページを参照してください。

本セクションの例では、コマンドがスレーブシステムまたはスレーブポートで実行されている想定であることに注意してください。

20.7. 時間同期の検証

PTP の時間同期が正常に機能していると、オフセットと頻度調整を含む新しいメッセージが、ptp4l と、ハードウェアタイムスタンプを使用している場合は phc2sys の、各出力に定期的に印刷されます。出力値はすぐに収束します。これらのメッセージは /var/log/messages ファイルに表示されます。

以下の ptp4l および phc2sys の出力例には次の内容が含まれています。

  • オフセット (ナノ秒)
  • 頻度のオフセット (10 億分の 1 (ppb))
  • 経路遅延 (ナノ秒)

ptp4l の出力例:

ptp4l[352.359]: selected /dev/ptp0 as PTP clock
ptp4l[352.361]: port 1: INITIALIZING to LISTENING on INITIALIZE
ptp4l[352.361]: port 0: INITIALIZING to LISTENING on INITIALIZE
ptp4l[353.210]: port 1: new foreign master 00a069.fffe.0b552d-1
ptp4l[357.214]: selected best master clock 00a069.fffe.0b552d
ptp4l[357.214]: port 1: LISTENING to UNCALIBRATED on RS_SLAVE
ptp4l[359.224]: master offset    3304 s0 freq   +0 path delay   9202
ptp4l[360.224]: master offset    3708 s1 freq -29492 path delay   9202
ptp4l[361.224]: master offset   -3145 s2 freq -32637 path delay   9202
ptp4l[361.224]: port 1: UNCALIBRATED to SLAVE on MASTER_CLOCK_SELECTED
ptp4l[362.223]: master offset    -145 s2 freq -30580 path delay   9202
ptp4l[363.223]: master offset    1043 s2 freq -29436 path delay   8972
ptp4l[364.223]: master offset    266 s2 freq -29900 path delay   9153
ptp4l[365.223]: master offset    430 s2 freq -29656 path delay   9153
ptp4l[366.223]: master offset    615 s2 freq -29342 path delay   9169
ptp4l[367.222]: master offset    -191 s2 freq -29964 path delay   9169
ptp4l[368.223]: master offset    466 s2 freq -29364 path delay   9170
ptp4l[369.235]: master offset     24 s2 freq -29666 path delay   9196
ptp4l[370.235]: master offset    -375 s2 freq -30058 path delay   9238
ptp4l[371.235]: master offset    285 s2 freq -29511 path delay   9199
ptp4l[372.235]: master offset    -78 s2 freq -29788 path delay   9204

phc2sys の出力例:

phc2sys[526.527]: Waiting for ptp4l...
phc2sys[527.528]: Waiting for ptp4l...
phc2sys[528.528]: phc offset   55341 s0 freq   +0 delay  2729
phc2sys[529.528]: phc offset   54658 s1 freq -37690 delay  2725
phc2sys[530.528]: phc offset    888 s2 freq -36802 delay  2756
phc2sys[531.528]: phc offset   1156 s2 freq -36268 delay  2766
phc2sys[532.528]: phc offset    411 s2 freq -36666 delay  2738
phc2sys[533.528]: phc offset    -73 s2 freq -37026 delay  2764
phc2sys[534.528]: phc offset    39 s2 freq -36936 delay  2746
phc2sys[535.529]: phc offset    95 s2 freq -36869 delay  2733
phc2sys[536.529]: phc offset   -359 s2 freq -37294 delay  2738
phc2sys[537.529]: phc offset   -257 s2 freq -37300 delay  2753
phc2sys[538.529]: phc offset    119 s2 freq -37001 delay  2745
phc2sys[539.529]: phc offset    288 s2 freq -36796 delay  2766
phc2sys[540.529]: phc offset   -149 s2 freq -37147 delay  2760
phc2sys[541.529]: phc offset   -352 s2 freq -37395 delay  2771
phc2sys[542.529]: phc offset    166 s2 freq -36982 delay  2748
phc2sys[543.529]: phc offset    50 s2 freq -37048 delay  2756
phc2sys[544.530]: phc offset    -31 s2 freq -37114 delay  2748
phc2sys[545.530]: phc offset   -333 s2 freq -37426 delay  2747
phc2sys[546.530]: phc offset    194 s2 freq -36999 delay  2749

ptp4l の出力を減らして値のみを印刷するときは、値のみを出力し summary_interval ディレクティブを使用します。summary_interval ディレクティブは、n の乗数 (秒単位) として 2 として指定されます。たとえば、出力を 1024 秒ごとに減らするには、以下の行を /etc/ptp4l.conf ファイルに追加します。

summary_interval 10

ptp4l の出力例。summary_interval は 6 に設定。

ptp4l: [615.253] selected /dev/ptp0 as PTP clock
ptp4l: [615.255] port 1: INITIALIZING to LISTENING on INITIALIZE
ptp4l: [615.255] port 0: INITIALIZING to LISTENING on INITIALIZE
ptp4l: [615.564] port 1: new foreign master 00a069.fffe.0b552d-1
ptp4l: [619.574] selected best master clock 00a069.fffe.0b552d
ptp4l: [619.574] port 1: LISTENING to UNCALIBRATED on RS_SLAVE
ptp4l: [623.573] port 1: UNCALIBRATED to SLAVE on MASTER_CLOCK_SELECTED
ptp4l: [684.649] rms 669 max 3691 freq -29383 ± 3735 delay 9232 ± 122
ptp4l: [748.724] rms 253 max 588 freq -29787 ± 221 delay 9219 ± 158
ptp4l: [812.793] rms 287 max 673 freq -29802 ± 248 delay 9211 ± 183
ptp4l: [876.853] rms 226 max 534 freq -29795 ± 197 delay 9221 ± 138
ptp4l: [940.925] rms 250 max 562 freq -29801 ± 218 delay 9199 ± 148
ptp4l: [1004.988] rms 226 max 525 freq -29802 ± 196 delay 9228 ± 143
ptp4l: [1069.065] rms 300 max 646 freq -29802 ± 259 delay 9214 ± 176
ptp4l: [1133.125] rms 226 max 505 freq -29792 ± 197 delay 9225 ± 159
ptp4l: [1197.185] rms 244 max 688 freq -29790 ± 211 delay 9201 ± 162

デフォルトでは summary_interval は 0 に設定されるため、メッセージは最大頻度である 1 秒ごとに出力されます。したがってメッセージは 1 秒ごとに印刷されます。メッセージを無効にするには、-l オプションを使用して最大ログレベルを5以下に設定します。

~]# phc2sys -l 5

-u オプションを指定すると、phc2sys 出力を減らすことができます。

~]# phc2sys -u summary-updates

ここでの summary-updates は、統計情報に含めるクロック更新数です。例を示します。

~]# phc2sys -s eth3 -w -m -u 60
phc2sys[700.948]: rms 1837 max 10123 freq -36474 ± 4752 delay 2752 ± 16
phc2sys[760.954]: rms 194 max 457 freq -37084 ± 174 delay 2753 ± 12
phc2sys[820.963]: rms 211 max 487 freq -37085 ± 185 delay 2750 ± 19
phc2sys[880.968]: rms 183 max 440 freq -37102 ± 164 delay 2734 ± 91
phc2sys[940.973]: rms 244 max 584 freq -37095 ± 216 delay 2748 ± 16
phc2sys[1000.979]: rms 220 max 573 freq -36666 ± 182 delay 2747 ± 43
phc2sys[1060.984]: rms 266 max 675 freq -36759 ± 234 delay 2753 ± 17

このオプションで使用すると、統計の更新の間隔は 60 秒 (-u) に設定され、phc2sys は、ptp4l が同期状態 (-w) になるまで待機します。また、メッセージは標準出力 (-m) に出力されます。phc2sys オプションの詳細は、phc2sys(5) の man ページを参照してください。

出力には以下が含まれます。

  • オフセット二乗平均平方根 (rms)
  • 最大絶対オフセット (max)
  • 頻度オフセット (freq): 平均および標準偏差
  • 経過遅延 (delay): 平均および標準偏差

20.8. NTP を使った PTP 時間の実行

ntpd デーモンは、ptp4l または phc2sys で同期されたシステムクロック、または LOCAL 参照クロックドライバーを使用して同期されたシステムクロックの時間を配布するように設定可能です。ntpd のシステムクロックを調整するのを防ぐには、ntp.conf ファイルで NTP サーバーを指定しないでください。以下に、ntp.conf の最小限の例を示します。

~]# cat /etc/ntp.conf
server  127.127.1.0
fudge  127.127.1.0 stratum 0
注記

DHCP クライアントプログラムである dhclientDHCP サーバーから NTP サーバーの一覧を受信して、これらを ntp.conf に追加し、サービスを再起動します。この機能を無効にするには、PEERNTP=no/etc/sysconfig/network に追加します。

20.9. PTP を使った NTP 時間の実行

逆方向の NTP から PTP への同期も可能です。ntpd を使用してシステムクロックを同期する場合、ptp4lpriority1 オプション (または、最適なマスタークロックアルゴリズムに含まれるその他のクロックオプション) でグランドマスタークロックとして設定し、システムクロックから PTP を介して時間を分配できます。

~]# cat /etc/ptp4l.conf
[global]
priority1 127
[eth3]
# ptp4l -f /etc/ptp4l.conf

ハードウェアタイムスタンプでは、phc2sys を使って PTP ハードウェアクロックをシステムクロックに同期する必要があります。phc2sys をサービスとして実行している場合は、/etc/sysconfig/phc2sys 設定ファイルを編集します。/etc/sysconfig/phc2sys ファイルのデフォルト設定は以下のとおりです。

OPTIONS="-a -r"

root として、その行を次のように編集します。

~]# vi /etc/sysconfig/phc2sys
OPTIONS="-a -r -r"

-r オプションは 2 回使用され、NIC 上の PTP ハードウェアクロックのシステムクロックとの同期を許可しています。変更を有効にするには、phc2sys サービスを再起動します。

~]# systemctl restart phc2sys

PTP クロックの周波数の迅速な変更を防ぐため、システムクロックへの同期は、PI servo に小規模な P (比例) および I (積分) 定数を使用して緩めることができます。

~]# phc2sys -a -r -r -P 0.01 -I 0.0001

20.10. timemaster を使用した PTP または NTP 時間への同期

複数の PTP ドメインがネットワーク上で利用できるか、または NTP へのフォールバックが必要な場合、timemaster プログラムを使用して、利用可能なすべてのタイムソースにシステムクロックを同期できます。PTP 時間は、共有メモリードライバー (chronydntpd に対する SHM のリファレンスクロック) から phc2sys および ptp4l で提供されます (システム上で設定されている NTP デーモンにより異なります)。NTP デーモンは次に、すべてのタイムソース、PTP および NTP の両方を比較でき、システムクロックを同期させるのに最善のソースを使用できます。

開始時に、timemasterNTP および PTP タイムソースを指定する設定ファイルを読み取り、独自のクロックを持つか、または PTP ハードウェアクロック (PHC) を共有するネットワークインターフェースを確認し、ptp4l および chronyd または ntpd の設定ファイルを生成し、必要に応じて ptp4lphc2sys、および chronyd または ntpd プロセスを起動します。終了時には生成された設定ファイルは削除されます。chronydntpdptp4l の設定ファイルを /var/run/timemaster/ に書き込みます。

20.10.1. timemaster をサービスとして起動

timemaster をサービスとして起動するには、root で以下のコマンドを発行します。

~]# systemctl start timemaster

これにより、/etc/timemaster.conf に オプションが読み込まれます。Red Hat Enterprise Linux 7でのシステムサービスの管理の詳細については、10章systemd によるサービス管理 を参照してください。

20.10.2. timemaster 設定ファイルの概要

Red Hat Enterprise Linux のデフォルトの /etc/timemaster.conf ファイルには、デフォルトオプションを含む数多くのセクションがあります。このセクションの見出しは括弧で囲まれます。

デフォルト設定を表示するには、以下のコマンドを実行します。

~]$ less /etc/timemaster.conf
# Configuration file for timemaster

#[ntp_server ntp-server.local]
#minpoll 4
#maxpoll 4

#[ptp_domain 0]
#interfaces eth0

[timemaster]
ntp_program chronyd

[chrony.conf]
include /etc/chrony.conf

[ntp.conf]
includefile /etc/ntp.conf

[ptp4l.conf]

[chronyd]
path /usr/sbin/chronyd
options -u chrony

[ntpd]
path /usr/sbin/ntpd
options -u ntp:ntp -g

[phc2sys]
path /usr/sbin/phc2sys

[ptp4l]
path /usr/sbin/ptp4l

次の名前のセクションに注意してください。

[ntp_server address]

これは、NTP サーバーセクションの例「ntp-server.local」は、ローカル LAN 上の NTP サーバーのホスト名の例です。セクション名の一部としてホスト名または IP アドレスを使用し、必要に応じてセクションを追加してください。セクション例の短いポーリング値は公開サーバーには適していないことに注意してください。適した minpoll および maxpoll 値の説明は、19章ntpd を使用した NTP 設定 を参照してください。

次の名前のセクションに注意してください。

[ptp_domain number]

「PTP ドメイン」は、互いに同期する 1 つ以上の PTP クロックのグループです。それらは別のドメインでクロックに同期される場合もありますが、同期されない場合もあります。同じドメイン番号で設定されているクロックがドメインを構成します。これには、PTP グランドマスタークロックが含まれます。各 PTP domain セクションのドメイン番号は、ネットワーク上に設定される PTP ドメインのいずれかに対応している必要があります。

ptp4l のインスタンスは、独自の PTP クロックを持つすべてのインスタンスで起動し、ハードウェアのタイムスタンプは自動的に有効にされます。ハードウェアのタイムスタンプをサポートするインターフェースには PTP クロック (PHC) が割り当てられます。同じ PHC を共有するインターフェースグループごと、ソフトウェアのタイムスタンプのみに対応した各インターフェースに対して、別のptp4l インスタンスが開始されます。すべての ptp4l インスタンスは、スレーブとして実行するように構成されています。ハードウェアのタイムスタンプが設定されたインターフェースが 1 つ以上の PTP ドメインに指定される場合、作成される最初の ptp4l インスタンスのみで、ハードウェアのタイムスタンプが有効にされます。

次の名前のセクションに注意してください。

[timemaster]

デフォルトの timemaster 設定には、アクセス制限および認証キーの設定を組み込むためにシステムの ntpd および chrony 設定 (/etc/ntp.conf または /etc/chronyd.conf) が含まれます。つまり、そこに指定されるすべての NTP サーバーが timemaster で使用されることを意味しています。

セクションの見出しは以下のようになります。

  • [ntp_server ntp-server.local]: このサーバーのポーリング間隔を指定します。必要に応じて追加のセクションを作成します。セクション見出しのホスト名または IP アドレスを含めます。
  • [ptp_domain 0]: このドメインに PTP クロックを設定するインターフェースを指定します。必要に応じて、適切なドメイン番号で追加のセクションを作成します。
  • [timemaster]: NTP デーモンが使用されるように指定します。chronydntpd の値が使用できます。
  • [chrony.conf]: chronyd に生成される設定ファイルにコピーされる追加設定を指定します。
  • [ntp.conf]: ntpd に生成される設定ファイルにコピーされる追加設定を指定します。
  • [ptp4l.conf]: ptp4l に生成される設定ファイルにコピーされるオプションを指定します。
  • [chronyd]: chronyd に対してコマンドラインで渡される追加設定を指定します。
  • [ntpd]: ntpd に対してコマンドラインで渡される追加設定を指定します。
  • [phc2sys]: phc2sys に対してコマンドラインで渡される追加設定を指定します。
  • [ptp4l]: ptp4l のすべてのインスタンスに対してコマンドラインで渡される追加設定を指定します。

セクション見出しおよびその内容の詳細は、timemaster(8) の man ページで説明されています。

20.10.3. timemaster オプションの設定

timemaster 設定ファイルの編集

  1. デフォルト設定を変更するには、以下のように root として /etc/timemaster.conf ファイルを開いて編集します。

    ~]# vi /etc/timemaster.conf
  2. timemaster を使用して制御する必要のある各 NTP サーバーに対して、[ntp_server address] セクションを作成します。この例の短いポーリング値はパブリックサーバーに適していません。適切な minpollmaxpoll 値の説明は、19章ntpd を使用した NTP 設定 を参照してください。
  3. ドメインで使用するインターフェースを追加するには、#[ptp_domain 0] セクションを編集してインターフェースを追加します。必要に応じて追加のドメインを作成します。以下に例を示します。

    [ptp_domain 0]
        interfaces eth0
    
        [ptp_domain 1]
        interfaces eth1
  4. このシステムの NTP デーモン ntpd として使用する必要がある場合は、[timemaster] セクションのデフォルトエントリーを chronyd から ntpd に変更します。ntpd と chronyd の違いについての情報は、18章chrony スイートを使用した NTP 設定 を参照してください。
  5. このシステムで NTP サーバーとして chronyd を使用する場合は、[chrony.conf] セクションのデフォルトの include /etc/chrony.conf エントリーの下に追加オプションを追加します。/etc/chrony.conf へのパスが変更された場合は、デフォルトの include エントリーを編集します。
  6. このシステムで NTP サーバーとして ntpd を使用する場合は、[ntp.conf] セクションのデフォルトの include /etc/ntp.conf エントリーの下に追加オプションを追加します。/etc/ntp.conf へのパスが変更された場合は、デフォルトの include エントリーを編集します。
  7. [ptp4l.conf] セクションに、ptp4l に生成される設定ファイルにコピーされるオプションを追加します。この章では、共通オプションについて説明します。詳細は、ptp4l(8) man ページを参照してください。
  8. [chronyd] セクションに、timemaster で呼び出される場合に chronyd に渡されるコマンドラインのオプションを追加します。chronyd の使用についての情報は、18章chrony スイートを使用した NTP 設定 を参照してください。
  9. [ntpd] セクションに、timemaster で呼び出される場合に ntpd に渡されるコマンドラインのオプションを追加します。ntpd の使用についての情報は、19章ntpd を使用した NTP 設定 を参照してください。
  10. [phc2sys] セクションで、timemaster により呼び出される場合に phc2sys に渡すコマンドラインオプションを追加します。この章では、共通オプションについて説明します。詳細は、phy2sys(8) man ページを参照してください。
  11. [ptp4l] セクションに、timemaster で呼び出される場合に ptp4l に渡されるコマンドラインオプションを追加します。この章では、共通オプションについて説明します。詳細は、ptp4l(8) man ページを参照してください。
  12. 設定ファイルを保存し、timemaster を再起動するには、root で以下のコマンドを実行します。

    ~]# systemctl restart timemaster

20.11. 精度の向上

これまでテストの結果では、ティックレスカーネル機能を無効にするとシステムクロックの安定性が大幅に改善され、PTP 同期の精度が高まることが示されています (電力消費量は高まります)。カーネル起動オプションパラメーターに nohz=off を追加することで、カーネルティックモードを無効にすることができます。ただし、kernel-3.10.0-197.el7 に適用される最近の改善により、システムクロックの安定性が大幅に改善され、nohz=off のあるクロックの安定性の相違点が、ほとんどのユーザーに対して大幅に小さくなるはずです。

ptp4l および phc2sys アプリケーションは、新しい適応サービスを使用するように設定できます。PI サーボに対するこれの利点は、適正に機能させるために PI 定数を設定する必要がない点にあります。これをptp4l に使用するには、以下の行を /etc/ptp4l.conf ファイルに追加します。

clock_servo linreg

/etc/ptp4l.conf に変更を加えたら、root で以下のコマンドを実行して、コマンドラインから ptp4l サービスを再起動します。

~]# systemctl restart ptp4l

これを phc2sys に使用するには、/etc/sysconfig/phc2sys ファイルに以下の行を追加します。

-E linreg

/etc/sysconfig/phc2sys への変更後に、root で以下のコマンドを実行し、コマンドラインから phc2sys サービスを再起動します。

~]# systemctl restart phc2sys

20.12. 関連資料

以下の情報ソースで PTP および ptp4l ツールに関する追加リソースが提供されています。

20.12.1. インストールされているドキュメント

  • ptp4l(8) の man ページ: 設定ファイルの形式を含む ptp4l オプションを説明しています。
  • pmc(8) の man ページ: PTP 管理クライアントおよびそのコマンドオプションを説明しています。
  • phc2sys(8) manページ: システムクロックを PTP ハードウェアクロック (PHC) に同期させるツールを説明しています。
  • timemaster(8) の man ページ: chronyd または ntpd を使用してシステムクロックを同期するために ptp4l および phc2sys を使用するプログラムについて説明しています。

20.12.2. 便利な Web サイト


このページには機械翻訳が使用されている場合があります (詳細はこちら)。