為什麼大部分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 設備(而不是處理其他負載)時,它仍然被視為“已加載”,因此會影響平均負載。

相關內容