【发布时间】:2015-09-05 12:08:24
【问题描述】:
我有一个运行在不同内核上的低延迟服务器/客户端音频应用程序。 (通过cpuset) 没有检测到 xrun,我怀疑调度程序会中断我的关键例程。由于在用户空间中无法禁用中断,我的想法是创建一个内核模块并为 local_irq_disable()/local_irq_enable() 编写包装函数。安全不是问题。具有完全可抢占内核的 rt Linux 正在使用中。
- 我认为 nanosleep 功能在没有中断的情况下也无法工作?
- 禁用调度程序但保留的更优雅的方法是什么? 计时器运行?
- 如何从用户空间调用这些包装函数?
编辑:SMP 亲和力是这里的关键字:SMP IRQ Affinity
【问题讨论】:
-
一个音频应用程序需要如此关键的例程?为什么?怎么样?
-
用户空间代码启用/禁用内核中断。听起来像是灾难的好方法。
-
这是一个关于 Linux 系统延迟可以达到多低的测试案例。由于播放中仍有故障但没有 xruns,因此程序中必须有中断。为什么禁用一个核心的中断会导致灾难?从我在内核部分读到的有关 local_irq_save/..disable 的内容,它们由其他内核处理。
-
IRQ 通常只是唤醒具有高优先级的线程,您是否尝试为关键线程分配高 RT 优先级。
-
是的,它们有 rt 优先级。如果没有 USB 或 eth 中断,它仍然可以更快。
标签: c linux linux-kernel kernel kernel-module