fio 출력에는 두 개의 (다른) BW 번호가 있습니다!

fio 출력에는 두 개의 (다른) BW 번호가 있습니다!

fio 출력은 두 위치에 두 개의 대역폭 숫자(읽기 및 쓰기용)를 표시합니다. 이 두 숫자는 무엇을 나타냅니까? 처리량 테스트를 위해 어느 것을 고려해야 하며, 다른 하나는 어떤 목적으로 고려해야 합니까?

  1 {JOB}:{1}_{4k}_{5}: (g=0): rw=randrw, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodep    th=32
  2 ...
  3 fio-3.1
  4 Starting 16 threads
  5
  6 {JOB}:{1}_{4k}_{5}: (groupid=0, jobs=16): err= 0: pid=143919: Thu Oct 10 18:35:14 2019
  7    read: IOPS=50.1k, BW=196MiB/s (205MB/s)(34.4GiB/180002msec)
  8     slat (nsec): min=1210, max=191233, avg=3335.76, stdev=1810.98
  9     clat (usec): min=166, max=16660, avg=695.21, stdev=319.44
 10      lat (usec): min=169, max=16662, avg=698.62, stdev=319.39
 11     clat percentiles (usec):
 12      |  1.00th=[  338],  5.00th=[  396], 10.00th=[  433], 20.00th=[  482],
 13      | 30.00th=[  515], 40.00th=[  537], 50.00th=[  570], 60.00th=[  685],
 14      | 70.00th=[  832], 80.00th=[  914], 90.00th=[ 1012], 95.00th=[ 1188],
 15      | 99.00th=[ 1532], 99.50th=[ 2057], 99.90th=[ 3490], 99.95th=[ 3884],
 16      | 99.99th=[ 5997]
 17    bw (  KiB/s): min= 5883, max=16873, per=6.26%, avg=12545.77, stdev=3041.02, samples=5760
 18    iops        : min= 1470, max= 4218, avg=3136.15, stdev=760.26, samples=5760
 19   write: IOPS=952k, BW=3720MiB/s (3901MB/s)(654GiB/180002msec)
 20     slat (nsec): min=1192, max=927014, avg=3640.66, stdev=1926.60
 21     clat (usec): min=98, max=10023, avg=496.01, stdev=170.79
 22      lat (usec): min=100, max=10025, avg=499.72, stdev=170.69
 23     clat percentiles (usec):
 24      |  1.00th=[  273],  5.00th=[  326], 10.00th=[  355], 20.00th=[  388],
 25      | 30.00th=[  420], 40.00th=[  445], 50.00th=[  457], 60.00th=[  474],
 26      | 70.00th=[  486], 80.00th=[  510], 90.00th=[  865], 95.00th=[  930],
 27      | 99.00th=[ 1004], 99.50th=[ 1029], 99.90th=[ 1188], 99.95th=[ 1287],
 28      | 99.99th=[ 1467]
 29    bw (  KiB/s): min=121170, max=307136, per=6.26%, avg=238474.82, stdev=57541.32, samples=5760
 30    iops        : min=30292, max=76784, avg=59618.41, stdev=14385.36, samples=5760
 31   lat (usec)   : 100=0.01%, 250=0.25%, 500=73.65%, 750=12.84%, 1000=11.71%
 32   lat (msec)   : 2=1.52%, 4=0.02%, 10=0.01%, 20=0.01%
 33   cpu          : usr=6.39%, sys=33.77%, ctx=40608436, majf=0, minf=11562
 34   IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=100.0%, >=64=0.0%
 35      submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
 36      complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.1%, 64=0.0%, >=64=0.0%
 37      issued rwt: total=9019565,171442027,0, short=0,0,0, dropped=0,0,0
 38      latency   : target=0, window=0, percentile=100.00%, depth=32
 39
 40 Run status group 0 (all jobs):
 41    READ: bw=196MiB/s (205MB/s), 196MiB/s-196MiB/s (205MB/s-205MB/s), io=34.4GiB (36.9GB), run=180002-180002msec
 42   WRITE: bw=3720MiB/s (3901MB/s), 3720MiB/s-3720MiB/s (3901MB/s-3901MB/s), io=654GiB (702GB), run=180002-180002mse    c
 43
 44 Disk stats (read/write):
 45   nvme1n1: ios=9013394/171326957, merge=0/0, ticks=6201303/82738341, in_queue=103287914, util=100.00%

예를 들어 읽기의 경우 관련 줄은 다음과 같습니다.

7:   read: IOPS=50.1k, BW=196MiB/s (205MB/s)(34.4GiB/180002msec)
17:   bw (  KiB/s): min= 5883, max=16873, per=6.26%, avg=12545.77, stdev=3041.02, samples=5760
41:   READ: bw=196MiB/s (205MB/s), 196MiB/s-196MiB/s (205MB/s-205MB/s), io=34.4GiB (36.9GB), run=180002-180002msec

