【发布时间】:2014-08-12 12:11:28
【问题描述】:
我在嵌入式 Linux 环境中工作,调试与 Zigbee 设备配对/绑定相关的高度时间敏感问题。
我们的架构是通过 SPI 接口从 Zigbee 前端模块读取数据,然后从内核空间传递到用户空间进行处理。处理后的数据和响应随后被传回内核空间,并再次通过 SPI 接口输出。
Zigbee 802.15.4 时序要求规定我们需要在 19.5 毫秒内做出响应,而且我们经常会在此窗口之外做出响应,这会导致网络出现故障和丢包。
Linux 内核未在启用抢占的情况下运行,也可能无法启用抢占。
我的怀疑是,由于内核不可抢占,还有另一个任务/进程正在使用 ioctl() 接口,这会使 Zigbee 应用程序延迟足够长的时间,以至于超过 19.5 毫秒的窗口。
我尝试了以下工具
- oprofile - 这里没有太大帮助,因为它会分析整个系统,而应用程序在此期间实际上并不是很忙,因为它移动了如此少量的数据
- strace - 开销太大,虽然我没有太多使用它的经验,所以也许可以改进输出。开销对性能的影响如此之大,以至于应用程序根本无法运行
还有其他轻量级的方法来分析这样的系统吗?
当一个 ioctl 调用挂在另一个任务/线程上时,无论如何要捕获吗? (假设这是问题的根本原因)
【问题讨论】:
标签: linux linux-kernel profiling embedded-linux zigbee