Skip to main content

Prestazioni Ethernet/Fieldbus

La sezione seguente descrive come ottimizzare un sistema Linux esistente che esegue un CODESYS Sistema di runtime durante l'utilizzo di bus di campo basati su Ethernet. Questi bus di campo includono, ad esempio EtherCAT, PROFINET, o EtherNet/IP.

La descrizione qui è fornita a titolo di esempio per EtherCAT Master e può essere utilizzato allo stesso modo anche per PROFINET.

Requisiti

  • Hardware

    • PC da tavolo

    • PC Linux:

      Almeno una porta Ethernet libera per bus di campo sensibile in tempo reale, ad esempio EtherCAT Master/PROFINET, per uso esclusivo.

      Importante

      La porta utilizzata non deve essere collegata tramite switch o USB (nemmeno internamente).

  • Software

    • CODESYS IDE

    • Applicazione IEC con un master EtherCAT

    • Sistema operativo Linux, ad esempio Debian, con un kernel in tempo reale

      Per ulteriori informazioni, vedere quanto segue: Ottimizzazione delle prestazioni

    • CODESYS Sistema di runtime, ad esempio CODESYS Control​ for Linux SL

Configurazione

L'obiettivo è essenzialmente quello di assicurarsi che tutti i thread, che sono coinvolti nel funzionamento del CODESYS sistemi runtime, come EtherCAT Masters, funzionano su una CPU predefinita con una priorità definita. A tale scopo, le impostazioni sono possibili sia nell'applicazione IEC che nel sistema Linux

Importante

Non utilizzare CPU 0 per questo scopo, poiché in genere viene utilizzata dal sistema operativo per determinati servizi di sistema (pulizia).

Per l'ottimizzazione sul sistema Linux, si consiglia di utilizzare i comandi PLCShell. Le impostazioni richieste possono essere configurate anche tramite la configurazione di runtime o direttamente sul sistema Linux. Per ulteriori informazioni, vedere quanto segue: Ottimizzazione delle prestazioni

  1. Stabilire una connessione con CODESYS al sistema runtime e aprire PLCShell.

  2. Set scaling_governor a performance.

    rt-set scaling_governor all performance
  3. Imposta la frequenza della CPU. È necessario configurare queste impostazioni direttamente sul sistema Linux. Per ulteriori informazioni, vedere quanto segue: Impostazione della frequenza della CPU su un sistema Linux.

    Nella versione runtime SP23 e successive, ci saranno comandi PLCShell per impostare la frequenza della CPU.

    Determinare innanzitutto le frequenze possibili:

    rt-get cpu_frequency

    Esempio di output

    _rtsl_img_ethernet_performance.png
  4. Imposta la frequenza (min e max) su un valore fisso:

    rt-set cpu_frequency all 3000000
  5. Disabilita l'hyperthreading:

    rt-set hyperthreading off
  6. Disabilita la limitazione:

    rt-set throttling off
  7. Abilita i thread NAPI per l'adattatore di rete utilizzato (qui: ens5):

    rt-set napi ens5 on
  8. Determina i thread IRQ e NAPI della scheda di rete:

    irq-list

    Esempio di output

    _rtsl_img_ethernet_performance_1.png
  9. Usare irq-set-prio e irq-set-affinity per aumentare la priorità degli adattatori di rete, ad esempio su 55, e associare gli adattatori di rete alla stessa CPU, ad esempio, 0x2 per CPU 1.

    Importante

    Imposta le preferenze per nome, non per numero. I numeri possono cambiare all'avvio del sistema.

    _rtsl_img_ethernet_performance_2.png
  10. Imposta i rispettivi thread NAPI sulla stessa priorità e CPU:

    _rtsl_img_ethernet_performance_3.png
  11. Imposta la priorità del EtherCAT_Task a 1. Ciò corrisponde alla priorità in tempo reale 55 di Linux.

    Per ulteriori informazioni, vedere quanto segue: Mappatura delle priorità delle attività su un sistema Linux

  12. Usa un gruppo di attività per associare EtherCAT_Task alla stessa CPU (qui: Core 1), corrisponde all'affinità 0x2):

    _rtsl_img_ethernet_performance_4.png

Esempio di caso: EtherCAT, PROFINET, EtherNet/IP

Scenario: 3 bus di campo basati su Ethernet (esempio EtherCAT, PROFINET, EtherNet/IP) su un sistema Linux con almeno 4 CPU

Si consigliano le seguenti impostazioni (CPU 0 è evitata):

Fieldbus

Nome attività IEC

Priorità delle attività IEC

Task Core IEC

Priorità IRQ

Affinità IRQ

EtherCAT

EtherCAT_Task

1

1

55

0x2 (CPU 1)

PROFINET

Profinet_IOTask

1

2

55

0x4 (CPU 2)

EtherNet/IP

ENIPScannerIOTask

1

3

55

0x8 (CPU 3)

Impostazione della frequenza della CPU su un sistema Linux

Importante

Le seguenti impostazioni vengono perse all'avvio di un sistema Linux e quindi devono essere ripristinate dopo il riavvio.

  1. È possibile utilizzare i seguenti comandi della console Linux per determinare le frequenze minime e massime della CPU (qui: 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

    Esempio di output

    3800000
    3800000
    3800000
    3800000
    1600000
    1600000
    1600000
    1600000
  2. È possibile utilizzare i seguenti comandi per impostare le frequenze della 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