我有一个低延迟的服务器/客户端音频应用程序在单独的内核上运行。(通过 CPUSET)没有检测到xruns,我怀疑调度程序中断了我的关键例程。由于在用户空间中无法禁用中断,我的想法是创建一个内核模块并为local_irq_disable()/local_irq_enable()编写包装器函数。安全性不是问题。正在使用具有完全抢占式内核的 rt Linux。
- 我认为纳米睡眠功能在没有中断的情况下也无法工作?
- 禁用调度程序但保留的更优雅的方法是什么计时器正在运行?
- 如何从用户空间调用这些包装器函数?
编辑:SMP亲和力是这里的关键词:SMP IRQ亲和力
我建议首先尝试使用 lttng 和 tracecompass 来跟踪您的内核调度,以了解您的系统上真正发生了什么,以及哪些其他进程、资源锁定或中断正在迫使您的进程退出 CPU。
您真的需要此过程在没有 CPU 时间间隔的情况下运行吗?如果没有:您需要以毫秒或毫秒为单位的响应时间吗?