【问题标题】:Need to improve the Linux performance for embedded system需要提高嵌入式系统的Linux性能
【发布时间】:2015-07-14 12:38:10
【问题描述】:

我有一个基于 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 都不会错过最后期限。 如何调试正在等待的系统,以便我可以消除这些等待或至少避免这些等待。

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

【问题讨论】:

  • 对不起,我编辑了标题:)

标签: image-processing process linux-kernel real-time ethernet


【解决方案1】:

Linux 不是实时操作系统。除了“尽最大努力”安排之外,它不提供任何保证。

如果你有一个任务必须一直以特定的速度运行,你需要在适当的 RTOS 下运行该任务 可以保证。

否则,您必须将约束放宽为“大多数情况下每 4 毫秒运行一次”。

【讨论】:

  • 是的,但是使用 PREEMPT 和 PREEMPT_RT 补丁是不可能的吗?
  • 不保证(据我了解)
  • 嗯。 -1 并且接受了 :) 否决者愿意详细说明我的错误吗?
【解决方案2】:
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-12
    • 1970-01-01
    • 2010-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    相关资源
    最近更新 更多