EndRun Technologies IEEE 1588 PTP グランドマスタークロック
情報システム営業部-EndRun- IEEE 1588 グランドマスタークロック -お問い合わせ-資料請求フォーム




EndRun Technologies
ネットワークタイムサーバー
タイムベース・周波数ベースの専業メーカー エンドラン

IEEE 1588 GRANDMASTER CLOCK

Endrun Technologies(エンドラン テクノロジーズ)社からIEEE 1588 Precision Time Protocol (PTP)を用いてネットワークを経由しても10マイクロ秒以下の同期精度を提供するPTP Version1 PTP Version2 グランドマスタークロックオプションがリリースされました.このオプションはEndrunのTempus LX GPSおよびTempus LX CDMA, Meridianに,ソフトウェアオプションとしてインストールできます.
ptpスレーブとしてはUnix/Linuxを実行するコンピュータであればパブリックドメインの ptpd (PTP Version 1)ないし ptpd2 (PTP Version 2)をインストールするだけで,高精度な時刻配信を可能にします.
Linux へのPTPクライエントデーモン ptpd / ptpd2 のインストール

PTPdのサイトからソースをダウンロードします.
http://ptpd.sourceforge.net/
http://sourceforge.net/projects/ptpd/files/ptpd/
ptpd-1.x.x.tar.gz がPTPd Version 1 クライエントデーモンです.
ptpd-2.x.x.tar.gz がPTPd Version 2 クライエントデーモンです.
特にptpd2(version 2 クライエント)は大幅な変更が行われています.以下の文章はptpd-1.1.0 および ptpd-2.1.0 について書いたものです.最新リリースとは内容が大きく異なることがありますので,個々のリリースとともに提供される情報に従ってください.弊社ではptpd/ptpd2クライエントに関するサポートは行っておりません.
特に ptpd-2.2.x 以降では実験的な要素(PTPサーバーやNTPとの連携機能)を含む大きな変更が行われましたので,利用に当たっては注意願います.

例1:通常のコンパイルと実行
tar.gz ファイルを展開し,srcディレクトリでmakeすると,ptpd(PTP Version 1)ないしptpd2(PTP Version 2)が生成されます.生成したptpdないしptpd2を起動します.
# ./ptpd (PTP Version 1 クライエント)
ないし
# ./ptpd2 (PTP Version 2 クライエント)
デーモンとして起動し,グランドマスタークロックからのパケットの受信を始めます.

例2:ptpdの動作を確認するためのコンパイルと実行

デバッグオプションを有効にするために,Makefile を編集して CPPFLAGS = -DPTPD_DBG の行を作ってからmakeします.デバッグ機能付けてコンパイルした ptpd を -c オプションを付けて起動します.

# ./ptpd -c (PTP Version 1クライエント)
ないし
# ./ptpd2 -c (PTP Version 2クライエント)

起動するとメッセージを書き出しながら,グランドマスタークロックからのパケットの受信を始めます.

デバッグメッセージの例:
注記:offset from master: の行の最後の数字がマスターとのオフセットを示し,マスターとのその時点での同期誤差となる.トラフィックの少ないLAN環境では1us以下を示すことは珍しくないが,トラフィックの多いLAN環境では,同期精度はトラフィックによるネットワーク遅延の変動の影響を受ける.
(ptpd debug) offset from master:               0s        -306ns
(ptpd debug) observed drift:     -11903
(ptpd debug) offset from master:               0s        -806ns
(ptpd debug) observed drift:     -11903
(ptpd debug) offset from master:               0s        -806ns
(ptpd debug) observed drift:     -11903
(ptpd debug) Q = 0, R = 24
(ptpd debug) handleDelayReq: self
(ptpd debug) offset from master:               0s        1193ns
(ptpd debug) observed drift:     -11902
(ptpd debug) delay filter 170324, 64
(ptpd debug) offset from master:               0s         684ns
(ptpd debug) observed drift:     -11902
(ptpd debug) offset from master:               0s        -824ns

コマンドオプションの表示
-? をつけて実行すると,コマンドオプションを同じ内容を表示します.
# ./ptpd -?

Usage:  ptpd [OPTION]

-?                show this page

-c                run in command line (non-daemon) mode
-f FILE           send output to FILE
-d                display stats
-D                display stats in .csv format

-x                do not reset the clock if off by more than one second
-t                do not adjust the system clock
-a NUMBER,NUMBER  specify clock servo P and I attenuations
-w NUMBER         specify one way delay filter stiffness