7행의 "BW"는 무엇을 의미하고, 17행의 "bw"는 무엇을 의미합니까? 그것들은 어떻게 다른가요? 처리량 테스트를 위해 어떤 것을 고려해야 합니까?

답변1

이것은fio 문서의 "출력 설명" 섹션:

읽기/쓰기/가지치기

[...] BW는 평균 대역폭 속도로, 2의 거듭제곱(10의 거듭제곱)으로 표시됩니다.

[...]

무게

샘플 기반 대역폭 통계

하나(BW)는 total I/O / time작업이 실행되는 동안 일정 기간 동안 수집된 샘플을 평균하여 계산된 다른 하나(bw)입니다( samples=5760줄 끝 참고). 이전 버전의 fio의 버그로 인해 여러 작업을 동시에 실행하는 경우 샘플 데이터가 매우 이상하게 보일 수 있습니다. 최신 fio를 사용하면 더 합리적인 결과를 얻을 수 있습니다.https://github.com/axboe/fio/releases최신 버전을 얻으려면).

처리량 테스트를 위해 어느 것을 고려해야 하며, 다른 하나는 어떤 목적으로 고려해야 합니까?

BW는 일반적으로 보고 싶은 것이지만 bw의 샘플링 통계(예: max, min, stdev)는 무언가 심각하게 잘못되었다는 강력한 경고 신호가 될 수 있습니다(그러나 위의 이전 fio 버전에 대한 경고 참조).

답변2

Sitsofe Wheeler가 좀 더 포괄적인 답변을 했다고 생각합니다.https://www.spinics.net/lists/fio/msg05517.html그들은 썼다:

BW는 초당 평균입니다. bw는 평균 중의 평균이다...

BW는 수행한 모든 I/O(1189MiB)를 합산하고 초 단위 시간으로 나누어 계산됩니다.(1189*1024.0)/(13001/1000.0)/1024 ~ 91.5

bw는 bw 로그의 모든 "값"을 더하고 해당 값의 수로 나누어 계산됩니다. 각 값 자체는 일종의 평균이지만, 어느 기간이 지났는지 알 수 없습니다. 이것은 큰 변화를 가져올 수 있습니다.

2초 동안 실행되는 작업이 있다고 상상해 보세요. 처음 1초 동안 10MB의 데이터가 2개의 I/O를 거칩니다. 2초 안에 2개의 I/O를 통해 100MByte가 완성된다. BW는 120 / 2 = 60MBytes/s. 그런데 bw값이 이렇다고 생각해보세요

0. 10240, 0, 0
0, 10240, 0, 1024
1, 102400, 0, 2048
1, 102400, 0, 3072

(10240 * 2 + 102400 * 2)/4.0/1024.0 = 55.0

각 bw 항목의 평균 기간은 반드시 알 수 없으며 항목이 1초가 아닌 기간에 걸쳐 평균화되는 경우 "평균 평균"은 초당이 아닙니다. 이 (KiB/s)가 실제로 오해의 소지가 있는지 궁금합니다.

다음은 제가 직접 테스트한 좀 더 심각한 예입니다.

512M: (groupid=0, jobs=1): err= 0: pid=15001: Sun Sep  6 22:45:26 2020
  write: IOPS=0, BW=153MiB/s (161MB/s)(45.0GiB/301044msec); 0 zone resets
    slat (msec): min=103, max=4290, avg=2819.80, stdev=988.46
    clat (msec): min=11, max=13196, avg=9817.42, stdev=1824.07
     lat (msec): min=2825, max=17272, avg=13162.17, stdev=1957.18
    clat percentiles (msec):
     |  1.00th=[   12],  5.00th=[ 8020], 10.00th=[ 8087], 20.00th=[ 8658],
     | 30.00th=[ 9060], 40.00th=[ 9597], 50.00th=[10134], 60.00th=[10268],
     | 70.00th=[10671], 80.00th=[10939], 90.00th=[11610], 95.00th=[12147],
     | 99.00th=[13221], 99.50th=[13221], 99.90th=[13221], 99.95th=[13221],
     | 99.99th=[13221]
   bw (  KiB/s): min=1046483, max=1048576, per=100.00%, avg=1048454.31, stdev=492.65, samples=86
   iops        : min=    1, max=    2, avg= 1.94, stdev= 0.24, samples=86
  lat (msec)   : 20=1.11%
  cpu          : usr=3.17%, sys=2.22%, ctx=185445, majf=0, minf=21
  IO depths    : 1=1.1%, 2=2.2%, 4=96.7%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%
     submit    : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     complete  : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
     issued rwts: total=0,90,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=4

Run status group 0 (all jobs):
  WRITE: bw=153MiB/s (161MB/s), 153MiB/s-153MiB/s (161MB/s-161MB/s), io=45.0GiB (48.3GB), run=301044-301044msec

전체 실행의 평균 속도는 153MiB/s로 표시되지만 대역폭 샘플링 속도는 1024MiB/s(iiuc)입니다.

관련 정보