分离 CPU 和 IO 时间

Posted

技术标签:

【中文标题】分离 CPU 和 IO 时间【英文标题】:Separate CPU and IO time 【发布时间】:2011-06-12 18:46:51 【问题描述】:

我有一个包含大量 IO 的应用程序。此应用程序是多线程的,并且有一个专用于 IO 请求的线程,因此有时 IO 和 CPU 会重叠。

它是用 C 语言为 Linux 编写的。

我想知道 CPU 做了多少有用的工作。例如,如果我们制作了一个完美的 RAID 系统,我们可能能够显着降低(如果不能消除)IO 因素。之后,我们受到主存和 CPU 吞吐量的限制。我怎么知道这个?我该如何衡量?

谢谢 鲍勃

【问题讨论】:

【参考方案1】:

time(1) 实用程序或getrusage(2) 系统调用可以为您提供一些计时信息。任何时候你的进程没有花费在执行代码上的时间就是它花费在 I/O 上的阻塞时间。

【讨论】:

嗯,几乎所有时间,但在其他未使用的机器上,挂钟时间 - CPU 时间是一个很好的指示。 +1。 我查看了 time 和 getrusage 的手册页。 time 命令有一个称为 IO 的小节,但(具有讽刺意味的是)它们实际上与计时无关。 getrusage 可以根据用户和内核时间分开,但内核时间不一定转换为 IO 时间。我知道如何获取挂墙时间,但我如何按照 larsmans 的建议测量“CPU 时间”。非常感谢。 @Bob Dole,CPU时间是用户时间加上time报告的内核时间。实际时间是挂钟时间。 time 实用程序不测量 I/O 时间。正如@larsmans 提到的,它只是测量程序已完成的有用执行量。挂钟时间和执行时间之间的任何差异都是您的进程被阻塞所花费的时间 - 最常见的是 I/O,假设您的机器没有在做一堆其他事情时加载。 太棒了!非常感谢你,卡尔。出于好奇,您知道多线程应用程序会发生什么吗?例如,如果进程运行了 10 秒,并且有两个 100% 利用率的线程正在运行。这是否意味着实际时间是 20 秒还是 10 秒?再次感谢您。 @Bob Dole,大多数时候实时就是真正的实时。系统时间和用户时间是 CPU 时间,因此它们可能会与您拥有的处理器数量的实时乘积一样高。

以上是关于分离 CPU 和 IO 时间的主要内容,如果未能解决你的问题,请参考以下文章

数据库读写分离的初步理解

数据库分库分表读写分离的实现原理及使用场景

ios framework 分离与合并多种CPU架构,分离与合并模拟器与真机

ExpressJS - 带有路由分离的 Socket.IO

spring jdbc分离数据库代码和java代码

运维监控理论