Linux 进程调度延迟了很长时间



我已经在Linux上运行的多线程C ++应用程序上完成了strace

运行几个小时后,没有一个线程运行,大约 12 秒。

我已经看到在线程挂起之前调用的未完成的超时调用未完成的选择系统调用,在恢复后报告,操作完成需要 11.x 秒。(超时时间仅为900ms)

这清楚地表明,这个过程被饿了很长时间。

进程中的所有线程都是使用 linux 的默认调度策略 (SCHED_OTHER) 和默认优先级创建的。

还有另外 5 个类似的应用程序在同一盒子上运行,由于在套接字上接收大量数据,它们也像这个应用程序一样受到大量 I/O 限制。但大多数时候,这个应用程序被安排延迟。其他应用程序是使用与此相同的调度策略和优先级创建的,即默认值。为什么只有这个过程几乎一直被阻止?

可能是因为此过程的 I/O 密集度更高,因为数据速率可能更高,因此更繁忙?那么,linux动态优先级调整在这里发挥作用,是什么推动了这个过程?

Linux 中的优先级和进程调度仅与 CPU 时间有关。事实上,进程调度程序只关心等待在CPU上运行的进程。等待 I/O 的进程/线程不由进程调度程序处理,而由 I/O 调度程序处理。

最新更新