我正在做一个项目,对比和观察Linux的抢占RT补丁的性能增益。
我应该在两个不同的内核上执行什么样的C程序来更好地理解抢占RT补丁提供的好处。
寻找对节目的建议。
为了比较/具体演示调度特性,可以实现以下系统:
- 通过数字输入
IN
产生中断 - 中断处理程序通过信号量将输入事件传递给高优先级用户进程。
- 用户进程在接收到信号量时,在数字输出
OUT
上创建一个(比如说)10ms脉冲。
:
- 用信号发生器的一系列脉冲驱动
IN
- 将示波器连接到
IN
和OUT
。 - 触发
IN
的活动(中断产生)边缘的作用域 - 测量
IN
的中断边缘和OUT
的脉冲开始之间的时间和方差。 - 触发
OUT
上脉冲上升沿的作用域 - 测量脉冲宽度的长度和方差。
大多数现代作用域都有一个"持久性"。在扫描之间不清除跟踪的特性。这对于测量方差是有用的。
如果缺少作用域或信号/函数生成器,可以在ISR和用户进程中使用开关和软件时间戳来记录事件时间。但是您需要在用户任务中确保在使用临界区捕获时间和设置OUT
状态之间没有发生抢占,并且可能需要解除交换机。在这种情况下,如果最后一个事件时间戳少于20ms,则不设置信号量。
如果PREEMPT-RT正在完成它的工作,测试应该表现出比默认调度器更低的延迟、更高的精度和更少的变化,而不管运行的其他(低优先级)进程的负载如何。如果仍然不能满足您的要求,您可能需要一个真正的 RTOS。
如果这个特性不是您的应用程序所需要的,那么您可能不需要或从PREEMPT-RT中获益,而不适当的进程优先级分配或糟糕的任务设计甚至可能导致您的应用程序无法满足需求。要想让PREEMPT-RT发挥作用,你必须知道自己在做什么;它不会神奇地使你的系统"实时"。相反,它有利于实时系统的实现。