대부분 IO 작업에서 CPU 사용량이 많은 이유는 무엇입니까?

대부분 IO 작업에서 CPU 사용량이 많은 이유는 무엇입니까?

ext3 파일 시스템에 바이너리 파일을 쓰는 프로세스가 있습니다.

나는 이것이 CPU에서 매우 쉬운 프로세스라고 생각하지만 시스템 CPU 사용률은 45%입니다. 40코어 80스레드 서버이고 RAID 1+0 16개 디스크 어레이가 있습니다.

동시에 IO를 수행하는 스레드는 100개입니다. 시스템 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

답변1

Linux의 로드 평균화 및 일부 로드 모니터(위)에는 io-wait가 로드로 표시됩니다.

기본적으로 CPU가 IO 장치를 기다리고 있을 때(다른 로드를 처리하지 않고) 여전히 "로드된" 것으로 간주되므로 로드 평균에 기여합니다.

관련 정보