-b NAME           bind PTP to network interface NAME
-u ADDRESS        also send uni-cast to ADDRESS
-l NUMBER,NUMBER  specify inbound, outbound latency in nsec

-o NUMBER         specify current UTC offset
-e NUMBER         specify epoch NUMBER
-h                specify half epoch

-y NUMBER         specify sync interval in 2^NUMBER sec
-m NUMBER         specify max number of foreign master records

-g                run as slave only
-p                make this a preferred clock
-s NUMBER         specify system clock stratum
-i NAME           specify system clock identifier
-v NUMBER         specify system clock allen variance

-n NAME           specify PTP subdomain name (not related to IP or DNS)

-k NUMBER,NUMBER  send a management message of key, record, then exit
ツール
toolsディレクトリには GNU Octave (Matlab 互換)のマクロが用意されています.

# ./ptpd2 -?

Usage:  ptpv2d [OPTION]

Ptpv2d runs on UDP/IP , P2P mode by default

-?                show this page

-c                run in command line (non-daemon) mode
-f FILE           send output to FILE
-S                send output to syslog
-T                set multicast time to live
-d                display stats
-D                display stats in .csv format
-R                record data about sync packets in a file

-x                do not reset the clock if off by more than one second
-O                do not reset the clock if offset is more than NUMBER nanoseconds
-M                do not accept delay values of more than NUMBER nanoseconds
-t                do not adjust the system clock
-a NUMBER,NUMBER  specify clock servo P and I attenuations
-w NUMBER         specify one way delay filter stiffness

-b NAME           bind PTP to network interface NAME
-u ADDRESS        also send uni-cast to ADDRESS
-e                run in ethernet mode (level2)
-h                run in End to End mode
-l NUMBER,NUMBER  specify inbound, outbound latency in nsec

-o NUMBER         specify current UTC offset
-i NUMBER         specify PTP domain number

-n NUMBER         specify announce interval in 2^NUMBER sec
-y NUMBER         specify sync interval in 2^NUMBER sec
-m NUMBER         specify max number of foreign master records

-g                run as slave only
-v NUMBER         specify system clock allen variance
-r NUMBER         specify system clock accuracy
-s NUMBER         specify system clock class
-p NUMBER         specify priority1 attribute
-q NUMBER         specify priority2 attribute


自動起動 RedHat/CentOS

/usr/sbin/ptpd2 に実行ファイルを置く

/etc/sysconfig/ptpd2 を作成

#
# PTPD Configuration
#

# PTPDARGS="-D -b eth0 -f /var/log/ptpd.log"
PTPDARGS="-D -f /var/log/ptpd.log"

/etc/rc.d/init.d/ptpd2 を作成

#!/bin/sh
#
# ptpd Precision Time Protocol daemon
#
# chkconfig:   - 30 70
# description: ptpd implements a sub ms time coordination of LAN connected computers \
#              implementing IEEE 1588

# Source function library.
. /etc/rc.d/init.d/functions

# exec="/usr/bin/ptpd2"
exec="/usr/sbin/ptpd2"
prog="ptpd2"

[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog

lockfile=/var/lock/subsys/$prog

start() {
    [ -x $exec ] || exit 5
    echo -n $"Starting $prog: "
    # if not running, start it up here, usually something like "daemon $exec"
    daemon --user root $exec $PTPDARGS
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    # stop it here, often "killproc $prog"
    killproc $prog
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    stop
    start
}

reload() {
    restart
}

force_reload() {
    restart
}

rh_status() {
    # run checks to determine if the service is running or use generic status
    status $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}


case "$1" in
    start)
        rh_status_q && exit 0
        $1
        ;;
    stop)
        rh_status_q || exit 0
        $1
        ;;
    restart)
        $1
        ;;
    reload)
        rh_status_q || exit 7
        $1
        ;;
    force-reload)
        force_reload
        ;;
    status)
        rh_status
        ;;
    condrestart|try-restart)
        rh_status_q || exit 0
        restart
        ;;
    *)
        echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}"
        exit 2
esac
exit $?
起動
service ptpd2 start
自動起動
chkconfig ptpd2 on

詳しくはptpdのサイトからダウンロードできるドキュメントおよび,pdpdのソースをお読みください.
弊社ではptpdのクライエント環境での動作についてのサポートは行っておりません.