Skip to main content

Rendimiento de Ethernet/Fieldbus

La siguiente sección describe cómo optimizar un sistema Linux existente que ejecuta un CODESYS Sistema de ejecución mientras se utilizan buses de campo basados en Ethernet. Estos buses de campo incluyen EtherCAT, PROFINET, o EtherNet/IP.

La descripción aquí se da como ejemplo de la EtherCAT Maestro y también se puede usar de la misma manera para PROFINET.

Requerimientos

  • Hardware

    • PC de sobremesa

    • Ordenador Linux:

      Al menos un puerto Ethernet libre por cada bus de campo sensible en tiempo real (por ejemplo, EtherCAT Master/PROFINET) para uso exclusivo.

      Importante

      El puerto usado no debe conectarse mediante un conmutador o USB (ni siquiera internamente).

  • Software

    • CODESYS IDE

    • Aplicación IEC con un EtherCAT Master

    • Sistema operativo Linux (por ejemplo Debian) con un núcleo en tiempo real

      Para obtener más información, consulte lo siguiente: Optimización del rendimiento

    • CODESYS Sistema de ejecución, por ejemplo CODESYS Control​ for Linux SL

Configuración

El objetivo es básicamente garantizar que todos los hilos que intervienen en el funcionamiento del CODESYS El sistema de ejecución, como EtherCAT Masters, se ejecuta en una CPU predefinida con una prioridad definida. Para ello, es posible realizar ajustes tanto en la aplicación IEC como en el

Importante

No utilice la CPU 0 para ello, ya que el sistema operativo la suele utilizar para determinados servicios del sistema (tareas de limpieza).

Para la optimización en el sistema Linux, se recomienda utilizar los comandos PLCShell. Los ajustes necesarios también se pueden configurar mediante la configuración de tiempo de ejecución o directamente en el sistema Linux. Para obtener más información, consulte lo siguiente: Optimización del rendimiento

  1. Establezca una conexión con CODESYS con el sistema de ejecución y abra el PLCShell.

  2. Set scaling_governor para performance.

    rt-set scaling_governor all performance
  3. Configure la frecuencia de la CPU. Debe configurar estos ajustes directamente en el sistema Linux. Para obtener más información, consulte lo siguiente: Configuración de la frecuencia de la CPU en un sistema Linux.

    En la versión de ejecución SP23 y superior, habrá comandos PLCShell para configurar la frecuencia de la CPU.

    Primero determine las frecuencias posibles:

    rt-get cpu_frequency

    Ejemplo de una salida

    _rtsl_img_ethernet_performance.png
  4. Establezca la frecuencia (mínima y máxima) en un valor fijo:

    rt-set cpu_frequency all 3000000
  5. Deshabilite el hyperthreading:

    rt-set hyperthreading off
  6. Desactivar la limitación:

    rt-set throttling off
  7. Habilite los subprocesos NAPI para el adaptador de red usado (aquí: ens5):

    rt-set napi ens5 on
  8. Determine los subprocesos IRQ y NAPI del adaptador de red:

    irq-list

    Ejemplo de una salida

    _rtsl_img_ethernet_performance_1.png
  9. Utilice irq-set-prio y irq-set-affinity para aumentar la prioridad de los adaptadores de red (por ejemplo, en la 55) y vincular los adaptadores de red a la misma CPU (por ejemplo, 0x2 para CPU 1.

    Importante

    Establezca las preferencias por nombre, no por número. Los números pueden cambiar cuando se inicia el sistema.

    _rtsl_img_ethernet_performance_2.png
  10. Establezca los subprocesos NAPI respectivos con la misma prioridad y CPU:

    _rtsl_img_ethernet_performance_3.png
  11. Establezca la prioridad del EtherCAT_Task a 1. Esto corresponde a la prioridad 55 en tiempo real de Linux.

    Para obtener más información, consulte lo siguiente: Mapeo de las prioridades de las tareas en un sistema Linux

  12. Utilice un grupo de tareas para vincular el EtherCAT_Task a la misma CPU (aquí: Core 1, corresponde a la afinidad 0x2):

    _rtsl_img_ethernet_performance_4.png

Ejemplo de caso: EtherCAT, PROFINET, EtherNet/IP

Escenario: 3 buses de campo basados en Ethernet (ejemplo EtherCAT, PROFINET, EtherNet/IP) en un sistema Linux con al menos 4 CPU

Se recomiendan los siguientes ajustes (se evita la CPU 0):

Fieldbus

Nombre de tarea de IEC

Prioridad de tarea de IEC

Núcleo de tareas de IEC

Prioridad de IRQ

Afinidad de 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)

Configuración de la frecuencia de la CPU en un sistema Linux

Importante

Los siguientes ajustes se pierden cuando se inicia un sistema Linux y, por lo tanto, deben restablecerse tras un reinicio.

  1. Puede usar los siguientes comandos de la consola de Linux para determinar las frecuencias de CPU mínimas y máximas (aquí: 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

    Ejemplo de una salida

    3800000
    3800000
    3800000
    3800000
    1600000
    1600000
    1600000
    1600000
  2. Puede usar los siguientes comandos para configurar las frecuencias de la 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