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
Stabilire una connessione con CODESYS al sistema runtime e aprire PLCShell.
Set
scaling_governoraperformance.rt-set scaling_governor all performance
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

Imposta la frequenza (min e max) su un valore fisso:
rt-set cpu_frequency all 3000000
Disabilita l'hyperthreading:
rt-set hyperthreading off
Disabilita la limitazione:
rt-set throttling off
Abilita i thread NAPI per l'adattatore di rete utilizzato (qui:
ens5):rt-set napi ens5 on
Determina i thread IRQ e NAPI della scheda di rete:
irq-list
Esempio di output

Usare
irq-set-prioeirq-set-affinityper aumentare la priorità degli adattatori di rete, ad esempio su 55, e associare gli adattatori di rete alla stessa CPU, ad esempio,0x2per CPU 1.Importante
Imposta le preferenze per nome, non per numero. I numeri possono cambiare all'avvio del sistema.

Imposta i rispettivi thread NAPI sulla stessa priorità e CPU:

Imposta la priorità del
EtherCAT_Taska 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
Usa un gruppo di attività per associare
EtherCAT_Taskalla stessa CPU (qui: Core 1), corrisponde all'affinità0x2):
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 |
| 1 | 1 | 55 | 0x2 (CPU 1) |
PROFINET |
| 1 | 2 | 55 | 0x4 (CPU 2) |
EtherNet/IP |
| 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.
È 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
È 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