|Index|SUSE Telco Cloud ドキュメント|Telco機能の設定|高精度時刻同期プロトコル (PTP)
適用項目 SUSE Telco Cloud 3.6

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_CODE
注記
注記

SUSE 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 ptp4l

46.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 ptp4l

46.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の動作を有効にするには、システムが起動するたびに、以下の手順を同じ順序で実行してください。

  1. 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
    注記
    注記

    設定対象のシステムで見つかった実際の名前に合わせて、後続のコマンドを調整してください。

  2. 組み込みコントローラーは特定の設定が必要となるため、それを特定します。

    以前の出力には、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`はこのシステムの統合イーサネットコントローラーの最初のポートであることに注意してください。

  3. 統合イーサネットコントローラー上のPHCとシステムタイミングDPLL間の信号を設定します。

    1. DPLLを使用して、統合コントローラー上のイーサネットクロックを駆動させます。

      # echo 4 1 > /sys/class/net/em5/device/tspll_cfg
    2. SDP2ピン(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
    3. オプションで、ピンSPD0(1Hz信号)も有効にできます。

      # echo 2 2 > /sys/class/ptp/ptp1/pins/SDP0
      # echo 2 0 0 1 0 > /sys/class/ptp/ptp1/period
    4. タイミングシステムDPLLから追加のアドインカードへ1 PPS信号が伝搬されるように有効にします。

      # echo 1 1 > /sys/class/ptp/ptp2/pins/SDP1
      # echo 1 1 > /sys/class/ptp/ptp3/pins/SDP1
  4. `ts2phc`を実行して、アドインカードのPHCをPHC `/dev/ptp1`と同じタイムスタンプに同期させます。

    # ts2phc -f ts2phc-aic-all.cfg -s /dev/ptp1

    `ts2phc-aic-all.cfg`の内容については、46.4.2.3項 「`ts2phc`アドインカード用設定ファイル」を参照してください。

  5. 統合コントローラー(/dev/ptp1)に対して`ptp4l`のインスタンスを実行します。

    # ptp4l -f ptp4l-G.8275.1-nac.conf

    `ptp4l-G.8275.1-nac.conf`の内容については、46.4.2.1項 「統合コントローラー用`ptp4l`設定ファイル(/dev/ptp1)」を参照してください。

  6. 各アドインカード(/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`)」を参照してください。

    注記
    注記

    競合を防ぎ、次のステップを有効にするために、これらの各インスタンスは異なる制御ソケットおよび読み取り専用ソケットを使用する必要があります。

  7. 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パラメータ転送スクリプト」を参照してください。

  8. オプションとして、`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が変更されるたびに実行する必要があります。