1. 当CPU负载异常飙升时,我们该查什么?
最近在做一个AutoSar项目时,遇到了一个让人头疼的问题:系统运行一段时间后,CPU负载会莫名其妙地飙升到80%以上。刚开始我以为是业务逻辑太复杂导致的,但仔细排查后发现,问题竟然出在两个最基础的配置上——OS Timer的选择和CS接口的映射方式。
这两个配置项在AutoSar项目中太常见了,常见到我们往往按照默认值或者"惯例"来配置,很少去深究它们对系统性能的影响。但实测下来,不同的配置组合会导致CPU负载有几倍甚至几十倍的差异。比如在某个测试案例中,仅仅是把PIT换成HRT,CPU负载就从5%跳到了12%;而如果同时使用了跨核CS接口映射,负载直接突破50%。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. OS Timer的选型陷阱:PIT vs HRT
2.1 两种定时器的本质区别
在AutoSar中,OS Timer主要有两种:周期性中断定时器(PIT)和高分辨率定时器(HRT)。它们看起来都是用来提供时间基准的,但底层机制完全不同。
PIT就像个老式的机械闹钟,不管你有没有任务要处理,到点就响。它的中断周期是固定的,比如每1ms触发一次。这种设计简单可靠,但有个明显缺点:如果任务执行时间不固定,可能会造成中断浪费。
HRT则像个智能闹钟,它只在需要的时候触发。比如一个任务需要10ms后唤醒,HRT就会精确地在10ms后产生中断。这种按需触发的机制看起来很高效,但实测下来它的开销反而比PIT大得多。
2.2 实测数据对比
我们在TI TDA4平台做了组对比测试,配置如下:
| 配置项 | PIT方案 | HRT方案 |
|---|---|---|
| 定时器周期 | 1ms固定 | 动态调整(0.1-5ms) |
| 任务数量 | 10个周期任务 | 10个周期任务 |
| 测试时长 | 60秒 | 60秒 |
测试结果让人意外:
- PIT方案的CPU负载稳定在5%左右
- HRT方案虽然中断次数减少了30%,但CPU负载却达到了12%
