最近は、linuxptp(ptp4l)が一般的に使われています。
RedHatの最近のマニュアルでも詳しく書かれています。
パッケージ名 | デーモン名 | 説明 |
---|---|---|
linuxptp | ptp4l | ハードウェアタイムスタンプ対応 |
ptpd, ptpd2 | ptpd, ptpd2 | ハードウェアタイムスタンプ非対応 |
ハードウェアタイムスタンプは、一部の NIC(Network Interface Controller)でサポートされている機能です。
送受信されるパケットの正確なタイムスタンプを提供します。
ハードウェアのタイムスタンプを有効にしていると、パケットがリンク層または物理層に出入りする際に、NIC 独自のクロックを使用してタイムスタンプを生成します。
~]# 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)
ハードウェアタイムスタンプのサポートするNIC
ソフトウェアタイムスタンプのサポートするNIC
~]# yum install linuxptp
ptp4l と phc2sysがインストールされます
ptp4l | NIC 上の PTP ハードウェアクロック (PHC) をマスターと同期します。 ハードウェアタイムスタンプでは PTP ハードウェアクロックのマスタークロックとの同期に使用され、 ソフトウェアタイムスタンプではシステムクロックのマスタークロックとの同期に使用されます。 |
phc2sys | システムクロックを NIC 上の PTP ハードウェアクロック (PHC) と同期するために使用されます。 |
システムクロックの時間を設定するサービス
システムクロックの時間を設定するサービスは、1つを利用します。
NIC 上の PTP クロックがマスターに同期されます。
~]# ptp4l -i eth3 -m
~]# ptp4l -i eth3 -m -S <- -Sで、ソフトウェアタイムスタンプを有効
~]# ptp4l -i eth1 -m -S -s <- -s スレーブモード ※Grandmaster(グランドマスタークロック)が時刻の配信を行い、 「**スレーブ**」が時刻を受け取る側。
https://www.belbel.or.jp/opensuse-manuals_ja/cha-tuning-ptp.html#tuning-ptp-phc2sys
# ptp4l -m -i eth0 selected eth0 as PTP clock port 1: INITIALIZING to LISTENING on INITIALIZE port 0: INITIALIZING to LISTENING on INITIALIZE port 1: new foreign master 00a152.fffe.0b334d-1 selected best master clock 00a152.fffe.0b334d port 1: LISTENING to UNCALIBRATED on RS_SLAVE master offset -25937 s0 freq +0 path delay 12340 master offset -27887 s0 freq +0 path delay 14232 master offset -38802 s0 freq +0 path delay 13847 master offset -36205 s1 freq +0 path delay 10623 master offset -6975 s2 freq -30575 path delay 10286 port 1: UNCALIBRATED to SLAVE on MASTER_CLOCK_SELECTED master offset -4284 s2 freq -30135 path delay 9892
master offset | マスターとの時刻差 (ナノ秒単位) |
freq | クロックの周波数調整値 (単位は ppb で、 10 億あたりの値) |
path delay | マスターから送信された同期メッセージの見積もり遅延時間 (単位はナノ秒) |
1,000,000ナノ秒(ns) = 1,000マイクロ秒(µs) = 1ミリ秒(ms)
1,000ナノ秒(ns) = 1マイクロ秒(µs) = 0.001ミリ秒(ms)
Port 0 はローカルの PTP 管理向けに Unix ドメインソケットを使用する意味です。
Port 1 は eth0 インターフェイスの意味です。
INITIALIZING , LISTENING , UNCALIBRATED , SLAVE の表示は、
それぞれ INITIALIZE , RS_SLAVE , MASTER_CLOCK_SELECTED のイベントに対するポート状態の変更例です。
ポートの状態が UNCALIBRATED から SLAVE に変化すると、コンピュータは PTP のマスタークロックと同期が成功していることを表わします。
[Unit] Description=Precision Time Protocol (PTP) service [Service] Type=simple EnvironmentFile=-/etc/sysconfig/ptp4l ExecStart=/usr/sbin/ptp4l -i eth1 -m ExecStop=/bin/pkill -f ptp4l [Install] WantedBy=multi-user.target
/etc/sysconfig/ptp4l
OPTIONS="-f /etc/ptp4l.conf -i ethX"
/etc/ptp4l.conf
変更なし
/etc/sysconfig/ptp4l
「-S」で、ソフトウエアタイムスタンプ
OPTIONS="-f /etc/ptp4l.conf -i ethX -S"
/etc/ptp4l.conf
変更なし
ptp4lは、システムログ(/var/log/messages)に出力しますが、出力するタイミングを変更することができます。
/etc/ptp4l.conf
summary_interval 2 <- 4 (= 2^2) 秒ごとにメッセージを出力 summary_interval 3 <- 8 (= 2^3) 秒ごとにメッセージを出力 summary_interval 4 <- 8 (= 2^4) 秒ごとにメッセージを出力 summary_interval 5 <- 8 (= 2^5) 秒ごとにメッセージを出力 summary_interval 6 <- 64 (= 2^6) 秒ごとにメッセージを出力 ★このくらいでいいかな。 summary_interval 10 <- 1024 (= 2^10) 秒ごとにメッセージを出力
ptp4lのシステムログ(/var/log/messages)に出力例
ptp4l[359.224]: master offset 3304 s0 freq +0 path delay 9202 ptp4l[360.224]: master offset 3708 s1 freq -28492 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 -28436 path delay 8972
~]# systemctl start ptp4l <- 起動 ~]# systemctl enable ptp4l <- OS起動時にptp4lサービスを起動させる
PTP 管理クライアントである pmc を使うと、以下のように ptp4l から追加情報を取得することができます。
※pcmコマンドは、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
stepsRemoved | グランドマスタークロックへの通信パスの数です。 |
offsetFromMaster master_offset | マスターから最後に測定されたオフセットをナノ秒で表します。 |
meanPathDelay | マスターから送信された同期メッセージの遅延予測をナノ秒で表します。 |
~]# 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
phc2sys を使用することで、システムクロックをネットワークカードに搭載された PTP ハードウエアクロック (PHC) に同期させることができます。
システムクロックは スレーブ 、ネットワークカード側は マスター として動作することになります。
phc2sysで同期する場合、chronyなどは無効にする必要があります。
phc2sys -s eth0 -w
OPTIONS="-a -r" <- デフォルトのまま -a オプション phc2sys は ptp4l アプリケーションから同期されているクロックを読み取ります。 これは、PTP ポートの状態の変更に従い、NIC ハードウェアクロック間の同期を適宜調整します OPTIONS="-a -r -u 10" <- messagesへ10秒ごとに出力(デフォルトでは1秒間隔) OPTIONS="-s eth0 -w" -s オプションを指定して、システムクロックを特定のインターフェースの PTP ハードウェアクロックに同期します。 -w オプションは、実行中の ptp4l アプリケーションが PTP クロックを同期するまで待機し、 ptp4l から、TAI から UTC のオフセットを取得します。
systemctl disable chronyd systemctl stop chronyd systemctl start phc2sys systemctl enable phc2sys
phc2sysのシステムログ(/var/log/messages)への出力例
phc2sys[628.628]: phc offset 66341 s0 freq +0 delay 2729 phc2sys[629.628]: phc offset 64668 s1 freq -37690 delay 2726 phc2sys[646.630]: phc offset -333 s2 freq -37426 delay 2747 phc2sys[646.630]: phc offset 194 s2 freq -36999 delay 2749
phc2sysではなく、chronyでもシステム同期ができます。
/etc/chrony.conf
hwtimestamp eth0 hwtimestamp eth1 もしくは hwtimestamp *
1 秒のポーリング間隔を使用してローカルの NTP サーバーを指定
server ntp.local minpoll 0 maxpoll 0
[user1@server log]$ cd /etc [user1@server etc]$ ls --full-time 合計 1696 -rw-r--r--. 1 root root 5090 2016-02-17 00:08:39.000000000 +0900 DIR_COLORS -rw-r--r--. 1 root root 5725 2016-02-17 00:08:39.000000000 +0900 DIR_COLORS.256color -rw-r--r--. 1 root root 4669 2016-02-17 00:08:39.000000000 +0900 DIR_COLORS.lightbgcolor -rw-r--r--. 1 root root 94 2015-04-29 23:30:23.000000000 +0900 GREP_COLORS -rw-r--r-- 1 root root 842 2014-06-10 07:39:58.000000000 +0900 GeoIP.conf -rw-r--r-- 1 root root 858 2014-06-10 07:39:58.000000000 +0900 GeoIP.conf.default drwxr-xr-x. 7 root root 4096 2015-12-24 14:03:25.977000000 +0900 NetworkManager drwxr-xr-x. 5 root root 54 2019-05-06 21:51:45.166047275 +0900 X11 drwxr-xr-x. 3 root root 97 2015-12-24 14:03:21.634000000 +0900 abrt -rw-r--r--. 1 root root 16 2015-12-24 14:05:52.501000000 +0900 adjtime -rw-r--r--. 1 root root 1518 2013-06-07 23:31:32.000000000 +0900 aliases -rw-r--r--. 1 root root 12288 2015-12-24 14:12:21.701000000 +0900 aliases.db drwxr-xr-x. 2 root root 4096 2016-02-17 13:42:36.459000000 +0900 alternatives (略)