3.7. PTPを用いた時刻同期#

3.7.1. Web UIを用いたPTPの設定#

Web UI には、PTP Settings というタブがあります。このタブを開くと 5 つのボタンが表示されます。以下に各ボタンの機能について説明します。

../../_images/ptp_web_gui.png

図 3.10 PTP設定用のWeb GUI#

3.7.1.1. Update System Time#

HTTP リクエストを介してローカル時刻を取得し、システム時刻を更新します。

等価なコマンドは以下のとおりです。

sudo date -s "$(wget -qs0- --max-redirect=0 google.com 2>&1 | grep Date: | cut -d' ' -f5-8)Z" && sudo phc_ctl /dev/ptp0 set

3.7.1.2. Start PTP-based Synchronization#

eth0 で ptp4l スレーブ (クライアント) プログラムを起動します。

等価なコマンドは以下のとおりです。

sudo ptp41 -i eth0 -s

3.7.1.3. Sync System Clock to PHC#

PHC 時間に基づいてシステム クロックを更新するプログラムを起動します。

等価なコマンドは以下のとおりです。

sudo phc2sys -a -r

3.7.1.4. Stop PTP-based Synchronization#

ptp4l スレーブ プログラムを停止します。

等価なコマンドは以下のとおりです。

sudo pkill -x "ptp41"

3.7.1.5. Stop PHC to System#

PHCベースのシステムを停止します。

等価なコマンドは以下のとおりです。

sudo pkill -x "phc2sys"

3.7.2. PTPのテスト#

PTP を使用するには、ホスト PC がマスター モード (-m フラグ) で ptp4l を実行し、本ボードがスレーブ モードになっている必要があります。本ボードは、上記の表に示すように、Web GUI を介して適切な PTP プログラムを起動できます。以下の手順により、PTP を起動して機能を確認していきます。

3.7.2.1. ホスト上でPTPマスターを起動する#

ホスト上で次のコマンドを発行すると、PTP マスターを起動できます。

sudo ptp41 -i enp2s0f1 -m -S -A # replace enp2s0f1 with the proper interface

3.7.2.2. デバイス上でPTPスレーブを起動する#

Web GUI の PTP タブで Start PTP-based Synchronization をクリックします。

3.7.2.3. PTPベースのストリーミングが機能することを確認する#

Web GUI の RTP Control タブで、Custom TimestampStart of Frame を有効にします。次に、ストリーミングのセクションに従ってストリーミングを開始します。その後、ホスト PC で次のコマンドを使用して、パケットに適切な RTP 情報が含まれていることを確認します。

sudo tcpdump -i enp2s0f1 -T rtp -x | grep "0x0020" | awk '{print "0x"$3$4}'

これにより、現在のエポック秒が HEX 形式で出力されます。これは、Web サイト epoch converter を用いて比較することで確認できます。

たとえば、0x66bb12ac を取得した場合、データに埋め込まれたタイムスタンプは 2024-8-13 Tuesday 08:00:44 (GMT) です。

注釈

カスタム タイムスタンプは次のように構成されます: 最大 合計 96 bit

  • 48b - 秒を表します(先頭から48bit)

  • 32b - ナノ秒を表します(続く32bit)

  • 16b - ナノ秒の小数部表現(最後の16bit)

したがって、Custom Timestamp と共に使用した場合、RTP ヘッダーには次のデータ セットが含まれます。

  • RTP ヘッダーのtimestamp - 秒を表す48bitのうち、先頭の32bit

  • RTPヘッダーのSSRC_ID - 先頭の16bitは秒を表す48bitの下位部分、残りはナノ秒表現の上位部分

  • RTP ヘッダーの CSRC_ID - ナノ秒表現の下位部分に 16ビット、ナノ秒の小数部表現に 16 ビット

3.7.2.4. システムクロックがPTP経由で同期していることを確認する#

Sync System Clock to PHC ボタンを押すと、システム クロックが同期されます。2 つのマシンで次のコマンドの出力を比較することで、2 つのクロックが同期していることを確認できます。

watch -n 0.1 date +%s. %N

ボード上で次のコマンドを発行すると、間違ったクロックをシミュレートできます。

sudo date +%T -s "15:00:00"

同期結果

'With synchronization'の結果では、ホストとボードのシステムクロックが一致していることを確認できます。一方、'Without synchonization'の場合は、ホストとボードのシステムクロックが異なります。