Storage-layer I/O performance tests

Introduction

Use the commands in this section to determine if the storage-layer performance meets the NSP cluster deployment requirements. Both tests (storage latency and storage throughput) must be executed and meet or exceed the provided requirements.

Storage latency

In this example, the /test directory is on the same disk where etcd runs.

Enter the following as the root user to run the test:

fio --rw=write --ioengine=sync --fdatasync=1 --directory=/var/lib/test --size=22m --bs=2300 --name=mytest ↵

The command produces output like the following:

Starting 1 process

mytest: Laying out IO file (1 file / 22MiB)

Jobs: 1 (f=1)

mytest: (groupid=0, jobs=1): err= 0: pid=40944: Mon Jun 15 10:23:23 2020

  write: IOPS=7574, BW=16.6MiB/s (17.4MB/s)(21.0MiB/1324msec)

    clat (usec): min=4, max=261, avg= 9.50, stdev= 4.11

     lat (usec): min=4, max=262, avg= 9.67, stdev= 4.12

    clat percentiles (nsec):

     |  1.00th=[ 5536],  5.00th=[ 5728], 10.00th=[ 5920], 20.00th=[ 6176],

     | 30.00th=[ 7584], 40.00th=[ 8896], 50.00th=[ 9408], 60.00th=[ 9792],

     | 70.00th=[10432], 80.00th=[11584], 90.00th=[12864], 95.00th=[14528],

     | 99.00th=[20352], 99.50th=[23168], 99.90th=[28800], 99.95th=[42752],

     | 99.99th=[60672]

   bw (  KiB/s): min=16868, max=17258, per=100.00%, avg=17063.00, stdev=275.77, samples=2

   iops        : min= 7510, max= 7684, avg=7597.00, stdev=123.04, samples=2

  lat (usec)   : 10=64.21%, 20=34.68%, 50=1.08%, 100=0.02%, 500=0.01%

In the second block of output, which is shown below, the 99.00th percentile must be less than 10 ms. In this test output, the 99.00th percentile is less than 1 ms.

fsync/fdatasync/sync_file_range:

    sync (usec): min=39, max=1174, avg=120.71, stdev=63.89

    sync percentiles (usec):

     |  1.00th=[   42],  5.00th=[   45], 10.00th=[   46], 20.00th=[   48],

     | 30.00th=[   52], 40.00th=[   71], 50.00th=[  153], 60.00th=[  159],

     | 70.00th=[  167], 80.00th=[  178], 90.00th=[  192], 95.00th=[  206],

     | 99.00th=[  229], 99.50th=[  239], 99.90th=[  355], 99.95th=[  416],

     | 99.99th=[  445]

  cpu          : usr=2.95%, sys=29.93%, ctx=15663, majf=0, minf=35

  IO depths    : 1=200.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 rwts: total=0,10029,0,0 short=10029,0,0,0 dropped=0,0,0,0

     latency   : target=0, window=0, percentile=100.00%, depth=1

Storage throughput

To run this test, first change to the directory where the test is to be performed. The test will create a local file. The output from the command contains read and write IOPS values which must be evaluated against the minimum requirements provided in Table 2-6, Minimum NSP cluster IOPS requirements

Enter the following as the root user to run the test:

fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=test --filename=random_read_write.fio --bs=4k --iodepth=64 --size=4G --readwrite=randrw --rwmixread=50 ↵

The command produces output like the following:

test: (g=0): rw=randrw, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=64

fio-3.7

Starting 1 process

test: Laying out IO file (1 file / 4096MiB)

Jobs: 1 (f=1): [m(1)][100.0%][r=22.1MiB/s,w=22.2MiB/s][r=5645,w=5674 IOPS][eta 00m:00s]

test: (groupid=0, jobs=1): err= 0: pid=32439: Mon Sep 21 10:25:11 2020

read: IOPS=6301, BW=24.6MiB/s (25.8MB/s)(2049MiB/83252msec)

   bw (  KiB/s): min=13824, max=39088, per=99.57%, avg=25098.60, stdev=5316.27, samples=166

   iops        : min= 3456, max= 9772, avg=6274.49, stdev=1329.11, samples=166

write: IOPS=6293, BW=24.6MiB/s (25.8MB/s)(2047MiB/83252msec)

   bw (  KiB/s): min=13464, max=40024, per=99.56%, avg=25062.73, stdev=5334.65, samples=166

   iops        : min= 3366, max=10006, avg=6265.57, stdev=1333.67, samples=166

  cpu          : usr=5.13%, sys=18.63%, ctx=202387, majf=0, minf=26

  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=0.1%, >=64=100.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.1%, >=64=0.0%

     issued rwts: total=524625,523951,0,0 short=0,0,0,0 dropped=0,0,0,0

     latency   : target=0, window=0, percentile=100.00%, depth=64

Run status group 0 (all jobs):

   READ: bw=24.6MiB/s (25.8MB/s), 24.6MiB/s-24.6MiB/s (25.8MB/s-25.8MB/s), io=2049MiB (2149MB), run=83252-83252msec

  WRITE: bw=24.6MiB/s (25.8MB/s), 24.6MiB/s-24.6MiB/s (25.8MB/s-25.8MB/s), io=2047MiB (2146MB), run=83252-83252msec

Disk stats (read/write):

  vda: ios=523989/526042, merge=0/2218, ticks=3346204/1622070, in_queue=4658999, util=96.06%