我们正在构建一个系统、其中包含一个在 MCU 岛 R5F (mcu1_1)上运行的应用程序。 此应用每15ms 运行一次大约10ms。 在运行时期间、它与 A72上运行的另一个应用程序多次交换数据。 此应用具有实时(sched_fifo)优先级。 A72运行的是包含 preempt_rt 补丁集的 Linux。
我们计划使用 rpmsg 实施这些应用程序之间的通信。 ( 在 A72上使用 ti-rpmsg-char)这是可行的、通信时间和一般延迟似乎足以满足我们的要求。 不过、如果较低优先级的 Linux 任务恰好在与 A72应用程序相同的内核上运行、我们会遇到问题。 如果该较低优先级的任务(例如、某些系统的辅助控制)运行长达几毫秒、则从 R5F 接收数据的时间会延迟约该段时间。 我们已经确保涉及的中断处理程序具有足够高的优先级、但这还不够。
在迹线中、我们可以看到、为系统中的 A72应用从 R5F 接收数据的正常流程如下:
- mcu1_0的 mbox 中断处理程序(mbox-mcu-r5fss0-core0)运行
- mbox 中断处理程序 mxu1_1 (mbox-mcu-r5fss0-core1)运行
-该核心运行的 kworker
-我们的 A72应用程序被唤醒并接收数据
问题在于 kworker 线程具有正常的优先级(sched_other),必须等待其他 Linux 任务,然后才能开始工作。
您是否知道这些问题? 据我们所知、在 Linux 内核中无法轻松更改这些 kworker 线程的默认优先级。 可以更改当前正在运行的 kworker 线程的优先级,但这些线程会定期停止和重新生成。 您是否知道任何 Linux 配置选项、这些选项可以跳过 kworker 的使用并在中断处理程序期间直接完成所有操作? 您对此问题有其他建议吗? 我们希望避免隔离此内核、以免浪费 CPU 资源。

