0

我有一个基于 ARM OMAP 的嵌入式系统,带有 1 GHZ 处理器,运行 Linux 2.6.33,交叉编译为 CONFIG_PREEMPT。其中一个进程(进程 1)很关键,需要每 4 或 8 毫秒运行一次,这是可配置的。还有另一个进程的(进程 2)线程将图像传输到 FTP 或任何其他配置的应用程序。为了触发时间关键过程 1,我使用高分辨率计时器作为系统中具有最高实时优先级的单独线程(FIFO,例如 60)。进程 2 的 RT 优先级 (RR 20) 低于进程 1 (RR 50)。

如果没有启用或配置图像传输,我看不到上述关键进程(进程 1)的任何超时。但是,如果我启用任何图像传输,则进程 1 将超时或图像传输由于某些错误而失败,并且其中一个进程死亡,然后其他进程运行正常。

我看到如果图像分辨率更高,那么进程 1 的超时时间会更快。使用更高分辨率的图像(比如 SXGA),NET_RX 以太网中断会长时间保持 CPU,当它放弃 CPU 时,进程 1 超时。看起来 NET_RX 中断的优先级高于用于进程 1 的定时器中断,并且它没有给 CPU。

我想确保进程运行和进程 1 都不会错过最后期限。如何调试它正在等待的系统,以便我可以删除那些等待或至少避免那些如果可能的话。

我怎样才能做到这一点?请帮忙。

4

3 回答 3

0

Linux 不是实时操作系统。除了“尽力而为”调度之外,它不提供任何保证。

如果您有一项必须始终以特定速率运行的任务,需要在可以提供此类保证的适当 RTOS 下运行该任务

否则,您必须将约束放宽为“主要每 4 毫秒运行一次”。

于 2013-04-04T11:45:16.493 回答
0

您可能需要查看“ http://www.techonline.com/electrical-engineers/education-training/tech-papers/4402454/Challenges-in-Using-Linux-for-CPU-intensive-real-time-networking-产品”。它描述了 PREEMPT_RT 中的网络性能

于 2013-05-01T03:45:36.133 回答
0

我通过修改将图像数据发送到 SCHED_NORMAL 的线程的优先级并重新安排源代码以避免不必要的循环,找到了解决此性能问题的方法。现在我看到图像传输不会影响整个系统的性能。

于 2015-07-14T04:38:10.147 回答