meta data for this page
  •  

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
wiki:benchmark:tests:storage:fio [2022/07/05 09:48] mchuswiki:benchmark:tests:storage:fio [2025/06/02 07:44] (current) – old revision restored (2022/11/22 11:34) mchus
Line 1: Line 1:
 +====== FIO (Flexible IO Tester) ======
 +===== Синтетическое тестирование (v.1.0)=====
 +== Начальные условия ==
 +== Мероприятия по подготовке ==
 +  - Создать виртуальную машину следующей конфигурации: 
 +    - 8 vCPU
 +    - 2 GB mem
 +    - Linux Debian
 +    - 256 GB Disk
 +  - Установить ''fio'';
 +  - Установить ''nmon'';
 +  - Создать файлы файлы по шаблону ниже. Или скопировать из предоставленного {{ :wiki:benchmark:tests:storage:disk.iso |  *.iso образа }} файлы внутрь виртуальной машины;
 +    - Командой ''lsblk'' найти тестируемое устройство;
 +    - Указать в файле bench.ini тестируемое устройство, в примере - "/dev/sdb";
 +
 +<code bash bench.sh>
 +#!/bin/sh
 +BASEDIR=/home/admin  #<---- Укажите рабочую директорию, где будут храниться отчёты
 +INIDIR=$BASEDIR/ini
 +LOGDIR=$BASEDIR/log
 +DEV=/dev/sdb         #<---- Укажите девайс который будем тестировать
 +IODEPTH=16
 +RUNTIME=300
 +TPAUSE=30
 +STOR="sdb"           #<---- Укажите девайс который будем тестировать
 +echo "stor $STOR" > $INIDIR/nmon.gr
 +
 +# ---------------------
 +/usr/bin/nmon -f -t -s 5 -c 5000 -g $INIDIR/nmon.gr -m $LOGDIR/fio
 +fiocmdlc="--filename=$DEV --iodepth=$IODEPTH --runtime=$RUNTIME "
 +for fiocmdl in " --blocksize=4k --output=$LOGDIR/rand_read_4.out $INIDIR/rand_read.ini"\
 +" --blocksize=8k --output=$LOGDIR/rand_read_8.out $INIDIR/rand_read.ini"\
 +" --blocksize=16k --output=$LOGDIR/rand_read_16.out $INIDIR/rand_read.ini"\
 +" --blocksize=256k --output=$LOGDIR/rand_read_256.out $INIDIR/rand_read.ini"\
 +" --blocksize=4k --output=$LOGDIR/rand_write_4.out $INIDIR/rand_write.ini"\
 +" --blocksize=8k --output=$LOGDIR/rand_write_8.out $INIDIR/rand_write.ini"\
 +" --blocksize=16k --output=$LOGDIR/rand_write_16.out $INIDIR/rand_write.ini"\
 +" --blocksize=256k --output=$LOGDIR/rand_write_256.out $INIDIR/rand_write.ini"\
 +" --blocksize=4k --output=$LOGDIR/rand_read_write_4.out $INIDIR/rand_read_write.ini"\
 +" --blocksize=8k --output=$LOGDIR/rand_read_write_8.out $INIDIR/rand_read_write.ini"\
 +" --blocksize=16k --output=$LOGDIR/rand_read_write_16.out $INIDIR/rand_read_write.ini"\
 +" --blocksize=256k --output=$LOGDIR/rand_read_write_256.out $INIDIR/rand_read_write.ini"\
 +" --blocksize=4k --output=$LOGDIR/read_4.out $INIDIR/read.ini"\
 +" --blocksize=8k --output=$LOGDIR/read_8.out $INIDIR/read.ini"\
 +" --blocksize=16k --output=$LOGDIR/read_16.out $INIDIR/read.ini"\
 +" --blocksize=256k --output=$LOGDIR/read_256.out $INIDIR/read.ini"\
 +" --blocksize=4k --output=$LOGDIR/read_write_4.out $INIDIR/read_write.ini"\
 +" --blocksize=8k --output=$LOGDIR/read_write_8.out $INIDIR/read_write.ini"\
 +" --blocksize=16k --output=$LOGDIR/read_write_16.out $INIDIR/read_write.ini"\
 +" --blocksize=256k --output=$LOGDIR/read_write_256.out $INIDIR/read_write.ini"\
 +" --blocksize=4k --output=$LOGDIR/write_4.out $INIDIR/write.ini"\
 +" --blocksize=8k --output=$LOGDIR/write_8.out $INIDIR/write.ini"\
 +" --blocksize=16k --output=$LOGDIR/write_16.out $INIDIR/write.ini"\
 +" --blocksize=256k --output=$LOGDIR/write_256.out $INIDIR/write.ini";
 +do
 +echo " ----- $fiocmdlc $fiocmdl" >> $LOGDIR/fio/test.log
 +fio $fiocmdlc $fiocmdl >> $LOGDIR/fio/test.log
 +echo " ----- endtest" >> $LOGDIR/fio/test.log
 +sleep $TPAUSE
 +done
 +pkill nmon
 +# ---------------------
 +
 +</code>
 +
 +
 +<code ini /ini/write.ini>
 +[writetest]
 +rw=write
 +direct=1
 +buffered=0
 +ioengine=libaio
 +</code>
 +
 +<code ini /ini/read.ini>
 +[readtest]
 +rw=read
 +direct=1
 +buffered=0
 +ioengine=libaio
 +</code>
 +
 +<code ini /ini/read_write.ini>
 +[writetest]
 +rw=rw
 +direct=1
 +buffered=0
 +ioengine=libaio
 +</code>
 +
 +<code ini /ini/rand_write.ini>
 +[writetest]
 +rw=randwrite
 +direct=1
 +buffered=0
 +ioengine=libaio
 +</code>
 +
 +<code ini /ini/rand_read.ini>
 +[readtest]
 +rw=randread
 +direct=1
 +buffered=0
 +ioengine=libaio
 +</code>
 +
 +<code ini /ini/rand_read_write.ini>
 +[writetest]
 +rw=randrw
 +direct=1
 +buffered=0
 +ioengine=libaio
 +</code>
 +
 +== Мероприятия по проверке ==
 +  - Запустить тестирование коммандой ''bench.sh''
 +
 +== Мероприятия после проверки ==
 +  - Скачать с сервера полученные результаты теста в файле вида "fio-bench_xxxxxx_xxxx.nmon"
 +  - На ПК администратора установить [[http://nmon.sourceforge.net/pmwiki.php?n=Site.Nmon-Analyser|nmon analyzer]]
 +  - Открыть полученный результат с помощью nmon analyzer
 +  - Перейти на вкладку DISK_SUMM
 +
 +<WRAP center round tip 60%>
 +
 +Сводные результаты тестов представлены на данной странице: [[wiki:benchmark:results:fio:v1.0|Результаты тестов fio]]
 +
 +</WRAP>
 +
 +===== Синтетическое тестирование (v.1.1) =====
 +
 +== Начальные условия ==
 +== Мероприятия по подготовке ==
 +  - Создать виртуальную машину следующей конфигурации: 
 +    - 8 vCPU
 +    - 2 GB mem
 +    - Linux Debian
 +    - 256 GB Disk
 +  - Установить ''fio'';
 +  - Установить ''nmon'';
 +  - Создать файлы файлы по шаблону ниже. Или скопировать из предоставленного {{ :wiki:benchmark:tests:storage:disk.iso |  *.iso образа }} файлы внутрь виртуальной машины;
 +    - Командой ''lsblk'' найти тестируемое устройство;
 +    - Указать в файле bench.ini тестируемое устройство, в примере - "/dev/sdb";
 +
 +<code bash bench.sh>
 +#!/bin/sh
 +BASEDIR=/home/admin  #<---- Укажите рабочую директорию, где будут храниться отчёты
 +INIDIR=$BASEDIR/ini
 +LOGDIR=$BASEDIR/log
 +DEV=/dev/sdb         #<---- Укажите девайс который будем тестировать
 +IODEPTH=16
 +RUNTIME=300
 +TPAUSE=30
 +STOR="sdb"           #<---- Укажите девайс который будем тестировать
 +echo "stor $STOR" > $INIDIR/nmon.gr
 +
 +# ---------------------
 +/usr/bin/nmon -f -t -s 5 -c 5000 -g $INIDIR/nmon.gr -m $LOGDIR/fio
 +fiocfg="--filename=/dev/sdb --iodepth=$IODEPTH --runtime=$RUNTIME "
 +for fiorun in \
 +" --blocksize=4k --output=$LOGDIR/rand_write_4.out $INIDIR/rand_write.ini" \
 +" --blocksize=8k --output=$LOGDIR/rand_write_8.out $INIDIR/rand_write.ini" \
 +" --blocksize=16k --output=$LOGDIR/rand_write_16.out $INIDIR/rand_write.ini" \
 +" --blocksize=256k --output=$LOGDIR/rand_write_256.out $INIDIR/rand_write.ini" \
 +" --blocksize=4k --output=$LOGDIR/rand_read_write_4.out $INIDIR/rand_read_write.ini" \
 +" --blocksize=8k --output=$LOGDIR/rand_read_write_8.out $INIDIR/rand_read_write.ini" \
 +" --blocksize=16k --output=$LOGDIR/rand_read_write_16.out $INIDIR/rand_read_write.ini" \
 +" --blocksize=256k --output=$LOGDIR/rand_read_write_256.out $INIDIR/rand_read_write.ini" \
 +" --blocksize=4k --output=$LOGDIR/rand_read_4.out $INIDIR/rand_read.ini" \
 +" --blocksize=8k --output=$LOGDIR/rand_read_8.out $INIDIR/rand_read.ini" \
 +" --blocksize=16k --output=$LOGDIR/rand_read_16.out $INIDIR/rand_read.ini" \
 +" --blocksize=256k --output=$LOGDIR/rand_read_256.out $INIDIR/rand_read.ini" \
 +" --blocksize=4k --output=$LOGDIR/write_4.out $INIDIR/write.ini" \
 +" --blocksize=8k --output=$LOGDIR/write_8.out $INIDIR/write.ini" \
 +" --blocksize=16k --output=$LOGDIR/write_16.out $INIDIR/write.ini" \
 +" --blocksize=256k --output=$LOGDIR/write_256.out $INIDIR/write.ini" \
 +" --blocksize=4k --output=$LOGDIR/read_write_4.out $INIDIR/read_write.ini" \
 +" --blocksize=8k --output=$LOGDIR/read_write_8.out $INIDIR/read_write.ini" \
 +" --blocksize=16k --output=$LOGDIR/read_write_16.out $INIDIR/read_write.ini" \
 +" --blocksize=256k --output=$LOGDIR/read_write_256.out $INIDIR/read_write.ini" \
 +" --blocksize=4k --output=$LOGDIR/read_4.out $INIDIR/read.ini" \
 +" --blocksize=8k --output=$LOGDIR/read_8.out $INIDIR/read.ini" \
 +" --blocksize=16k --output=$LOGDIR/read_16.out $INIDIR/read.ini" \
 +" --blocksize=256k --output=$LOGDIR/read_256.out $INIDIR/read.ini" ;
 +do
 +  echo " ----- $fiocfg $fiorun" >>  $LOGDIR/fio/test.log
 + fio $fiocfg $fiorun >> $LOGDIR/fio/test.log
 + echo " ----- endtest" >>  $LOGDIR/fio/test.log
 + sleep $TPAUSE
 +  done
 +pkill nmon
 +# ---------------------
 +
 +
 +</code>
 +
 +
 +<code ini /ini/write.ini>
 +[writetest]
 +rw=write
 +direct=1
 +buffered=0
 +ioengine=libaio
 +</code>
 +
 +<code ini /ini/read.ini>
 +[readtest]
 +rw=read
 +direct=1
 +buffered=0
 +ioengine=libaio
 +</code>
 +
 +<code ini /ini/read_write.ini>
 +[writetest]
 +rw=rw
 +direct=1
 +buffered=0
 +ioengine=libaio
 +</code>
 +
 +<code ini /ini/rand_write.ini>
 +[writetest]
 +rw=randwrite
 +direct=1
 +buffered=0
 +ioengine=libaio
 +</code>
 +
 +<code ini /ini/rand_read.ini>
 +[readtest]
 +rw=randread
 +direct=1
 +buffered=0
 +ioengine=libaio
 +</code>
 +
 +<code ini /ini/rand_read_write.ini>
 +[writetest]
 +rw=randrw
 +direct=1
 +buffered=0
 +ioengine=libaio
 +</code>
 +
 +== Мероприятия по проверке ==
 +  - Запустить тестирование командой ''bench.sh''
 +
 +== Мероприятия после проверки ==
 +  - Скачать с сервера полученные результаты теста в файле вида "fio-bench_xxxxxx_xxxx.nmon"
 +  - На ПК администратора установить [[http://nmon.sourceforge.net/pmwiki.php?n=Site.Nmon-Analyser|nmon analyzer]]
 +  - Открыть полученный результат с помощью nmon analyzer
 +  - Перейти на вкладку DISK_SUMM
 +
 +==== Нагрузочное тестирование СХД ====
 +== Начальные условия ==
 +== Мероприятия по подготовке ==
 +  - Создать каталог куда будут записываться результаты теста. В примере указан каталог /var/log/storage1 
 +  - Создать конфигурационный файл теста
 +    - Указать примонтированые блочные устройства (vdb, vdc,…)
 +    - Указать время замера в переменной **runtime=**
 +
 +<file inf /var/fio.rtf>
 +[global]
 +ioengine=libaio
 +direct=1
 +group_reporting
 +time_based
 +runtime=1h
 +buffered=0
 +random_generator=tausworthe64
 +norandommap
 +disable_clat=1
 +disable_slat=1
 +log_avg_msec=5000
 +
 +[ NVMe_1 ]
 +description=Random read/write 80/20
 +rw=randrw
 +rwmixread=80
 +bs=8k
 +filename=/dev/vdb 
 +iodepth=16
 +numjobs=8
 +
 +[ NVMe_2 ]
 +description=Random read/write 80/20
 +rw=randrw
 +rwmixread=80
 +bs=8k
 +filename=/dev/vdc
 +iodepth=16
 +numjobs=8
 +
 +[ HDD_1 ]
 +description=Read/write 80/20
 +rw=rw
 +rwmixread=80
 +bs=256k
 +filename=/dev/vdd
 +iodepth=1
 +numjobs=1
 +
 +[ HDD_2 ]
 +description=Read/write 80/20
 +rw=rw
 +rwmixread=80
 +bs=256k
 +filename=/dev/vde
 +iodepth=1
 +numjobs=1
 +
 +[ HDD_3 ]
 +description=Read/write 80/20
 +rw=rw
 +rwmixread=80
 +bs=256k
 +filename=/dev/vdf
 +iodepth=1
 +numjobs=1
 +</file>
 +
 +== Мероприятия по проверке ==
 +  - Запустить тестирование коммандой <code bash> fio /var/fio.rtf -output-format=json --output=/var/log/storage1/fio.json --write_lat_log=/var/log/storage1/lat.json --write_bw_log=/var/log/storage1/bw.json —write_iops_log=/var/log/storage1/iops.json </code>
 +
 +== Мероприятия после проверки ==
 +
 +===== Смотри также =====
 +
 +[[https://docs.oracle.com/en-us/iaas/Content/Block/References/samplefiocommandslinux.htm|Примеры от Oracle]]
 +
 +