ZHCAEA5 August 2024 AM625 , AM6442 , AM69 , TDA4VM
通过禁用多个后台进程并调整在 ARM64 A53 核心上 Linux 中运行的 CODESYS 特定进程,调整了 AM62x 和 AM64x EtherCAT 控制器,实现了更好的性能。从 AM62x 的实时“tisdk-default-image”软件开发套件 (SDK) 版本 09.01.00.08 映像中禁用的主要后台进程有 ti-apps-launcher、pulseaudio、systemd-timesyncd、telnetd、weston 和 containerd。最初激活这些后台进程是为了展示与 EtherCAT 应用程序无关的功能。禁用这些进程的目的是减少四个 A53 核心上的部分 CPU 负载,并将映像配置为接近 AM62x 的实时“tisdk-thinlinux-image”。这样做是因为当将默认映像与精简映像进行比较时,周期时间性能略有改善,从大约 350µs 的平均值更改为大约 250µs。
对周期时间的一个主要影响是名为 Codemeter 的 CODESYS 许可应用程序。大多数计划使用 CODESYS 的 EtherCAT 应用程序都需要使用正在运行的 Codemeter 来实现无限的运行时间。在没有许可应用程序的情况下,CODESYS 只能运行约 30 分钟,然后系统会终止,必须重新启动(另请参阅 CODESYS Control Standard S)。Codemeter 是在接近真实 EtherCAT 用例的环境中进行基准测试的必备应用程序;不过,大约每隔 5-6 分钟,应用程序的 CPU 负载就会激增到接近 100%,这随后会导致周期时间(从大约 350µs 到大约 1000µs)和抖动激增。随着时间的推移,可通过在 Linux 中监控 htop 以及在 CODESYS Development System GUI 中监控周期时间和抖动,可观察到这种激增。
经过进一步调查,Codemeter 的 CPU 亲和性似乎默认在 CPU 0、2 和 3 之间变化,并且从不使用 CPU 1。CPU 1 是默认用于运行 CODESYS 控制应用程序的核心。通过将 CPU 亲和性更改为 CPU 1,巨大的周期时间峰值(约 1000µs)减小到约 500µs。图 4-3 中高于 400µs 的一般峰值是由于在这些时间段内运行 htop 所致。关于 CPU 亲和性变化为何会降低峰值的详细信息仍不清楚。
另外需要注意的是,表 3-1 中报告的所有硬件平台的最大周期时间是与 EtherCAT 协议启动的大约 3 秒周期时间相关的异常值。此周期时间异常值包括设备从“Init”状态循环到“Operational”状态的几个状态的时间(基于 EtherCAT 状态机 (ESM)),启动配置通过非循环邮箱协议从 EtherCAT 控制器发送到 EtherCAT 设备(另请参阅 EtherCAT | 系统描述)。因此,性能的焦点是设备处于稳定状态时。通过 CODESYS Development System 界面注销并重新登录时,也会出现类似的循环时间峰值。在分析中排除此用例的前提是,在实际工厂自动化环境中,不太可能发生持续的注销和登录。
表 3-1 中的“过滤后的最大周期时间”和“过滤后的最大抖动”列指的是过滤掉启动异常值后的近似最大周期时间。这些过滤后的值基于最后 2 小时 46 分钟 39 秒的运行时间,因为 CODESYS Development System 的缓冲区大小仅足以存储这段时间的数据点。
AM62x 的这些优化的最终结果快照可以在图 4-6 中看到,其中最大周期时间是 700µs 的异常值,过滤后的最大周期时间可以估计为大约 500µs。仍观察到一些周期性周期时间增加,有待调查。
总体而言,AM64x 的性能低于 AM62x,部分原因是从 4 个 A53 核心减少到 2 个 A53 核心,导致用于运行 EtherCAT 所需的各种任务和其他后台任务的核心更少。这种核心之间的差异会影响 CPU 负载,导致 AM64x 所有核心的总体 CPU 负载高于 AM62x。高速缓存大小、DDR 速度和总线宽度的差异也是造成 AM64x 和 AM62x 之间性能差异的一个因素。此外,在 AM64x 平台上观察到,在 63 小时的运行时间内,偶尔会出现 542µs 到 1032µs 之间的周期时间峰值。导致 AM64x 上出现此行为的具体原因仍在调查中。