EtherCAT MainDevice ソフトウェアスタックのパフォーマンス

EtherCAT技術をフィールドバスとして使用する場合、性能はしばしば決定的な要素となります。
しかし「性能」とは具体的に何を意味するのでしょうか?

多くの場合、性能は「速度」と同義に扱われます。EtherCATネットワークにおいては、これは通常、1kHz程度またはそれ以上の高速サイクルタイムを意味し、高速な制御周期を実現することを指します。しかし「良好な性能」とは、単に高速な動作だけでなく、大量のデータを処理できること、あるいは1つのコントローラから多くのデバイスを操作できる能力を指す場合もあります。

EtherCATネットワークにおけるこれらの性能要件は最終的にEtherCAT MainDeviceに依存します。
したがって、EtherCAT MainDeviceソフトウェアは次のすべての要件を満たす必要があります。

  • 高速なデバイス更新のための短いサイクルタイムをサポートすること
  • 大量のサイクリックプロセスデータを処理できること
  • 多数のEtherCATデバイスを扱えること

さらに、これらすべてをコントローラへの負荷をできるだけ低く抑えた上で実現しなければなりません。高性能なEtherCATネットワークを構築するためには、機能、エラーチェック、診断機能、そして障害発生時の信頼性において一切の妥協をしてはなりません。

設計上の考慮事項

これを実現するためには、EtherCAT MainDeviceソフトウェアは計算時間を可能な限り効率的に使用できるよう設計されている必要があります。

これを達成するための重要な設計上の特徴は以下の通りです。

  • MainDeviceソフトウェアからEthernetコントローラへ直接アクセスする、
    高性能かつリアルタイム対応のEthernetドライバ(リンクレイヤ)の採用
  • サイクリック処理部がオペレーティングシステムに依存しない構造
  • 割り込みを使用しない動作のサポート
  • 内部タスクを持たない設計
  • 重要度の低い非サイクリック処理を複数サイクルに分散(タイムスライス)して実行
  • 非サイクリック(メールボックス)通信トラフィックを制限
  • 「C」マクロおよび最適化されたコンパイラの利用

平均的なCPU時間消費を削減するだけでなく、ピーク負荷(最大CPU時間または最大バス利用率) も重要な指標です。EtherCAT MainDeviceソフトウェアは、ピーク負荷を低減できるように複数のパラメータを提供・管理する必要があります。目的は、MainDevice上で動作するアプリケーションが常に十分な演算能力を確保できるようにし、指定されたタイミングを確実に維持することです。

システム変数

現在、EtherCATはさまざまなアプリケーションで使用されています。
コントローラハードウェアは、小型の組込みARMプロセッサ(Cortex-M4など)から、高性能なマルチコアARMプロセッサ(Cortex-A57)、さらには産業用PCやサーバー向けのIntel Core i5/i7、Xeonなどにまで及びます。

MainDeviceはこれらすべてのシステム上に実装可能ですが、アプリケーションによって最大接続可能SubDevice数、サイクリックデータサイズ、最短サイクルタイムは大きく異なります。
EtherCATシステム設計の際、必要なプロセッサを決定する際にMainDeviceの性能を基準にすることは稀であり、通常はアプリケーション側の処理要件がプロセッサ選定を決定します。

したがって、達成可能な性能を左右し、必要なコントローラハードウェアの選定に影響を与える要因は次の通りです。

  • SubDeviceの数および種類
  • サイクリックプロセスデータのサイズ
  • 必要なサイクルタイム
  • 要求されるEtherCAT MainDevice機能(分散クロック、ホットコネクト、冗長化など)
  • アプリケーションで必要とされる計算能力

以下で示すように、acontisのEtherCAT MainDeviceソフトウェア EC-Master はこれらすべての設計要件を考慮し、各種システム変数を最適に管理することで、通常CPU使用率を1020%程度に抑えています。

測定方法

制御ハードウェアの選定や、既存ハードウェアでEtherCATをどの程度実現できるかを判断するためには、既存の性能値を参照するか、新たに測定を行うことが有効です。アプリケーションのサイクリック処理領域において、EtherCAT MainDeviceソフトウェアが実行する全プロセス経路のCPU時間消費を正確に測定することが重要です。

近年、acontisでは異なるシステムおよびオペレーティングシステム上で、多数の性能測定を同一の参照ネットワーク構成で実施してきました。これらのデータは、特定プロセッサで達成可能な性能を概算するための目安として利用できます。

ただし、最も信頼できる数値は、実際のハードウェアとターゲットOS、実際のネットワーク構成で測定した結果です。この測定は特別な知識や追加機材を必要とせず、acontisのEC-Masterに同梱されているサンプルアプリケーション EcMasterDemo および EcMasterDemoDc を使用して簡単に実行できます。これらのデモアプリケーションでは、各EC-Masterジョブ関数の実行時間(最小・最大・平均値)やサイクルタイムを計算し、ログファイルまたはコンソールに出力します。

サンプルアプリケーションに組み込まれた測定機能

