如何使用fio模拟线上环境

线上表现

这里我想通过fio来模拟线上的IO场景,那么如何模拟呢?

首先使用iostat看线上某个盘的 使用情况,这里我们需要关注的是 avgrq-sz, avgrq-qz.

#iostat -dx 1 1000 /dev/sdk
Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdk               0.22    16.32   71.08   49.98 23544.95 19763.38   715.45     0.65    5.34    7.64    2.08   5.21  63.04

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdk               0.00     0.00   81.00   78.00 26968.00 39936.00   841.56   143.32  683.93   38.35 1354.35   6.29 100.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdk               0.00     0.00  115.00   10.00 36940.00  5120.00   672.96   156.64  167.23   30.00 1745.40   7.99  99.90

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdk               0.00    44.00  107.00   28.00 37924.00 13496.00   761.78   149.48  584.97   33.19 2693.57   7.41 100.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdk               2.00     0.00  153.00    5.00 40896.00  2560.00   550.08   158.39  160.71   29.68 4170.20   6.33 100.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdk               0.00     0.00   89.00   88.00 28864.00 44424.00   828.11   143.19 2087.81   22.73 4176.35   5.65 100.00
  1. avgrq-sz: 和fio的-bs=参数关联, 单位是扇区数,一个扇区的大小是512KB,因此, 841.56 代表大小是: 841.56/2 = 420.78KB.
  2. avgra-gz: 和fio的iodepth关联,大概是150,因此,我们需要调整 fio的 iodepth的值

线下模拟

那么如何使用fio去模拟这个大小呢?

fio中最重要的一个参数是: -bs=xxxx, 我们经常看到这里是4k,16k,128k等等的测试数据,这里其实就是request 从elevator中出来,dispatch到driver的时候的大小。

线上机器 大小是 841.56 sector (420.78KB.)的时候, 意味着,这里, -bs=420k 比较合适。

需要注意的:

  1. 如果测试/dev/sdc, so, mount /dev/sdc /mnt/sdc , fio目标是/mnt/sdc/test, 而不是 /dev/sdc
  2. 线上差不多4个线程, numjobs = 4
  3. 线上读写比例3:1, So, -rwmixread=70
#fio -filename=/mnt/sdc/test -direct=1 -iodepth=4 -thread -rw=randrw -rwmixread=70 -ioengine=libaio -bs=420k -size=2G -numjobs=4 -name="EBS 4K randwrite test" -group_reporting -runtime=5000

avgqu-sz 和fio的iodepth 的关系

iodepth = 1, iostat avgqu-sz =

#fio -filename=/apxxxxxxx/disk3/test -direct=1 -iodepth=1 -thread -rw=randrw -rwmixread=70 -rwmixwrite=30 -ioengine=libaio -bs=4k -size=8G -numjobs=4 -name="EBS 4K randwrite test" -group_reporting -runtime=50000
Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdc               0.00     0.00  226.00  125.00   904.00   500.00     8.00    12.00   11.36   17.29    0.62   2.85 100.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdc               0.00     1.00   23.00    6.00    92.00    28.00     8.28    12.91   16.41   20.61    0.33  34.48 100.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdc               0.00     0.00  186.00   99.00   744.00   396.00     8.00    12.21   30.16   39.33   12.94   3.51 100.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdc               0.00     0.00  207.00  108.00   828.00   432.00     8.00    12.00   12.87   19.07    1.00   3.17 100.00

iodepth = 100, iostat avgqu-sz =

#fio -filename=/axxxxxx/disk3/test -direct=1 -iodepth=100 -thread -rw=randrw -rwmixread=70 -rwmixwrite=30 -ioengine=libaio -bs=4k -size=8G -numjobs=4 -name="EBS 4K randwrite test" -group_reporting -runtime=50000

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdc               0.00     0.00  180.00   68.00   720.00   272.00     8.00   111.30  230.22  231.29  227.40   2.85  70.80

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdc               0.00     0.00  241.00  103.00   964.00   412.00     8.00   159.43  392.41  395.76  384.58   2.91 100.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdc               0.00     0.00  254.00   89.00  1016.00   356.00     8.00   158.65  465.12  436.02  548.17   2.92 100.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdc               0.00     0.00  261.00  114.00  1044.00   456.00     8.00   156.64  395.21  440.19  292.23   2.67 100.00

开始模拟: cfq对SYNC, ASYNC的影响

Case1: fio 使用-direct=1

这里read write都是SYNC, 由于cfq 的影响,保SYNC, 因为线上的场景是 SYNC 的read, 和ASYNC的 writeback,所以这样模拟是不对的

