以太网/现场总线性能
下一节介绍如何优化运行 Linux 的现有 Linux 系统 CODESYS 使用基于以太网的现场总线时的运行系统。例如,这些现场总线包括 EtherCAT, PROFINET,或 EtherNet/IP。
此处的描述是作为示例给出的 EtherCAT Master,也可以用同样的方式用于 PROFINET。
要求
硬件
台式电脑
Linux 电脑:
每个实时敏感现场总线(例如 EtherCAT Master/PROFINET)至少有一个免费以太网端口,仅供专用。
重要
不应通过交换机或 USB 连接使用的端口(甚至不能通过内部连接)。
软件
CODESYS IDE
带有 EtherCAT 主站的 IEC 应用程序
带有实时内核的 Linux 操作系统,例如 Debian
有关更多信息,请参阅以下内容: 性能优化
CODESYS 运行时系统 — 例如 CODESYS Control for Linux SL
配置
目标本质上是确保所有参与操作的线程 CODESYS 运行系统作为 EtherCAT Masters,在预定义的 CPU 上运行,优先级已定义。为此,可以在 IEC 应用程序和 Linux 系统上进行设置。
重要
请勿为此使用 CPU 0,因为操作系统通常将其用于某些系统服务(内务管理)。
为了在 Linux 系统上进行优化,建议使用 PLCShell 命令。也可以通过运行时配置或直接在 Linux 系统上配置所需的设置。有关更多信息,请参阅以下内容: 性能优化
与 CODESYS 建立与运行时系统的连接,然后打开 PLCShell。
设置
scaling_governor到performance。rt-set scaling_governor all performance
设置 CPU 频率。你需要直接在 Linux 系统上配置这些设置。有关更多信息,请参阅以下内容: 在 Linux 系统上设置 CPU 频率。
在运行时版本 SP23 及更高版本中,将有用于设置 CPU 频率的 PLCShell 命令。
首先确定可能的频率:
rt-get cpu_frequency
输出示例

将频率(最小值和最大值)设置为固定值:
rt-set cpu_frequency all 3000000
禁用超线程:
rt-set hyperthreading off
禁用节流:
rt-set throttling off
为使用的网络适配器启用 NAPI 线程(此处:
ens5):rt-set napi ens5 on
确定网络适配器的 IRQ 和 NAPI 线程:
irq-list
输出示例

使用
irq-set-prio和irq-set-affinity提高网络适配器的优先级(例如,在 55 上)并将网络适配器绑定到同一 CPU 上,例如,0x2用于 CPU 1。重要
按名称而不是数字设置首选项。当系统启动时,数字可能会发生变化。

将相应的 NAPI 线程设置为相同的优先级和 CPU:

设置优先级
EtherCAT_Task到 1。这相当于 Linux 的实时优先级 55。有关更多信息,请参阅以下内容: 在 Linux 系统上映射任务优先级
使用任务组绑定
EtherCAT_Task到同一 CPU(此处:Core 1,对应于亲和力)0x2):
案例示例: EtherCAT, PROFINET, EtherNet/IP
场景:3 条基于以太网的现场总线(示例 EtherCAT, PROFINET, EtherNet/IP) 在至少有 4 个 CPU 的 Linux 系统上
建议使用以下设置(避免使用 CPU 0):
现场总线 | IEC 任务名称 | IEC 任务优先级 | IEC 任务核心 | IRQ 优先级 | IRQ Affinity |
|---|---|---|---|---|---|
EtherCAT |
| 1 | 1 | 55 | 0x2(中央处理器 1) |
PROFINET |
| 1 | 2 | 55 | 0x4(中央处理器 2) |
EtherNet/IP |
| 1 | 3 | 55 | 0x8(中央处理器 3) |
在 Linux 系统上设置 CPU 频率
重要
Linux 系统启动时,以下设置会丢失,因此必须在重启后重置。
您可以使用以下 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
您可以使用以下命令来设置 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