IOPS (input/output operations per second) – количество операций ввода-вывода, выполняемые системой хранения данных за одну секунду.
Тестирование IOPS с помощью fio
Установка fio
в CentOS, утилита устанавливается из реозиторий appstream
1 | yum install fio |
В Debian или Ubuntu
1 | apt install fio |
Параметры командной строки
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | io [опции] [опции задания] <файл(ы)задания> --debug=options Включить протоколирование отладки. Может быть один или несколько из: process,file,io,mem,blktrace,verify,random,parse, diskutil, job, mutex, profile, time, net, rate, compress, steadystate,helperthread,zbd --parse-only Только разбор опций, не запускать никаких IO --merge-blktrace-only Объединять только blktraces, не запускать никаких IO --output Запись вывода в файл --bandwidth-log Генерировать журналы суммарной пропускной способности. --minimal Минимальный (краткий) вывод --output-format=type Формат вывода (terse, json, json+, normal) --terse-version=type Установить формат вывода версий (по умолчанию 3, или 2 или 4) --version Вывести информацию о версии и выйти --help Вывести эту страницу --cpuclock-test Выполнить тест/проверку часов процессора --crctest=[type] Проверка скорости функций контрольной суммы --cmdhelp=cmd Печать справки по командам, "all" для всех команд --enghelp=engine Выведите справку по ioengine, или список доступных ioengine --enghelp=engine,cmd Печать справки для команды ioengine cmd --showcmd Превращает файл задания в параметры командной строки --eta=when Когда должна быть напечатана оценка ETA. Может быть "всегда", "никогда" или "авто". --eta-newline=t Выводить новую строку за каждый пройденный период 't' --status-interval=t Выводить полный дамп состояния за каждый пройденный период 't' --readonly Включить проверку безопасности только для чтения, предотвращая запись. --section=name Запускать только указанную секцию в файле задания, можно указать несколько секций --alloc-size=kb Установить пул smalloc на данный размер в kb (def 16384) --warnings-fatal Предупреждения синтаксического анализатора Fio являются фатальными --max-jobs=nr Максимальное количество поддерживаемых потоков/процессов --server=args Запуск бэкэнд-сервера Fio --daemonize=pidfile Фоновый fio сервер, запись pid в файл --client=hostname Общаться с удаленным бэкенд(ами) fio-сервером по имени хоста --remote-config=file Прикажите fio серверу загрузить этот локальный файл задания --idle-prof=option Сообщать о бездействии процессора на системной или percpu основе (option=system,percpu) или запустить работу блока только калибровку (option=calibrate) --inflate-log=log Раздуть и вывести сжатый журнал --trigger-file=file Выполнение команды запуска, если файл существует --trigger-timeout=t Выполнить триггер в это время --trigger=cmd Установите эту команду в качестве локального триггера --trigger-remote=cmd Установите эту команду в качестве удаленного триггера --aux-path=path Использовать этот путь для генерируемых файлов состояния fio |
Тестирование случайных операций чтения\записи
Для проверки создается файл, размером 1 гигабайт, утилита fio выполнит чтение и запись блоками по 4 кб, в пропорции 75% операций чтения и 25% операций записи.
1 | fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=fiotest --filename=testfio --bs=4k --iodepth=64 --size=1G --readwrite=randrw --rwmixread=75 |
Тестирование случайных операций чтения
Для тестирования только операций чтения, необходимо выполнить следующую команду
1 | fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=fiotest --filename=testfio --bs=4k --iodepth=64 --size=1G --readwrite=randread |
Тестирование случайных операций записи
Пример тестирование операций записи
1 | fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=fiotest --filename=fiotest --bs=4k --iodepth=64 --size=1G --readwrite=randwrite |
Тестирование времени ожидания диска с помощью ioping
Время ожидания диска (latency) - параметр определяющий время задержки выполнения запроса, высокое время задержки негативно скажется на производительность системы и должно быть не более 20 мс.
Установка ioping
В CentOS
1 | yum install ioping |
В Debian и Ubuntu
1 | apt install ioping |
Параметры командной строки
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | ioping Usage: ioping [-ABCDRLWYykq] [-c count] [-i interval] [-s size] [-S wsize] [-o offset] [-w deadline] [-pP period] directory|file|device ioping -h | -v -c остановка после запросов -i интервал между запросами (1с) -l ограничение скорости в байтах в секунду -t <time> minimal valid request time (0us) -T <time> maximum valid request time -s request size (4k) -S размер рабочего набора (1 м) -o смещение рабочего набора (0) -w stop после истечения времени -p выводить необработанную статистику за каждый запрос -P вывести необработанную статистику для каждого во времени -A использовать асинхронный ввод/вывод -C использовать кэшированный ввод/вывод (без сброса/сброса кэша) -B вывести итоговую статистику в необработанном формате -D использовать прямой ввод/вывод (O_DIRECT) -R использовать тест скорости поиска -L использовать последовательные операции -W использовать запись ввода/вывода (пожалуйста, прочитайте manpage) -G режим "пинг-понг" чтение-запись -Y использовать синхронизацию ввода-вывода (O_SYNC) -y использовать синхронизацию данных ввода-вывода (O_DSYNC) -k хранить и повторно использовать временный файл (ioping.tmp) -q подавлять человекочитаемый вывод -h вывести это сообщение и выйти -v отобразить версию и выйти </time></time> |
Запуск тестирования ioping
ioping возвращает результаты в us - микросекундах или в ms - миллисекундах
Запуск 10 запросов
1 | ioping -c 10 /tmp/ |
Пример
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | ioping -c 10 /tmp/ 4 KiB <<< /tmp/ (ext4 /dev/vda2): request=1 time=192.8 us (warmup) 4 KiB <<< /tmp/ (ext4 /dev/vda2): request=2 time=221.4 us 4 KiB <<< /tmp/ (ext4 /dev/vda2): request=3 time=132.6 us 4 KiB <<< /tmp/ (ext4 /dev/vda2): request=4 time=265.6 us 4 KiB <<< /tmp/ (ext4 /dev/vda2): request=5 time=209.3 us 4 KiB <<< /tmp/ (ext4 /dev/vda2): request=6 time=247.2 us 4 KiB <<< /tmp/ (ext4 /dev/vda2): request=7 time=256.5 us 4 KiB <<< /tmp/ (ext4 /dev/vda2): request=8 time=242.8 us 4 KiB <<< /tmp/ (ext4 /dev/vda2): request=9 time=400.8 us (slow) 4 KiB <<< /tmp/ (ext4 /dev/vda2): request=10 time=296.3 us --- /tmp/ (ext4 /dev/vda2) ioping statistics --- 9 requests completed in 2.27 ms, 36 KiB read, 3.96 k iops, 15.5 MiB/s generated 10 requests in 9.00 s, 40 KiB, 1 iops, 4.44 KiB/s min/avg/max/mdev = 132.6 us / 252.5 us / 400.8 us / 67.8 us |
Среднее время 252,5 микросекунд, средняя задержка составляет 0,252 миллисекунды.