为什么大多数IO操作都会占用大量CPU?


1

我有一个过程将二进制文件写入ext3文件系统。

我认为这在CPU上应该是一个非常简单的过程,但我看到45%的系统CPU利用率。它是一个40核的80线程服务器,并且有一个RAID 1 + 0 16磁盘阵列。

有100个线程同时执行IO。这是正常的,几乎有一半的系统CPU使用?有没有办法分析为什么它使用这么多的CPU?

用户CPU约为10-15%。

过程是这样的:我们从文件中读取一些数据,检查数据是否在db中,然后我们将数据写入文件。 Db在不同的机器上,日志记录也在不同的机器上。 我们检查文件是否已经存在,通常不存在,所以我们创建一个新文件并将一些数据写入其中。

这是我看到的

iostat -xkt 1

03/07/2014 01:06:28 PM
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          16.14    0.00   43.24    0.01    0.00   40.60

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await  svctm  %util
sdc               0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdb               0.00   166.00    0.00   69.00     0.00   940.00    27.25     0.02    0.23   0.17   1.20
sda               0.00   322.00    1.00  598.00   128.00  3680.00    12.71     0.07    0.12   0.09   5.50
dm-0              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-1              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-2              0.00     0.00    0.00    0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
dm-3              0.00     0.00    0.00  235.00     0.00   940.00     8.00     0.06    0.26   0.05   1.10
dm-4              0.00     0.00    1.00  920.00   128.00  3680.00     8.27     0.10    0.11   0.06   5.40

您必须对代码进行基准测试。
Ramhound

这不是我的代码,所以我不能做太多。
Roman Goyenko

如果您无法对代码进行基准测试,则无法确定CPU使用率的原因。
Ramhound

“二进制文件”来自哪里?硬件还是软件RAID?机器上还有其他活动吗?
vonbrand

我最后添加了更多信息。它是硬件RAID。我们做一些差异登录。文件系统和不同的计算机上也有数据库
Roman Goyenko

Answers:


0

Linux负载平均值,一些负载监视器(顶部)将显示io-wait为负载。

基本上,当CPU在IO设备上等待(而不是处理其他负载)时,它仍然被认为是“已加载”,因此有助于平均负载。


1
我使用iostat -xkt 1获取统计数据,我将结果添加到问题中。爱荷华州很少
Roman Goyenko
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.