实时编程:Cyclictest与Ftrace的应用与分析
1. 实时编程基础
1.1 实时概念
实时系统需明确截止时间和可接受的错过率才有意义。实时可分为硬实时和软实时,硬实时要求任务必须在严格的时间限制内完成,软实时则允许一定的延迟。在选择操作系统时,需考虑这些因素来判断是否适合。
1.2 调度延迟
调度延迟是实时系统中的关键指标,它指的是任务从准备执行到实际开始执行的时间间隔。测量调度延迟常用的工具是cyclictest和Ftrace。
2. Cyclictest与Ftrace概述
2.1 Cyclictest
Cyclictest是测量调度延迟的标准工具。使用RT预emption生成的输出显示,RT内核表现出色,任务延迟主要集中在20微秒左右,且不超过35微秒。然而,Cyclictest无法帮助识别和解决内核延迟的具体问题。
2.2 Ftrace
Ftrace是内核函数跟踪器,用于追踪内核延迟。它能捕获运行过程中检测到的最坏情况延迟的跟踪信息,显示导致延迟的函数。Ftrace有多种跟踪器,不同跟踪器对应不同的内核配置参数,具体如下:
| 跟踪器名称 | 内核配置参数 | 功能描述 |
| — | — | — |
| irqsoff | CONFIG_IRQSOFF_TRACER | 跟踪禁用中断的代码,记录最坏情况 |
| preemptoff | CONFIG_PREEMPT_TRACER | 跟踪内核抢占被禁用的最长时间(仅适用于可抢占内核) |
| preemptirqsoff |