在“top”输出中,一个被IO阻塞的进程会显示100%的CPU利用率吗?

5
我有一个可以在不同进程上并行化的分析。预计这些过程将同时涉及IO和CPU(如果有人感兴趣,这是非常高吞吐量的短读DNA比对)。
运行此分析的系统为48核Linux服务器。
问题是如何确定最佳进程数以使总吞吐量最大化。在某些时候,进程可能会变得IO绑定,因此添加更多进程将没有益处,甚至可能会有害。
我能否从标准系统监视工具中知道该点已经达到? top命令(或其他工具)的输出是否可以使我区分IO绑定和CPU绑定进程?我怀疑在IO阻塞的进程上仍然会显示100%的CPU利用率。

1
通常,未阻塞线程的数量应等于处理器的数量。您是否可以使用非阻塞IO?如果您可以将其融入您的架构中,这可能会简化事情。 - Jay Conrod
3个回答

6
当进程因IO被阻塞时,它不会运行,所以没有对其计时。如果还有其他进程可以运行,则该进程将会运行;如果没有,则时间被记录为“IO等待”,这被视为全局统计数据。
监控IO等待是一件很有用的事情。它在top的标题中显示为% iw之类的内容。您可以使用iostat和vmstat等工具更详细地监控它。有关此问题,您可以在Serverfault上提问。

1

您可以使用像 iostat 和 vmstat 这样的工具来显示进程在 I/O 上被阻塞的时间。通常情况下,增加比所需更多的进程不会造成任何伤害,但是收益会减少。您应该将吞吐量与进程作为衡量整体效率的指标进行测量。


1

即使是单个受IO限制的进程也很少显示高CPU利用率,因为操作系统已经安排了它的IO,并且通常只是在等待其完成。因此,top不能准确地区分受IO限制的进程和仅周期性使用CPU的非受IO限制的进程。实际上,一个所有进程都受IO限制、难以完成任何任务的系统可能表现出非常低的CPU利用率。

只使用top作为第一步,您确实可以不断添加线程/进程,直到CPU利用率趋于稳定,以确定给定机器的大致配置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接