버퍼를 지울 때 소프트웨어 RAID 속도가 느려집니다.

버퍼를 지울 때 소프트웨어 RAID 속도가 느려집니다.

mdraidCentOS 7.6에서 실험 중입니다 . fio4 스트라이프 배열에 순차적 쓰기를 수행하고 있는데 RAM 버퍼에 쓸 때 속도가 훌륭하게 시작되었다가 fsync 중에 느려집니다. end_fsync데이터가 디스크에 기록되었는지 확인하는 데 사용됩니다 . 이번 테스트에서는 iostat다른 창에서 4개의 디스크를 모니터링했습니다.

초기에는 iostat각 디스크당 165MBps를 보여줬고, fio3000MBps가 넘는 쓰기 속도를 보여줬다. 따라서 우리는 RAM에 쓰고 동시에 커널은 디스크에 쓰고 있습니다. fio가 쓰기를 마치면 버퍼를 디스크에 플러시합니다. 이 기간 동안 쓰기 속도는 0이었고 iostat약 120MBps로 떨어졌습니다. 나는 fsync가 초기 쓰기만큼 빨라야 한다고 생각했기 때문에 왜 fsync가 더 빠르지 않은지 알아내려고 노력하고 있습니다.

$ fio --name=seqwrite --rw=write --bs=1M --size=3G --directory=/mnt/raid --end_fsync=1 --numjobs=4 --group_reporting
seqwrite: (g=0): rw=write, bs=(R) 1024KiB-1024KiB, (W) 1024KiB-1024KiB, (T) 1024KiB-1024KiB, ioengine=psync, iodepth=1
...
fio-3.1
Starting 4 processes
Jobs: 2 (f=2): [_(1),F(1),_(1),F(1)][-.-%][r=0KiB/s,w=0KiB/s][r=0,w=0 IOPS][eta 00m:00s]
seqwrite: (groupid=0, jobs=4): err= 0: pid=9959: Thu Sep 12 16:47:50 2019
  write: IOPS=534, BW=534MiB/s (560MB/s)(12.0GiB/23009msec)
    clat (usec): min=315, max=21855, avg=1356.25, stdev=3850.63
     lat (usec): min=324, max=21881, avg=1373.31, stdev=3852.25
    clat percentiles (usec):
     |  1.00th=[  322],  5.00th=[  326], 10.00th=[  330], 20.00th=[  343],
     | 30.00th=[  347], 40.00th=[  359], 50.00th=[  367], 60.00th=[  371],
     | 70.00th=[  383], 80.00th=[  445], 90.00th=[  586], 95.00th=[14746],
     | 99.00th=[19268], 99.50th=[19530], 99.90th=[21627], 99.95th=[21890],
     | 99.99th=[21890]
   bw (  KiB/s): min=14364, max=2881154, per=100.00%, avg=704062.00, stdev=949759.73, samples=35
   iops        : min=   14, max= 2813, avg=687.29, stdev=927.47, samples=35
  lat (usec)   : 500=85.28%, 750=8.30%, 1000=0.20%
  lat (msec)   : 2=0.02%, 4=0.01%, 10=0.15%, 20=5.57%, 50=0.46%
  cpu          : usr=0.30%, sys=17.58%, ctx=100619, majf=0, minf=106
  IO depths    : 1=100.0%, 2=0.0%, 4=0.0%, 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 rwt: total=0,12288,0, short=0,0,0, dropped=0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=1

Run status group 0 (all jobs):
  WRITE: bw=534MiB/s (560MB/s), 534MiB/s-534MiB/s (560MB/s-560MB/s), io=12.0GiB (12.9GB), run=23009-23009msec

Disk stats (read/write):
    md0: ios=0/3145734, merge=0/0, ticks=0/0, in_queue=0, util=0.00%, aggrios=0/6655, aggrmerge=0/778369, aggrticks=0/2292548, aggrin_queue=2292870, aggrutil=95.06%
  sda: ios=0/6502, merge=0/778634, ticks=0/3019328, in_queue=3019466, util=95.06%
  sdb: ios=0/6465, merge=0/778498, ticks=0/2554715, in_queue=2555016, util=92.24%
  sdc: ios=0/6780, merge=0/778266, ticks=0/1745808, in_queue=1746414, util=92.00%
  sdd: ios=0/6875, merge=0/778080, ticks=0/1850343, in_queue=1850585, util=91.34%

어레이는 4K 블록으로 스트라이프된 4개의 회전 디스크이며 XFS 파일 시스템을 갖습니다. RAID가 없는 단일 XFS 디스크에서 동일한 테스트를 실행하면 이 문제가 발생하지 않습니다. 쓰기 속도는 항상 160MBps로 안정적입니다.

관련 정보