Skip to main content

イーサネット/フィールドバスパフォーマンス

次のセクションでは、を実行する既存の Linux システムを最適化する方法について説明します。 CODESYS イーサネットベースのフィールドバスを使用する際のランタイムシステム。これらのフィールドバスには EtherCAT、 PROFINET、または EtherNet/IP。

ここでの説明は、例として示されています EtherCAT マスターして同じように使うこともできます PROFINET。

必要条件

  • ハードウェア

    • デスクトップ PC

    • リナックス PC:

      リアルタイムセンシティブフィールドバスごとに少なくとも1つの空きイーサネットポート(EtherCATマスター/PROFINETなど)を専用で使用してください。

      重要

      使用するポートは、スイッチやUSBで接続しないでください(内部接続もできません)。

  • ソフトウェア

    • CODESYS IDE

    • EtherCAT マスターを使用した IEC アプリケーション

    • リアルタイムカーネルを使用する Linux オペレーティングシステム (Debian など)

      詳細については、以下を参照してください。 パフォーマンス最適化

    • CODESYS ランタイムシステム — 例えば CODESYS Control​ for Linux SL

コンフィギュレーション

目標は基本的に、すべてのスレッドが動作に関与していることを確認することです CODESYS EtherCAT マスターのようなランタイムシステムは、あらかじめ定義された CPU 上で優先順位が決められています。そのためには、IEC アプリケーションと Linux システムの両方で設定が可能です

重要

CPU 0 は通常、オペレーティングシステムで特定のシステムサービス (ハウスキーピング) に使用されるため、CPU 0 を使用しないでください。

Linux システムで最適化するには、PLCShell コマンドを使用することをお勧めします。必要な設定は、ランタイム設定から、または Linux システムで直接設定することもできます。詳しくは、以下を参照してください パフォーマンス最適化

  1. CODESYS とランタイムシステムとの接続を確立し、PLCShell を開きます。

  2. セット scaling_governor に performance。

    rt-set scaling_governor all performance
  3. CPU 周波数を設定します。これらの設定は Linux システムで直接行う必要があります。詳しくは、以下を参照してください Linux システムでの CPU 周波数の設定。

    ランタイムバージョン SP23 以降では、CPU 周波数を設定するための PLCShell コマンドが用意されています。

    まず、可能な周波数を決定します。

    rt-get cpu_frequency

    出力の例

    _rtsl_img_ethernet_performance.png
  4. 周波数 (最小と最大) を固定値に設定します。

    rt-set cpu_frequency all 3000000
  5. ハイパースレッディングを無効にする:

    rt-set hyperthreading off
  6. スロットリングを無効にする:

    rt-set throttling off
  7. 使用しているネットワークアダプタの NAPI スレッドを有効にします (ここでは: ens5):

    rt-set napi ens5 on
  8. ネットワークアダプタのIRQスレッドとNAPIスレッドを確認します。

    irq-list

    出力の例

    _rtsl_img_ethernet_performance_1.png
  9. 使用 irq-set-prio そして irq-set-affinity ネットワークアダプターの優先度を上げて (たとえば 55)、ネットワークアダプターを同じ CPU にバインドするには (たとえば、 0x2 CPU 1 用です。

    重要

    プリファレンスを番号ではなく名前で設定します。番号はシステムの起動時に変わることがあります。

    _rtsl_img_ethernet_performance_2.png
  10. それぞれの NAPI スレッドを同じ優先度と CPU に設定します。

    _rtsl_img_ethernet_performance_3.png
  11. の優先順位を設定します EtherCAT_Task 1 へ。これは Linux のリアルタイム優先順位 55 に相当します。

    詳細については、以下を参照してください。 Linux システムにおけるタスク優先度のマッピング

  12. タスクグループを使用してバインドします EtherCAT_Task 同じ CPU (ここでは Core 1、アフィニティに対応) 0x2):

    _rtsl_img_ethernet_performance_4.png

ケース例: EtherCAT、 PROFINET、 EtherNet/IP

シナリオ:3 つのイーサネットベースのフィールドバス (例 EtherCAT、 PROFINET、 EtherNet/IP) 4 個以上の CPU を搭載した Linux システムでは

以下の設定が推奨されます (CPU 0 は避けてください)。

フィールドバス

IEC タスク名

IEC タスク優先度

IEC タスクコア

IRQ プライオリティ

IRQ アフィニティ

EtherCAT

EtherCAT_Task

1

1

55

0x2 (プロセッサ 1)

PROFINET

Profinet_IOTask

1

2

55

0x4 (CPU 2)

EtherNet/IP

ENIPScannerIOTask

1

3

55

0x8 (プロセッサ 3)

Linux システムでの CPU 周波数の設定

重要

次の設定は Linux システムの起動時に失われるため、再起動後にリセットする必要があります。

  1. 次の Linux コンソールコマンドを使用して、CPU 周波数の最小値と最大値を決定できます (ここでは CPU0-3)。

    cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq
    cat /sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_max_freq
    cat /sys/devices/system/cpu/cpu2/cpufreq/cpuinfo_max_freq
    cat /sys/devices/system/cpu/cpu3/cpufreq/cpuinfo_max_freq
    cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_min_freq
    cat /sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_min_freq
    cat /sys/devices/system/cpu/cpu2/cpufreq/cpuinfo_min_freq
    cat /sys/devices/system/cpu/cpu3/cpufreq/cpuinfo_min_freq

    出力の例

    3800000
    3800000
    3800000
    3800000
    1600000
    1600000
    1600000
    1600000
  2. 次のコマンドを使用して CPU 周波数を設定できます。

    echo "3000000" | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_max_freq
    echo "3000000" | sudo tee /sys/devices/system/cpu/cpu1/cpufreq/scaling_max_freq
    echo "3000000" | sudo tee /sys/devices/system/cpu/cpu2/cpufreq/scaling_max_freq
    echo "3000000" | sudo tee /sys/devices/system/cpu/cpu3/cpufreq/scaling_max_freq
    echo "3000000" | sudo tee /sys/devices/system/cpu/cpu0/cpufreq/scaling_min_freq
    echo "3000000" | sudo tee /sys/devices/system/cpu/cpu1/cpufreq/scaling_min_freq
    echo "3000000" | sudo tee /sys/devices/system/cpu/cpu2/cpufreq/scaling_min_freq
    echo "3000000" | sudo tee /sys/devices/system/cpu/cpu3/cpufreq/scaling_min_freq