其他用户空间进程导致的 pselect 延迟

其他用户空间进程导致的 pselect 延迟

我有以下内容前提在 Linux 上:

  • 我正在使用一个进程在串行设备上使用 pselect 读取串行数据/dev/ttySX
  • 数据以 400 Hz 的稳定频率输入。
  • 为了优化该过程的延迟,我使用了一些措施:
    • 读取线程固定到一个核心(使用亲和性),并且不允许任何任务在该核心上运行。这是通过 cgroups/cpuset 完成的。
    • 读取线程的 RT prio 为 49(正好低于 IRQ 进程),采用 SCHED_FIFO 策略。
    • 对应的 IRQ/dev/ttyS4固定到同一核心。 IRQ 进程也在该内核上运行。这样做是为了进一步减少延迟。
  • 系统完全加载stress --cpu XX --io XX不会影响读数的延迟,并且读数在 400 Hz 时表现良好

问题我体验:

  • 还有另一个有问题的用户空间进程,它使用大量资源。当这个运行时,它可能会导致我的串行读取线程出现巨大的延迟峰值。即使来自硬件的串行数据到达时间为 2.5 毫秒,它也可能是 100 毫秒或更长。
  • 我对其他有问题的用户空间进程不太了解,除了它使用常规的“好”调度程序并且它产生了很多线程。

我的问题:

  • 我有什么想法/方法可以调试这个吗?也许使用 ftrace,但我不太确定从哪里开始。
  • 有什么想法可能会导致这种行为吗?

在这一点上,我很高兴得到任何提示/想法,谢谢!

相关内容