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

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

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

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

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

用户CPU大概在10-15%左右。

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

这是我所看到的

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

答案1

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

基本上,当 CPU 正在等待 IO 设备(而不是处理其他负载)时,它仍被视为“已加载”,因此会影响平均负载。

相关内容