46 高精度時刻同期プロトコル (PTP) #
高精度時刻同期プロトコル (PTP) は、コンピュータネットワーク内でサブマイクロ秒単位の時刻同期を実現するために、米国電気電子学会 (IEEE) によって開発されたネットワークプロトコルです。PTPは、その誕生以来、数十年にわたって多くの業界で使用されてきました。近年では、5Gネットワークに不可欠な要素として、通信ネットワークでの採用が拡大しています。比較的単純なプロトコルですが、その構成はアプリケーションによって大きく異なる場合があります。このため、複数のプロファイルが定義され、標準化されています。
本セクションでは、通信事業者向けのプロファイルのみを扱います。したがって、タイムスタンプ機能とNIC内のPTPハードウェアクロック(PHC)が備わっていることを前提とします。現在、すべての通信事業者グレードのネットワークアダプターにはハードウェアでのPTPサポートが付属していますが、以下のコマンドでそのような機能を確認できます。
# ethtool -T p1p1
Time stamping parameters for p1p1:
Capabilities:
hardware-transmit
software-transmit
hardware-receive
software-receive
software-system-clock
hardware-raw-clock
PTP Hardware Clock: 0
Hardware Transmit Timestamp Modes:
off
on
Hardware Receive Filter Modes:
none
all`p1p1`を、PTPに使用するインターフェースの名前に置き換えてください。
以下のセクションでは、SUSE Telco CloudでPTPをインストールおよび構成する方法について具体的に説明しますが、基本的なPTPの概念については理解しているものとします。PTPの概要およびSUSE Telco Cloudに含まれる実装については、 SLES Precision Time Protocolドキュメントを参照してください。
46.1 PTPソフトウェアコンポーネントのインストール #
SUSE Telco Cloudでは、PTPの実装は`linuxptp`パッケージによって提供されており、これには以下の2つのコンポーネントが含まれています。
ptp4l: NIC上のPHCを制御し、PTPプロトコルを実行するデーモンです。phc2sys: システムクロックをNIC上のPTP同期PHCと同期させ続けるデーモンです。
システム同期を完全に機能させるには両方のデーモンが必要であり、セットアップに応じて正しく設定する必要があります。これは、46.2項 「通信事業者向けデプロイメントのためのPTP設定」で説明します。
ダウンストリームクラスターにPTPを統合する最も簡単で最適な方法は、Edge Image Builder (EIB) 定義ファイルの packageList の下に linuxptp パッケージを追加することです。このようにすると、PTPコントロールプレーンソフトウェアがクラスターのプロビジョニング中に自動的にインストールされます。パッケージのインストールに関する詳細については、EIB documentation (5.3.6項 「RPMパッケージの設定」) を参照してください。
以下に linuxptp を含むEIBマニフェストのサンプルを示します。
apiVersion: 1.3
image:
imageType: RAW
arch: x86_64
baseImage: SL-Micro.x86_64-6.2-Base-RT-GM.raw
outputImageName: eibimage-slmicrort-telco.raw
operatingSystem:
time:
timezone: America/New_York
kernelArgs:
- ignition.platform.id=openstack
systemd:
disable:
- rebootmgr
- transactional-update.timer
- transactional-update-cleanup.timer
- fstrim
- time-sync.target
enable:
- ptp4l
- phc2sys
users:
- username: root
encryptedPassword: $ROOT_PASSWORD
packages:
packageList:
- jq # Non Telco specific - category: testing/utils
- dpdk # TelCo Core-Network UserPlane (5G UPF) and RAN UserPlane (gNB: DU and CU-UP) - category: runtime
- dpdk-tools # TelCo Core-Network UserPlane (5G UPF) and RAN UserPlane (gNB: DU and CU-UP) - category: testing/utils
- libdpdk-25 # TelCo Core-Network UserPlane (5G UPF) and RAN UserPlane (gNB: DU and CU-UP) - category: runtime
- pf-bb-config # TelCo RAN (gNB: DU) - category: config.
- open-iscsi # Non Telco specific (required by SUSE Storage/Longhorn) - category: runtime
- tuned # Non Telco specific (linux tuning) - category: config.
- cpupower # Non Telco specific (linux tuning - CPU power related settings) - category: config.
- rt-tests # Non Telco specific (RT scheduler-latency testing) - category: testing/utils
- linuxptp # TelCo RAN; time sync (gNB: DU) - category: runtime
- synce4l # TelCo RAN; time sync (gNN: DU) - category: runtime
- pciutils # Non Telco specific (provides "lspci" command) - category: testing/utils
- numactl # Non Telco specific (provides "numatcl" command) - category: testing/utils
sccRegistrationCode: $SCC_REGISTRATION_CODESUSE Telco Cloudに含まれる linuxptp パッケージは、デフォルトでは ptp4l および phc2sys を有効にしません。システム固有の設定ファイルがプロビジョニング時にデプロイされる場合(46.3項 「Cluster APIの統合」 を参照)、それらを有効にする必要があります。上記の例のように、マニフェストの`systemd`セクションに追加してください。
EIB Documentation (5.4項 「イメージのビルド」) に記載されている通常の手順に従ってイメージをビルドし、それを使用してクラスターをデプロイしてください。EIBを初めて使用する場合は、代わりに 第12章 「Edge Image Builder」 から始めてください。
46.2 通信事業者向けデプロイメントのためのPTP設定 #
多くの通信事業者向けアプリケーションでは、偏差の少ない厳密な位相および時刻同期が求められます。その結果、ITU-T G.8275.1およびITU-T G.8275.2という2つの通信事業者向けプロファイルが定義されました。どちらも同期メッセージの頻度が高く、代替のBest Master Clock Algorithm (BMCA) を使用するなど、独特な特性を備えています。このような動作には、ptp4l が使用する設定ファイルにおいて特定の設定が必要となります。参考として、以下のセクションで提供します。
両セクションとも、Time Receiver設定におけるOrdinary Clock(通常クロック)の場合のみを扱っています。
このようなプロファイルは、十分に計画されたPTPインフラストラクチャで使用する必要があります。
お客様の特定のPTPネットワークでは、追加の設定調整が必要になる場合があります。必要に応じて、提供された例を確認し、調整してください。
46.2.1 PTPプロファイル ITU-T G.8275.1 #
G.8275.1プロファイルには、以下の仕様があります。
イーサネット上で直接動作し、完全なネットワークサポートを必要とします(隣接するノードやスイッチがPTPをサポートしている必要があります)。
デフォルトのドメイン設定は24です。
データセットの比較は、G.8275.xアルゴリズムと、その`priority2`後の`localPriority`値に基づいています。
以下の内容を`/etc/ptp4l-G.8275.1.conf`という名前のファイルにコピーしてください。
# Telecom G.8275.1 example configuration [global] domainNumber 24 priority2 255 dataset_comparison G.8275.x G.8275.portDS.localPriority 128 G.8275.defaultDS.localPriority 128 maxStepsRemoved 255 logAnnounceInterval -3 logSyncInterval -4 logMinDelayReqInterval -4 announceReceiptTimeout 3 serverOnly 0 ptp_dst_mac 01:80:C2:00:00:0E network_transport L2
ファイルが作成されたら、デーモンを正しく起動するために`/etc/sysconfig/ptp4l`で参照する必要があります。これは、`OPTIONS=`行を以下のように変更することで実行できます。
OPTIONS="-f /etc/ptp4l-G.8275.1.conf -i $IFNAME --message_tag ptp-8275.1"
より正確には、以下の通りです。
-f`には使用する設定ファイルのファイル名が必要です。この場合は/etc/ptp4l-G.8275.1.conf`となります。-i`には使用するインターフェイス名が必要です。$IFNAME`を実際のインターフェイス名に置き換えてください。`--message_tag`を使用すると、システムログ内のptp4l出力を識別しやすくなります。これはオプションです。
上記の手順が完了したら、`ptp4l`デーモンを(再)起動する必要があります。
# systemctl restart ptp4l以下のコマンドでログを監視し、同期状態を確認してください。
# journalctl -e -u ptp4l46.2.2 PTPプロファイル ITU-T G.8275.2 #
G.8275.2プロファイルには、以下の仕様があります。
IP上で動作し、完全なネットワークサポートを必要としません(隣接するノードやスイッチがPTPをサポートしていない場合があります)。
デフォルトのドメイン設定は44です。
データセットの比較は、G.8275.xアルゴリズムと、その`priority2`後の`localPriority`値に基づいています。
以下の内容を`/etc/ptp4l-G.8275.2.conf`という名前のファイルにコピーしてください。
# Telecom G.8275.2 example configuration [global] domainNumber 44 priority2 255 dataset_comparison G.8275.x G.8275.portDS.localPriority 128 G.8275.defaultDS.localPriority 128 maxStepsRemoved 255 logAnnounceInterval 0 serverOnly 0 hybrid_e2e 1 inhibit_multicast_service 1 unicast_listen 1 unicast_req_duration 60 logSyncInterval -5 logMinDelayReqInterval -4 announceReceiptTimeout 2 # # Customize the following for slave operation: # [unicast_master_table] table_id 1 logQueryInterval 2 UDPv4 $PEER_IP_ADDRESS [$IFNAME] unicast_master_table 1
以下のプレースホルダーを必ず置き換えてください。
$PEER_IP_ADDRESS- 通信先の次のPTPノード(同期を提供するマスタークロックや境界クロックなど)のIPアドレス。$IFNAME- PTPに使用するインターフェイスを`ptp4l`に指定します。
ファイルが作成されたら、デーモンが正しく起動するように、PTPに使用するインターフェース名とともに`/etc/sysconfig/ptp4l`で参照する必要があります。これは、`OPTIONS=`行を以下のように変更することで実行できます。
OPTIONS="-f /etc/ptp4l-G.8275.2.conf --message_tag ptp-8275.2"より正確には、以下の通りです。
-f`には使用する設定ファイルのファイル名が必要です。この場合は、/etc/ptp4l-G.8275.2.conf`です。`--message_tag`を使用すると、システムログ内のptp4l出力を識別しやすくなります。これはオプションです。
上記の手順が完了したら、`ptp4l`デーモンを(再)起動する必要があります。
# systemctl restart ptp4l以下のコマンドでログを監視し、同期状態を確認してください。
# journalctl -e -u ptp4l46.2.3 境界クロック(Boundary Clock)のPTP設定 #
前のセクションでは通常クロック(Ordinary Clock)の設定について説明しましたが、通信事業者向けの展開では、ノードが境界クロックとして機能する必要がある場合があります。そのようなシナリオでは、基準時刻をグランドマスター(GM)から下流の1つ以上のタイムレシーバーに伝搬させる必要があり、そのためには2つ以上のポートを持つNICが必要です。この場合、1つのポートがタイムレシーバーの役割を担い、NIC上のPTPハードウェアクロック(PHC)の更新を駆動し、残りのポートがタイムトランスミッターとして機能します。マルチポートNIC1つにつき`ptp4l`のインスタンスは1つで十分ですが、時刻配信に関与する各カーネルインターフェースを、その設定の一部として提供する必要があります。例えば、`/etc/sysconfig/ptp4l`ファイルを更新して4つのポートを含めるには、変数を実際のインターフェース名に置き換えるか、必要に応じて調整します。
OPTIONS="-f /etc/ptp4l-G.8275.1.conf --message_tag ptp-8275.1 -i $IFNAME1 -i $IFNAME2 -i $IFNAME3 -i $IFNAME4"複数のポートが指定された場合は自動的に適用されるため、`clock_type`を`BC`に設定する必要はありません。
完了したら、次のコマンドで`ptp4l`デーモンを(再)起動できます。
# systemctl restart ptp4l特定のポート設定がない場合、`ptp4l`はBMCAを実行して、どのポート経由でGMに到達できるかを判断します。静的設定が望ましい場合は、設定ファイル内の各ポートに対して、指定された役割を持つセクションを追加してください。次に例を示します。
# Telecom G.8275.1 example configuration [global] domainNumber 24 priority2 255 dataset_comparison G.8275.x G.8275.portDS.localPriority 128 G.8275.defaultDS.localPriority 128 maxStepsRemoved 255 logAnnounceInterval -3 logSyncInterval -4 logMinDelayReqInterval -4 announceReceiptTimeout 3 ptp_dst_mac 01:80:C2:00:00:0E network_transport L2 [$IFNAME1] # Time Receiver by default [$IFNAME2] serverOnly 1 [$IFNAME3] serverOnly 1 [$IFNAME4] serverOnly 1
ただし、デーモンを起動する前に、GMへの正しい接続を必ず確認してください。
46.2.4 PTPによるシステムクロックの同期 #
PTPはNICのローカルハードウェアクロックを同期させることで機能するという点に留意することが重要です。システムクロックは別のハードウェアクロックから派生しているため、これによってシステムクロックが自動的にGMと一致するわけではありません。
システムクロックをPTPと同期させるには、phc2sys`を実行する必要があります。`phc2sys`に進む前に、`ptp4l`の設定を完全に完了させることをお勧めします。`phc2sys`はデフォルトでは設定ファイルを必要とせず、その実行パラメータは、`ptp4l`と同様に、/etc/sysconfig/ptp4l`に存在する`OPTIONS=`変数を通じてのみ制御できます。
OPTIONS="-s $IFNAME -w"
ここで、`$IFNAME`はptp4lで既に設定されており、システムクロックのソースとして使用されるインターフェースの名前です。これは、ソースPHCを識別するために使用されます。
ただし、特定のPTPプロファイルまたはドメイン番号が使用されている場合、`ptp4l`に提供されたものと同様の設定ファイルを`phc2sys`に提供する必要がある場合があります。ほとんどの場合、phc2sysで直接再利用することもできます。
OPTIONS="-f /etc/ptp4l-G.8275.1.conf -s $IFNAME -w"
46.3 Cluster APIの統合 #
管理クラスターとダイレクトネットワークプロビジョニングを通じてクラスターが展開されるときはいつでも、設定ファイルと`/etc/sysconfig`内の2つの設定変数の両方を、プロビジョニング時にホスト上に展開できます。以下はクラスター定義からの抜粋であり、すべてのホストに同じG.8275.1設定ファイルを展開する変更された`RKE2ControlPlane`オブジェクトに焦点を当てています。
apiVersion: controlplane.cluster.x-k8s.io/v1beta2
kind: RKE2ControlPlane
metadata:
name: single-node-cluster
namespace: default
spec:
infrastructureRef:
apiGroup: infrastructure.cluster.x-k8s.io
kind: Metal3MachineTemplate
name: single-node-cluster-controlplane
replicas: 1
version: ${RKE2_VERSION}
rolloutStrategy:
type: "RollingUpdate"
rollingUpdate:
maxSurge: 0
registrationMethod: "control-plane-endpoint"
serverConfig:
cni: canal
agentConfig:
format: ignition
cisProfile: cis
additionalUserData:
config: |
variant: fcos
version: 1.4.0
systemd:
units:
- name: rke2-preinstall.service
enabled: true
contents: |
[Unit]
Description=rke2-preinstall
Wants=network-online.target
Before=rke2-install.service
ConditionPathExists=!/run/cluster-api/bootstrap-success.complete
[Service]
Type=oneshot
User=root
ExecStartPre=/bin/sh -c "mount -L config-2 /mnt"
ExecStart=/bin/sh -c "sed -i \"s/BAREMETALHOST_UUID/$(jq -r .uuid /mnt/openstack/latest/meta_data.json)/\" /etc/rancher/rke2/config.yaml"
ExecStart=/bin/sh -c "echo \"node-name: $(jq -r .name /mnt/openstack/latest/meta_data.json)\" >> /etc/rancher/rke2/config.yaml"
ExecStart=/bin/sh -c "echo \"node-label:\" >> /etc/rancher/rke2/config.yaml"
ExecStart=/bin/sh -c "echo \" - metal3.io/uuid=$(jq -r .uuid /mnt/openstack/latest/meta_data.json)\" >> /etc/rancher/rke2/config.yaml"
ExecStartPost=/bin/sh -c "umount /mnt"
[Install]
WantedBy=multi-user.target
storage:
files:
- path: /etc/ptp4l-G.8275.1.conf
overwrite: true
contents:
inline: |
# Telecom G.8275.1 example configuration
[global]
domainNumber 24
priority2 255
dataset_comparison G.8275.x
G.8275.portDS.localPriority 128
G.8275.defaultDS.localPriority 128
maxStepsRemoved 255
logAnnounceInterval -3
logSyncInterval -4
logMinDelayReqInterval -4
announceReceiptTimeout 3
serverOnly 0
ptp_dst_mac 01:80:C2:00:00:0E
network_transport L2
mode: 0644
user:
name: root
group:
name: root
- path: /etc/sysconfig/ptp4l
overwrite: true
contents:
inline: |
## Path: Network/LinuxPTP
## Description: Precision Time Protocol (PTP): ptp4l settings
## Type: string
## Default: "-i eth0 -f /etc/ptp4l.conf"
## ServiceRestart: ptp4l
#
# Arguments when starting ptp4l(8).
#
OPTIONS="-f /etc/ptp4l-G.8275.1.conf -i $IFNAME --message_tag ptp-8275.1"
mode: 0644
user:
name: root
group:
name: root
- path: /etc/sysconfig/phc2sys
overwrite: true
contents:
inline: |
## Path: Network/LinuxPTP
## Description: Precision Time Protocol (PTP): phc2sys settings
## Type: string
## Default: "-s eth0 -w"
## ServiceRestart: phc2sys
#
# Arguments when starting phc2sys(8).
#
OPTIONS="-s $IFNAME -w"
mode: 0644
user:
name: root
group:
name: root
kubelet:
extraArgs:
- provider-id=metal3://BAREMETALHOST_UUID
nodeName: "localhost.localdomain"他の変数に加えて、上記の定義は、パートVII「完全自動化されたダイレクトネットワークプロビジョニング」で説明されているように、インターフェイス名および他のCluster APIオブジェクトで完了する必要があります。
このアプローチは、クラスター内のハードウェアが均一であり、インターフェイス名を含めてすべてのホストで同じ設定が必要な場合にのみ便利です。
代替のアプローチも可能であり、今後のリリースで取り上げる予定です。
この時点で、ホスト上でPTPスタックが動作し、PTPの役割のネゴシエーションが開始されるはずです。
46.4 Intel Granite Rapids-DプラットフォームでのPTP #
SUSE Telco Cloudは、最新のIntel Granite Rapids-Dベースの設計(GNR-D)を含む、さまざまなプラットフォームで高精度なタイミングをサポートしています。これらの新しいサーバーには通常、組み込みの高速イーサネットコントローラーと、追加ポート用のイーサネットコントローラーを備えた1つ以上の追加カードが含まれています。以前のプラットフォーム世代とは異なり、システム全体および異なるNIC間でタイミング信号をルーティングできる専用のDPLLも装備されており、外部ケーブル接続は不要になりました。 したがって、全体的な展開は簡素化されますが、起動時のDPLLや内部信号設定など、特定の手順とソフトウェアコンポーネントが必要になります。
セットアップ手順を進める前に、_Intel 800シリーズネットワークデバイス_用の最新のカーネルドライバーを、 IntelのWebサイトからダウンロードしてインストールしてください。「ice_RPM_Files」を含むzipファイルを選択して、アーカイブを解凍し、そこに含まれている`ice-kmp-default-*sles16sp0.x86_64.rpm` RPMをインストールしてください(例:ファイル`ice-kmp-default-2.4.5_k6.12.0_160000.5-1.sles16sp0.x86_64.rpm`)。
# transactional-update pkg install ice-kmp-default-2.4.5_k6.12.0_160000.5-1.sles16sp0.x86_64.rpm変更を永続的かつ有効にするために、サーバーを再起動してください。
例を通してDell PowerEdge XR8720tシステムをリファレンスシステムとして使用しますが、カーネルインターフェイスとポート構成は、別のGNR-Dサーバーでは異なる場合があります。
Telco展開が想定されており、PTPについては以下のセクション全体でTelcoプロファイルG.8275.1が使用されます。
46.4.1 PTPバウンダリクロック #
このセクションでは、GNR-Dシステム上でバウンダリクロック(BC)を設定するプロセスについて説明します。このシステムでは、統合NIC上の1つのポートがGMからPTPタイムスタンプを受信し、システム内の残りのすべてのポートが他のネットワークノードに対するタイムトランスミッターとして機能します。
ここで説明する設定は完全に静的なものです。GMが利用できなくなった場合、ダウンストリームの同期はホストのホールドオーバー機能のみに依存します。別の時刻参照ソースへの自動切り替えは実行されません。
BCの動作を有効にするには、システムが起動するたびに、以下の手順を同じ順序で実行してください。
PHCを制御する期待されるPTPデバイスが存在することを確認します。
# ls -l /sys/class/ptp/ total 0 lrwxrwxrwx. 1 root root 0 Apr 27 20:21 ptp1 -> ../../devices/pci0000:12/0000:12:04.0/0000:13:00.0/ptp/ptp1 lrwxrwxrwx. 1 root root 0 Apr 27 20:21 ptp2 -> ../../devices/pci0000:6b/0000:6b:02.0/0000:6c:00.0/ptp/ptp2 lrwxrwxrwx. 1 root root 0 Apr 27 20:21 ptp3 -> ../../devices/pci0000:6b/0000:6b:06.0/0000:6e:00.0/ptp/ptp3注記設定対象のシステムで見つかった実際の名前に合わせて、後続のコマンドを調整してください。
組み込みコントローラーは特定の設定が必要となるため、それを特定します。
以前の出力には、PCIアドレスを介してそれらがバインドされているデバイスが示されているはずです。`lspci`を使用してデバイスタイプを調べることができます。
# lspci -s 0000:13:00.0 13:00.0 Ethernet controller: Intel Corporation Ethernet Connection E825-C for SFP (rev 04) # lspci -s 0000:6c:00.0 6c:00.0 Ethernet controller: Intel Corporation Ethernet Controller E830-CC for SFP # lspci -s 0000:6e:00.0 6e:00.0 Ethernet controller: Intel Corporation Ethernet Controller E830-CC for SFPこの特定のサーバーには、_Intel E825-C_組み込みコントローラーと2枚の_E830-CC_アドインカードが搭載されています。
あるいは、そのPHCを公開しているコントローラーの最初のネットワークポートを調べることで、コントローラーに関する詳細情報を確認できます。
# ls -l /sys/class/ptp/ptp0/device/net/ total 0 drwxr-xr-x. 5 root root 0 Apr 30 15:16 em5 # ethtool -i em5 driver: ice version: 2.4.5 firmware-version: 4.03 0x80007f91 1.3881.0 expansion-rom-version: bus-info: 0000:13:00.0 [...]`em5`はこのシステムの統合イーサネットコントローラーの最初のポートであることに注意してください。
統合イーサネットコントローラー上のPHCとシステムタイミングDPLL間の信号を設定します。
DPLLを使用して、統合コントローラー上のイーサネットクロックを駆動させます。
# echo 4 1 > /sys/class/net/em5/device/tspll_cfgSDP2ピン(1kHz信号)を介して、PHCからDPLLへ毎秒のパルス(Pulse Per Second、PPS)を有効にします。
# echo 2 1 > /sys/class/ptp/ptp1/pins/SDP2 # echo 1 0 0 0 1000000 > /sys/class/ptp/ptp1/periodオプションで、ピンSPD0(1Hz信号)も有効にできます。
# echo 2 2 > /sys/class/ptp/ptp1/pins/SDP0 # echo 2 0 0 1 0 > /sys/class/ptp/ptp1/periodタイミングシステムDPLLから追加のアドインカードへ1 PPS信号が伝搬されるように有効にします。
# echo 1 1 > /sys/class/ptp/ptp2/pins/SDP1 # echo 1 1 > /sys/class/ptp/ptp3/pins/SDP1
`ts2phc`を実行して、アドインカードのPHCをPHC `/dev/ptp1`と同じタイムスタンプに同期させます。
# ts2phc -f ts2phc-aic-all.cfg -s /dev/ptp1`ts2phc-aic-all.cfg`の内容については、46.4.2.3項 「`ts2phc`アドインカード用設定ファイル」を参照してください。
統合コントローラー(
/dev/ptp1)に対して`ptp4l`のインスタンスを実行します。# ptp4l -f ptp4l-G.8275.1-nac.conf`ptp4l-G.8275.1-nac.conf`の内容については、46.4.2.1項 「統合コントローラー用`ptp4l`設定ファイル(
/dev/ptp1)」を参照してください。各アドインカード(
/dev/ptp3`および/または/dev/ptp2`)に対して、`ptp4l`のインスタンスを1つ実行します。# ptp4l -f ptp4l-G.8275.1-aic1.conf # ptp4l -f ptp4l-G.8275.1-aic2.conf設定ファイルの内容については、46.4.2.2項 「アドインカード用`ptp4l`設定ファイル(
/dev/ptp2`または/dev/ptp3`)」を参照してください。注記競合を防ぎ、次のステップを有効にするために、これらの各インスタンスは異なる制御ソケットおよび読み取り専用ソケットを使用する必要があります。
AICs `ptp4l`インスタンスのPTPランタイムパラメーターと値を`pmc`と同期させます。
BCは、接続されているGMの時刻だけでなく、クロッククラスや精度レベルなどの付随的なパラメーターも転送することが期待されています。これは、同じ`ptp4l`インスタンスによって管理されるインターフェースのグループ内では自動的に行われますが、異なるPHCやポートを処理する異なる`ptp4l`インスタンス間では行われません。
システムがGMと同期したら、統合コントローラー上の`ptp4l`インスタンスにクエリを実行し、`pmc`コマンドを使用して残りの`ptp4l`インスタンスの値を設定します。次に例を示します。
# pmc -f /etc/ptp4l-G.8275.1-nac-bmca.conf -u -b 0 'GET PARENT_DATA_SET' | grep gm gm.ClockClass 8 gm.ClockAccuracy 0xfe gm.OffsetScaledLogVariance 0xffff # pmc -f /etc/ptp4l-G.8275.1-nac-bmca.conf -u -b 0 'GET TIME_PROPERTIES_DATA_SET' | grep -v PROPERTIES currentUtcOffset 37 leap61 0 leap59 0 currentUtcOffsetValid 0 ptpTimescale 1 timeTraceable 0 frequencyTraceable 0 timeSource 0xa0 pmc -f /etc/ptp4l-G.8275.1-aic1-static.conf -u -b 0 'SET GRANDMASTER_SETTINGS_NP clockClass 8 clockAccuracy 0xfe offsetScaledLogVariance 0xffff currentUtcOffset 37 leap61 0 leap59 0 currentUtcOffsetValid 0 ptpTimescale 1 timeTraceable 0 frequencyTraceable 0 timeSource 0xa0このプロセスを自動化し、手動の手順を回避するには、46.4.2.4項 「GMパラメータ転送スクリプト」を参照してください。
オプションとして、`phc2sys`を実行してPTP同期からシステム時刻を取得します。
# phc2sys -f /etc/ptp4l-G.8275.1-nac.conf -s /dev/ptp1 -c CLOCK_REALTIME -w入力ファイルは、`ptp4l`および統合コントローラーで使用される設定ファイルと同じです。systemdによる実行の処理については、46.2.4項 「PTPによるシステムクロックの同期」を参照してください。
46.4.2 設定ファイル #
このセクションでは、GNR-D上で動作するBCを迅速にセットアップするために、上記の手順と組み合わせて使用できるサンプル構成ファイルとスクリプトを提供します。`ptp4l`の構成ファイルには必要な設定がすべて含まれており、追加の外部実行フラグは不要です。また、すべてTelcoプロファイルG.8275.1に基づいています。各ファイルの詳細については、それぞれのセクションで説明しています。
46.4.2.1 統合コントローラー用`ptp4l`設定ファイル(/dev/ptp1) #
[global] domainNumber 24 priority2 255 dataset_comparison G.8275.x G.8275.portDS.localPriority 128 G.8275.defaultDS.localPriority 128 maxStepsRemoved 255 logAnnounceInterval -3 logSyncInterval -4 logMinDelayReqInterval -4 announceReceiptTimeout 3 ptp_dst_mac 01:1b:19:00:00:00 network_transport L2 summary_interval 3 message_tag "ptp4l-nac" uds_address /var/run/ptp4l-nac uds_ro_address /var/run/ptp4lro-nac [em1] [em2] [em3] [em4]
上記の構成ではBMCAを活用してポートの役割を決定しており、いずれかのポート経由でGMが利用可能であることを前提としています。より厳密な制御が必要な場合は、各インターフェース定義の下に`serverOnly`フラグを追加してください。詳細については、46.2.3項 「境界クロック(Boundary Clock)のPTP設定」を参照するか、以下の例としてアドインカードの構成を参照してください。 簡潔にするため、4つのインターフェースのみを記載しています。要件に応じて調整してください。
46.4.2.2 アドインカード用`ptp4l`設定ファイル(/dev/ptp2`または/dev/ptp3`) #
# Telecom G.8275.1 example configuration [global] domainNumber 24 priority2 255 dataset_comparison G.8275.x G.8275.portDS.localPriority 250 G.8275.defaultDS.localPriority 250 maxStepsRemoved 255 logAnnounceInterval -3 logSyncInterval -4 logMinDelayReqInterval -4 announceReceiptTimeout 3 ptp_dst_mac 01:1b:19:00:00:00 network_transport L2 summary_interval 3 message_tag "ptp4l-iac1" uds_address /var/run/ptp4l-aic1 uds_ro_address /var/run/ptp4lro-aic1 [p1p1] serverOnly 1 [p1p2] serverOnly 1 [p1p3] serverOnly 1 [p1p4] serverOnly 1
簡潔にするため、4つのインターフェースのみを記載しています。要件に合わせて調整する必要があります。すべてのインターフェースは、TimeTransmitterロールに静的に設定されています。
46.4.2.3 `ts2phc`アドインカード用設定ファイル #
[global] use_syslog 0 verbose 1 logging_level 7 ts2phc.pulsewidth 100000000 [p1p1] ts2phc.channel 1 ts2phc.extts_polarity rising ts2phc.pin_index 1 [p2p1] ts2phc.channel 1 ts2phc.extts_polarity rising ts2phc.pin_index 1
この設定は、各コントローラーのSDP1を介した2枚のアドインカード(最初のポート`p1p1`および`p2p1`で参照)の同期を対象としています。
46.4.2.4 GMパラメータ転送スクリプト #
以下のスクリプトを使用して、GMが存在するインスタンス以外の`ptp4l`インスタンスによって処理されるポート上のTime Receiverに、GMの値とパラメータを転送できます。`Input variables`セクションを編集してファイル名を調整し、システムがGMに同期されたら実行することを忘れないでください。
bin/bash。
set -euo pipefail
################## 入力変数 ##################
VERBOSE=1
CONFIG_FILE_NAC=/etc/ptp4l-G.8275.1-nac-bmca.conf
CONFIG_FILES_AICS=(/etc/ptp4l-G.8275.1-aic1-static.conf /etc/ptp4l-G.8275.1-aic2-static.conf)
#####################################################
# システムがGMに同期されていることを確認します
GM_PRESENT=$(pmc -f ${CONFIG_FILE_NAC} -u -b 0 'GET TIME_STATUS_NP' | awk '/gmPresent/ {print $2}')
if [ \"${GM_PRESENT}\" != \"true\" ]; then
echo \"GMが存在しないため、終了します...\"
exit 1
fi
# 「アップストリーム」グランドマスターの値を取得します
PDS_GM_VALUES=$(pmc -f ${CONFIG_FILE_NAC} -u -b 0 'GET PARENT_DATA_SET' | awk 'BEGIN {ORS=" "} /gm./ {print $2}')
TPDS_GM_VALUES=$(pmc -f ${CONFIG_FILE_NAC} -u -b 0 'GET TIME_PROPERTIES_DATA_SET' | awk 'BEGIN {ORS=" "} NR>2 {print $2}')
if [ -z \"$PDS_GM_VALUES\" ]; then
echo \"PARENT_DATA_SETの値が取得できませんでした\"
exit 2
elif [ -z \"$TPDS_GM_VALUES\" ]; then
echo \"TIME_PROPERTIES_DATA_SETの値が取得できませんでした\"
exit 2
fi
# PARENT_DATA_SETから展開します
read CLOCK_CLASS CLOCK_ACCURACY VARIANCE <<< $PDS_GM_VALUES
# TIME_PROPERTIES_DATA_SETから展開します
read UTC_OFFSET LEAP_61 LEAP_59 UTC_OFFSET_VALID PTP_TIMESCALE T_TRACEABLE F_TRACEABLE T_SOURCE <<< $TPDS_GM_VALUES
if [ \"$VERBOSE\" -eq 1 ]; then +
echo \"PARENT_DATA_SETから読み取り: clockClass=${CLOCK_CLASS} clockAccuracy=${CLOCK_ACCURACY} offsetScaledLogVariance=${VARIANCE}\" +
echo \"TIME_PROPERTIES_DATA_SETから読み取り: currentUtcOffset=${UTC_OFFSET} leap61=${LEAP_61} leap59=${LEAP_59}\" \\ +
\"currentUtcOffsetValid=${UTC_OFFSET_VALID} ptpTimescale=${PTP_TIMESCALE} timeTraceable=${T_TRACEABLE}\" \\ +
\"frequencyTraceable=${F_TRACEABLE} timeSource=${T_SOURCE}\" +
fi
# これらの値を「ダウンストリーム」のタイムレシーバーに転送し、ptp4lインスタンスを更新します
for FILE in \"${CONFIG_FILES_AICS[@]}\"; do +
if [ \"$VERBOSE\" -eq 1 ]; then +
echo \"GRANDMASTER_SETTINGS_NP (${FILE}) を更新中\" +
fi
pmc -f ${FILE} -u -b 0 'SET GRANDMASTER_SETTINGS_NP
clockClass '${CLOCK_CLASS}'
clockAccuracy '${CLOCK_ACCURACY}'
offsetScaledLogVariance '${VARIANCE}'
currentUtcOffset '${UTC_OFFSET}'
leap61 '${LEAP_61}'
leap59 '${LEAP_59}'
currentUtcOffsetValid '${UTC_OFFSET_VALID}'
ptpTimescale '${PTP_TIMESCALE}'
timeTraceable '${T_TRACEABLE}'
frequencyTraceable '${F_TRACEABLE}'
timeSource '${T_SOURCE}'' &> /dev/null
if [ $? -ne 0 ]; then +
echo \"${FILE} の更新に失敗しました\" +
fi +
doneこのスクリプトは、GMが変更されるたびに実行する必要があります。