Тестирование производительности дисков

При заказе ресурса (серверадиска, кластера Kubernetes и т.д.) выбирается тип диска:

В характеристиках дисков указаны максимальные значения операций чтения и записи (IOPS) для профиля Read/Write 70/30 (70% операций чтения и 30% операций записи от общего количества операций чтения/записи), усреднённые для размеров блоков операций 4, 8, 16 КБ.

Максимальные значения IOPS не зависят от объёма диска (в ГБ).

Значения операций чтения и записи получены в результате тестирования с помощью утилиты fio. Документация на утилиту fio доступна по ссылке.

disk-e-BS-4k-IOD-64-PROF-randrw-WR_PERC-30: (g=0): rw=randrw, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=64
...
fio-3.16
Starting 4 processes

disk-e-BS-4k-IOD-64-PROF-randrw-WR_PERC-30: (groupid=0, jobs=4): err= 0: pid=65479: Tue Jul 18 13:15:46 2023
  read: IOPS=28.1k, BW=110MiB/s (115MB/s)(64.3GiB/600007msec)
    slat (nsec): min=1285, max=19665k, avg=8295.79, stdev=19897.83
    clat (usec): min=166, max=172490, avg=5175.73, stdev=3432.50
     lat (usec): min=206, max=172497, avg=5184.17, stdev=3431.57
    clat percentiles (usec):
     |  1.00th=[  668],  5.00th=[ 1172], 10.00th=[ 1647], 20.00th=[ 2474],
     | 30.00th=[ 3163], 40.00th=[ 3785], 50.00th=[ 4424], 60.00th=[ 5211],
     | 70.00th=[ 6128], 80.00th=[ 7308], 90.00th=[ 9503], 95.00th=[11863],
     | 99.00th=[16712], 99.50th=[18482], 99.90th=[22414], 99.95th=[24511],
     | 99.99th=[40633]
   bw (  KiB/s): min=62001, max=157217, per=99.99%, avg=112315.43, stdev=3303.45, samples=4800
   iops        : min=15500, max=39304, avg=28078.79, stdev=825.86, samples=4800
  write: IOPS=12.0k, BW=47.0MiB/s (49.3MB/s)(27.5GiB/600007msec); 0 zone resets
    slat (nsec): min=1408, max=8227.2k, avg=8584.01, stdev=19619.03
    clat (usec): min=872, max=172790, avg=9164.87, stdev=4409.64
     lat (usec): min=879, max=172801, avg=9173.60, stdev=4409.57
    clat percentiles (usec):
     |  1.00th=[ 1942],  5.00th=[ 2999], 10.00th=[ 3884], 20.00th=[ 5211],
     | 30.00th=[ 6587], 40.00th=[ 7898], 50.00th=[ 8979], 60.00th=[10028],
     | 70.00th=[11076], 80.00th=[12387], 90.00th=[14484], 95.00th=[16581],
     | 99.00th=[20841], 99.50th=[22414], 99.90th=[29230], 99.95th=[38011],
     | 99.99th=[90702]
   bw (  KiB/s): min=26541, max=67104, per=99.99%, avg=48123.57, stdev=1414.51, samples=4800
   iops        : min= 6634, max=16776, avg=12030.81, stdev=353.63, samples=4800
  lat (usec)   : 250=0.01%, 500=0.22%, 750=0.80%, 1000=1.34%
  lat (msec)   : 2=7.90%, 4=23.24%, 10=48.46%, 20=17.45%, 50=0.59%
  lat (msec)   : 100=0.01%, 250=0.01%
  cpu          : usr=2.07%, sys=9.96%, ctx=14566189, majf=0, minf=18443
  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=16849227,7219343,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=110MiB/s (115MB/s), 110MiB/s-110MiB/s (115MB/s-115MB/s), io=64.3GiB (69.0GB), run=600007-600007msec
  WRITE: bw=47.0MiB/s (49.3MB/s), 47.0MiB/s-47.0MiB/s (49.3MB/s-49.3MB/s), io=27.5GiB (29.6GB), run=600007-600007msec

Disk stats (read/write):
  sde: ios=16844721/7217454, merge=133/23, ticks=86955293/64542057, in_queue=103314360, util=100.00%

Чтобы самостоятельно протестировать диск:

  1. Создайте диск 10 ГБ или создайте сервер с дополнительным диском 10 ГБ.
  2. Подключите диск к серверу.
  3. Установите fio на сервер, выполнив команду:

    Пример команды для ОС Ubuntu
    sudo apt-get update && sudo apt-get install fio -y
  4.  Запустите fio, выполнив команду:

    Важно

    Убедитесь, что на подключенном диске нет важной информации, так как во время тестирования данные могут быть утеряны.

    sudo fio --filename=/dev/vdb --direct=1 --rw=randrw \
    	--rwmixwrite=30 --bs=4k --ioengine=libaio --iodepth=64 \
    	--runtime=600 --numjobs=4 --group_reporting

    где:

    • filename=/dev/vdb — имя тестируемого диска. Чтобы посмотреть подключенные диски, выполните команду lsblk;

    • direct — использование буферизации, где 0 — использовать, 1 — не использовать;

    • rw — шаблон нагрузки. Возможные значения:

      • read — последовательное чтение;

      • write — последовательная запись;

      • rw — последовательные чтение/запись;

      • randrw — случайные чтение/запись;

      • randwrite — случайная запись;

      • randread — случайное чтение;

    • rwmixwrite — количество (в процентах) операций записи. Указывается, только если для параметра rw выбрано значение randrw;

    • bs — размер блока чтения/записи. Чтобы получить лучший результат, укажите значение, которое меньше или равно размеру блока диска;

    • iodepth — глубина блоков io на каждое задание (job);

    • runtime — длительность тестирования (в секундах);

    • numjobs — количество заданий чтения/записи.

Мы ответили на ваш вопрос?