Skip to main content

Performances Ethernet/Fieldbus

La section suivante décrit comment optimiser un système Linux existant qui exécute un CODESYS Système d'exécution utilisant des bus de terrain basés sur Ethernet. Ces bus de terrain comprennent, par exemple, EtherCAT, PROFINET, ou EtherNet/IP.

La description ici est donnée à titre d'exemple pour EtherCAT Master et peut également être utilisé de la même manière pour PROFINET.

Exigences

  • Matériel

    • PC de bureau

    • PC Linux :

      Au moins un port Ethernet libre par bus de terrain sensible en temps réel, par exemple EtherCAT Master/PROFINET, pour une utilisation exclusive.

      Important

      Le port utilisé ne doit pas être connecté par un commutateur ou un port USB (même pas en interne).

  • Logiciel

    • CODESYS IDE

    • Application IEC avec un EtherCAT Master

    • Système d'exploitation Linux — par exemple Debian — avec un noyau en temps réel

      Pour plus d'informations, consultez les rubriques suivantes : Optimisation des performances

    • CODESYS Système d'exécution, par exemple CODESYS Control​ for Linux SL

Configuration

L'objectif est essentiellement de s'assurer que tous les threads impliqués dans le fonctionnement du CODESYS Système d'exécution en tant que EtherCAT Masters, exécuté sur un processeur prédéfini avec une priorité définie. Pour ce faire, les réglages sont possibles à la fois dans l'application IEC et sur le système Linux.

Important

N'utilisez pas le processeur 0 pour cela car il est généralement utilisé par le système d'exploitation pour certains services système (maintenance).

Pour l'optimisation sur le système Linux, il est recommandé d'utiliser les commandes PLCShell. Les paramètres requis peuvent également être configurés via la configuration d'exécution ou directement sur le système Linux. Pour plus d'informations, consultez les rubriques suivantes : Optimisation des performances

  1. Établissez une connexion avec CODESYS avec le système d'exécution et ouvrez le PLCShell.

  2. Set scaling_governor à performance.

    rt-set scaling_governor all performance
  3. Réglez la fréquence du processeur. Vous devez configurer ces paramètres directement sur le système Linux. Pour plus d'informations, consultez les rubriques suivantes : Réglage de la fréquence du processeur sur un système Linux.

    Dans les versions d'exécution SP23 et supérieures, des commandes PLCShell seront disponibles pour régler la fréquence du processeur.

    Déterminez d'abord les fréquences possibles :

    rt-get cpu_frequency

    Exemple de sortie

    _rtsl_img_ethernet_performance.png
  4. Réglez la fréquence (min et max) sur une valeur fixe :

    rt-set cpu_frequency all 3000000
  5. Désactivez l'hyperthreading :

    rt-set hyperthreading off
  6. Désactivez la régulation :

    rt-set throttling off
  7. Activez les threads NAPI pour l'adaptateur réseau utilisé (ici : ens5) :

    rt-set napi ens5 on
  8. Déterminez les fils IRQ et NAPI de la carte réseau :

    irq-list

    Exemple de sortie

    _rtsl_img_ethernet_performance_1.png
  9. Utiliser irq-set-prio et irq-set-affinity pour augmenter la priorité des adaptateurs réseau (par exemple, sur 55) et lier les adaptateurs réseau au même processeur, par exemple, 0x2 pour CPU 1.

    Important

    Définissez les préférences par nom et non par numéro. Les chiffres peuvent changer au démarrage du système.

    _rtsl_img_ethernet_performance_2.png
  10. Réglez les threads NAPI respectifs avec la même priorité et le même processeur :

    _rtsl_img_ethernet_performance_3.png
  11. Définissez la priorité du EtherCAT_Task à 1. Cela correspond à la priorité 55 en temps réel de Linux.

    Pour plus d'informations, consultez les rubriques suivantes : Cartographie des priorités des tâches sur un système Linux

  12. Utilisez un groupe de tâches pour lier les EtherCAT_Task au même processeur (ici : Core 1, correspond à l'affinité) 0x2) :

    _rtsl_img_ethernet_performance_4.png

Exemple de cas : EtherCAT, PROFINET, EtherNet/IP

Scénario : 3 bus de terrain basés sur Ethernet (exemple EtherCAT, PROFINET, EtherNet/IP) sur un système Linux doté d'au moins 4 processeurs

Les paramètres suivants sont recommandés (la CPU 0 est évitée) :

Bus de terrain

Nom de la tâche IEC

Priorité des tâches IEC

Noyau de tâches IEC

Priorité IRQ

Affinité IRQ

EtherCAT

EtherCAT_Task

1

1

55

0x2 (processeur 1)

PROFINET

Profinet_IOTask

1

2

55

0x4 (processeur 2)

EtherNet/IP

ENIPScannerIOTask

1

3

55

0x8 (processeur 3)

Réglage de la fréquence du processeur sur un système Linux

Important

Les paramètres suivants sont perdus au démarrage d'un système Linux et doivent donc être réinitialisés après un redémarrage.

  1. Vous pouvez utiliser les commandes de console Linux suivantes pour déterminer les fréquences minimale et maximale du processeur (ici : 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

    Exemple de sortie

    3800000
    3800000
    3800000
    3800000
    1600000
    1600000
    1600000
    1600000
  2. Vous pouvez utiliser les commandes suivantes pour régler les fréquences du processeur :

    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