command:

#fio -filename=/apsarapangu/disk3/test -direct=1 -iodepth=130 -thread -rw=randrw -rwmixread=70 -rwmixwrite=30 -ioengine=libaio -bs=420k -size=8G -numjobs=4 -name="EBS 4K randwrite test" -group_reporting -runtime=50000

performance:

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdc               0.00     0.00  106.00   56.00 43084.00 23868.00   826.57   297.76  609.85  539.71  742.61   6.17 100.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdc               0.00     0.00  100.00   57.00 40740.00 22752.00   808.82   307.53 1015.72  893.46 1230.21   6.37 100.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdc               0.00     0.00   95.00   50.00 37556.00 20160.00   796.08   278.35 1181.94 1041.71 1448.40   6.90 100.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdc               0.00     1.00   59.00   74.00 23940.00 28568.00   789.59   223.16 2312.37 1595.39 2884.01   7.52 100.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdc               0.00     0.00   79.00   32.00 32340.00 12956.00   816.14   299.97 1007.95  744.37 1658.66   9.01 100.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdc               0.00     0.00  124.00   41.00 50616.00 17656.00   827.54   303.84 1060.12  906.26 1525.46   6.06 100.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdc               0.00     0.00  106.00   47.00 43368.00 18532.00   809.15   290.17 1676.39 1099.78 2976.83   6.54 100.00

Analyze: Not I want!

Case2: fio 不使用-direct=1

这里read write都是SYNC, 由于cfq 的影响,保SYNC, 因为线上的场景是 SYNC 的read, 和ASYNC的 writeback,这里就和线上比较相似。

command:

#fio -filename=/apsarapangu/disk3/test -iodepth=130 -thread -rw=randrw -rwmixread=70 -rwmixwrite=30 -ioengine=libaio -bs=420k -size=8G -numjobs=4 -name="EBS 4K randwrite test" -group_reporting -runtime=50000

when cfq:

#echo cfq > /sys/block/sdc/queue/scheduler

Performance:

  • when read and writeback reproduce at the same time:
  • cfq have a good performance better than noop at this scene!
  • Cause cfq and split SYNC and ASYNC, SYNC have a better priority!
Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdc               0.00     0.00  353.00    8.00 41768.00  3504.00   250.81   148.39   91.06   40.39 2326.88   2.77 100.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdc               0.00     0.00  374.00    4.00 45348.00  1864.00   249.80   145.76   64.60   30.51 3251.75   2.65 100.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdc               0.00     2.00  201.00   32.00 19400.00 12756.00   276.02   175.74  581.51  100.38 3603.59   4.29 100.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdc               0.00     0.00  384.00    1.00 46524.00   420.00   243.86   171.37   48.15   34.22 5396.00   2.60 100.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdc               0.00     0.00  346.00    0.00 50388.00     0.00   291.26   167.22   29.55   29.55    0.00   2.89 100.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdc               0.00     0.00  417.00    0.00 46424.00     0.00   222.66   168.39   26.64   26.64    0.00   2.40 100.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdc               0.00     0.00  365.00    1.00 47996.00   420.00   264.57   166.98   50.49   30.11 7492.00   2.73 100.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdc               0.00     9.00  271.00  101.00 30148.00 41796.00   386.80   161.59 2375.33   30.86 8665.95   2.69 100.00

when noop:

#echo noop > /sys/block/sdc/queue/scheduler

Performance:

  • When read and writeback reproduce at the same time
Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdc               0.00     3.00   69.00  248.00  1864.00 100800.00   647.72   178.71  580.56  537.20  592.62   3.15 100.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdc               0.00     2.00   63.00  246.00  1568.00 100412.00   660.06   173.11  583.21  523.25  598.57   3.24 100.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdc               0.00     0.00   33.00   90.00   912.00 36544.00   609.04   181.04 1077.03 1079.82 1076.01   8.13 100.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdc               0.00     2.00   59.00  242.00  1436.00 100800.00   679.31   183.44  732.01  565.46  772.62   3.32 100.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdc               0.00     1.00   66.00  250.00  2364.00 102060.00   660.91   176.00  567.93  513.26  582.36   3.16 100.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdc               0.00     2.00   71.00  251.00  1700.00 104160.00   657.52   177.67  569.05  513.06  584.88   3.11 100.00

Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
sdc               0.00     6.00   44.00  233.00  1764.00 96180.00   707.18   161.17  604.32  542.25  616.04   3.61 100.00

原文地址:https://www.cnblogs.com/muahao/p/9390204.html