linux - 如何在Linux中提高1ms定时器的实时性能?

标签 linux timer embedded real-time preempt-rt

我正在开发一个嵌入式 Linux 项目,使用的 arago 发行版可能是 3.3 版左右。

我已经配置了一个高分辨率的 Linux 定时器,每毫秒唤醒我的进程一次。这工作正常,但时间有两个问题:

  1. 起床时间抖动
  2. 尽管进程完成的处理是恒定的,但清醒时处理时间的变化。

我将这些问题归因于 Linux 的实时性能较差。但我需要 研究提高实时性能的方法。

我检查过内核配置了 CONFIG_PREEMPT 内核选项,这对实时性很好。

我还在我的进程中应用了 SCHED_FIFO 调度类:

struct sched_param schedparm;
memset(&schedparm, 0, sizeof(schedparm));
schedparm.sched_priority = 1; // lowest rt priority
sched_setscheduler(0, SCHED_FIFO, &schedparm);

但这没有什么区别。

我想一个合乎逻辑的步骤是将 PREEMPT_RT 补丁应用于内核构建,但我还没有确定如何做到这一点。

还有什么我可以做的来改善抖动/持续时间的可变性吗?

或者任何人都可以建议有关如何应用 PREEMPT_RT 补丁的易于访问的教程吗?

最佳答案

看来 PREEMPT_RT 是合乎逻辑的下一步。您试过本教程了吗?

https://rt.wiki.kernel.org/index.php/RT_PREEMPT_HOWTO

更新:我建议您看看其他人如何构建抢占式内核,例如这里: https://aur.archlinux.org/packages/linux-rt/

您可以阅读 PKGBUILD 以了解所做的事情。

关于linux - 如何在Linux中提高1ms定时器的实时性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13721701/

相关文章:

c - 如何为指定的子进程分配一个CPU?

Linux 审计日志 - 带有失败退出代码的成功事件

linux - 无法从目录中删除文件

unit-testing - 使用ESP-IDF进行单元测试

c - 在GDB(Eclipse)中使用堆栈跟踪调试Coldfire MCF5235上的未知程序异常

c++ - 负序转换为负数?

javascript - 将 if else 语句与计时器一起使用

javascript - 客户端计时是否可能与服务器端计时一致?

delphi - 在 Delphi 控制台应用程序中使用 VCL TTimer

c - PIC18F46J50 EEPROM 读/写