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

我有一个可以在不同数量的进程中并行的分析。 预计事情将会是IO和CPU密集型(如果有人对此感兴趣,那么可以使用非常高的吞吐量进行DNA读取)。

运行这个系统的系统是一个48核心的Linux服务器。

问题是如何确定最佳处理数量,以使总吞吐量达到最大。 在某些时候,这些过程大概会变成IO界限,这样添加更多的过程将不会有好处,并且可能是有害的。

我能从标准系统监测工具中得知何时达到了这一点? 顶部(或可能是一个不同的工具)的输出将使我能够区分一个IO绑定和CPU绑定进程? 我怀疑在IO上阻塞的进程可能仍然显示100%的CPU利用率。

即使是一个单独的IO绑定进程也很少会显示高CPU使用率,因为操作系统已经安排了IO,通常只是等待完成。 因此,top不能准确地区分仅限定期使用CPU的IO绑定进程和非IO绑定进程。 事实上,一个系统严重超负荷的所有IO绑定进程,几乎不能完成任何事情可以表现出非常低的CPU利用率。

只使用top,作为第一遍,您确实可以保持添加线程/进程,直到CPU使用率关闭,以确定给定机器的近似配置。

当一个进程在IO上被阻塞时,它没有运行,所以没有时间对它进行计算。 如果还有另外一个可以运行的进程,那么这个进程就会运行。 如果没有的话,这个时间就被算作“IO等待”,这被统计为一个全局统计量。

IO等待将是一个有用的事情来监测。 它显示在顶部的头像%iw一样。 您可以使用iostat和vmstat等工具更详细地监控它。 serverfault可能是一个更好的地方来问这个问题。

您可以使用诸如iostat和vmstat之类的工具来显示在I / O上花费了多少时间。 添加更多的流程通常不会造成任何负面影响,但是效益会降低。 您应该测量吞吐量与流程作为衡量整体效率。