acontis EC-Masterにおいて、アプリケーションとEC-Masterのサイクリック部分の統合は、特定の機能を同期的に呼び出すことで行われます。これらの機能(ジョブ)は、高優先度タスクから呼び出され、ネットワークタイミングを制御します。多くの場合、この高優先度タスクは既存のアプリケーション内に存在しており、単純にその中から呼び出すことができます。これらのジョブはアプリケーションコンテキスト内で実行されるため、他のタスクとの相互作用がなく、EC-MasterスタックのCPU時間消費を正確に測定することができます。

関数は以下の通りです。

サイクルの開始時に、まず新しく受信したデータ(入力)が更新されます。これは「Process Inputs」ジョブ関数の呼び出し時に、以前に受信したEtherCATフレームを評価することで実行されます。アプリケーションはこの新しい入力データを使用して、ネットワークへ送信すべきデータ(出力)を計算します。これらの新しい出力データは、「Write Outputs」ジョブ関数の呼び出し時に送信されます。

ダイレクト・メモリ・アクセス(DMA)を利用し、フレームはメモリからEthernetコントローラへCPU負荷をかけることなく転送され、物理ネットワーク上に送信されます。フレームはネットワーク上のすべてのEtherCATデバイスを通過し、割り込みを必要とせず自動的にEC-Masterへ戻ってきます。その後、「EC-Master Administration」ジョブ関数の呼び出し時に、EC-Masterのステートマシンおよび各サブデバイス上のステートマシンが実行されます。

初期起動プロセス中には、すべてのサブデバイスをINIT状態からOPERATIONAL状態へと順序的なステップを経て移行させる必要があります。通常運用中も、ステートマシンは非周期通信(例えば、EtherCAT上のCANアプリケーションプロトコル(CoE)経由でパラメータをダウンロードする際など)を処理するために使用されます。これらの非周期メールボックス通信では、サブデバイス固有の読み書きコマンドを含む別のフレームが必要となります。

この非周期フレームは「Send Acyclic Datagrams/Commands」ジョブ関数を使用して送信されます。

EC-Masterがこの非周期データ通信量を適切に制御できることが重要です。適切な制御が行われない場合、ネットワークやCPUの処理負荷が増大し、全体のパフォーマンスに影響を及ぼす可能性があります。

サンプルアプリケーションによる性能測定

acontis EC-Masterソフトウェアには、同梱のサンプルアプリケーション内に性能測定機能が組み込まれています。コマンドラインパラメータ「–perf」を指定して起動することで、この機能を有効化できます。

有効化すると、サイクリック処理内で呼び出されるジョブ関数の実行時間や、サイクリックタスク全体で消費されたCPU時間が測定されます。測定には高精度の計時APIであるecatPerfMeasStart()および ecatPerfMeasEnd() が使用されます。

測定結果は数秒ごとにログファイルに記録され、コンソールには以下の形式で出力されます。

PerfMsmt 'Cycle Time                     ' (min/avg/max) [usec]:  948.3/1000.0/1053.5
PerfMsmt 'Task Duration (JOB_Total + App)' (min/avg/max) [usec]:    7.4/  12.2/  77.0
PerfMsmt 'JOB_Total                      ' (min/avg/max) [usec]:    7.0/  11.4/  67.5
PerfMsmt 'JOB_ProcessAllRxFrames         ' (min/avg/max) [usec]:    1.3/   3.4/  46.2
PerfMsmt 'JOB_SendAllCycFrames           ' (min/avg/max) [usec]:    3.0/   3.9/  41.5
PerfMsmt 'JOB_MasterTimer                ' (min/avg/max) [usec]:    0.4/   1.5/  37.9
PerfMsmt 'JOB_SendAcycFrames             ' (min/avg/max) [usec]:    1.5/   2.4/  36.9
PerfMsmt 'myAppWorkPd                    ' (min/avg/max) [usec]:    0.0/   0.2/  27.9

測定結果

以下の性能測定は、異なるコントローラおよびサイクルタイムにおいて、16台、32台、64台のSubDeviceを使用して実施されました。EC-MasterによるCPU負荷率は、ジョブ関数の累積実行時間と全体サイクルタイムの比率から算出されています。

Texas Instruments AM3359, ARM Cortex-A8, 32-Bit, 600 MHz

EC-Master CPU Load on TI AM3359

NXP i.MX 8, ARM Cortex-A72, 64-Bit, 1 GHz

EC-Master CPU Load on NXP i.MX8

Intel Atom, Elkhart Lake x6425E, 64-Bit, 1.80 GHz

EC-Master CPU load on Intel Elkhart Lake x6425E

NVIDIA®Jetson AGX Orin™, Cortex®-A78AE, 64-Bit, 2.2 GHz

EC-Master CPU Load on NVIDIA®Jetson AGX Orin™

EC-Master パフォーマンスデータシート

さまざまなCPUアーキテクチャ、ボード、オペレーティングシステム上でのEC-Masterの性能測定結果は、EC-Master Performance Data Sheet にまとめられています。