小编raa*_*hlb的帖子

Kworker 线程被 SCHED_RR 用户空间线程阻塞

我们有一个使用内核 3.14.17、PREEMPT RT 的 Linux 系统。它是一个单核系统。

对于延迟问题,我们的应用程序将其一些线程的调度类型设置为 SCHED_RR。但是,这会导致内核中的 kworkers 被阻止,因为它们仅在 SCHED_OTHER 模式下运行。这可能会导致某种优先级反转,因为低优先级 SCHED_RR 线程可能会阻止较高优先级 SHED_RR 从驱动程序接收数据。

被阻止的是 TTY 驱动程序。它在函数 tty_flip_buffer_push 中使用工作队列。可能还有更多电话,但这是我们已经确定的电话。

有什么方法可以轻松解决这个问题 - RT 应用程序依赖于 kworker?我们希望我们不必自己破解驱动程序/内核。RT 内核中是否有针对此类内容的内核配置选项?我们可以吗,

  • 为 kworkers 设置 SCHED_RR 优先级?
  • 禁用特定驱动程序的工作队列?

如果我们必须破解驱动程序,我们可能会为其提供自己的工作队列,并带有 SCHED_RR kworker。

当然,任何其他解决方案也是令人感兴趣的。如果有一些新功能,我们可以升级到更高的内核版本。

c++ linux multithreading real-time linux-kernel

6
推荐指数
1
解决办法
2858
查看次数

标签 统计

c++ ×1

linux ×1

linux-kernel ×1

multithreading ×1

real-time ×1