Monitoring iops on linux

Как измерить IOPS?

Несколько способов измерения производительности диска или дискового массива.

Измерение случайных IOPS с помощью FIO

FIO — популярный инструмент для измерения IOPS на сервере Linux.
Достаточно гибкий и простой инструмент в пользовании.

В статье будет рассмотрено несколько вариантов проверки, а именно случайное чтение, случайная запись и их комбинация блоками по 4Кб с многопоточностью.

Установка в CentOS/RHEL

yum install epel-release -y && yum install fio -y

Установка в Debian/Ubuntu

Тест случайных операций на чтение/запись

Данный тест создаст файл размером 4Гб и выполнит чтение и запись 4Кб с использованием разделения 75%/25% в файле, причем одновременно будет выполняться 64 операции. На каждые 3 операции чтения — одна операция на запись.

fio —randrepeat=1 —ioengine=libaio —direct=1 —gtod_reduce=1 —name=fiotest —filename=fiotest —bs=4k —iodepth=64 —size=4G —readwrite=randrw —rwmixread=75

Результат выполнения команды будет приблизительно следующим:

fiotest: (g=0): rw=randrw, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=64
fio-2.2.8
Starting 1 process
fiotest: Laying out IO file(s) (1 file(s) / 4096MB)
Jobs: 1 (f=1): [m(1)] [100.0% done] [122.6MB/41948KB/0KB /s] [31.3K/10.5K/0 iops] [eta 00m:00s]
fiotest: (groupid=0, jobs=1): err= 0: pid=11948: Mon Mar 12 20:43:15 2018
read : io=3071.7MB, bw=128462KB/s, iops=32115, runt= 24485msec
write: io=1024.4MB, bw=42839KB/s, iops=10709, runt= 24485msec
cpu : usr=7.07%, sys=32.69%, ctx=48944, majf=0, minf=27
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 : total=r=786347/w=262229/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0
latency : target=0, window=0, percentile=100.00%, depth=64

Run status group 0 (all jobs):
READ: io=3071.7MB, aggrb=128461KB/s, minb=128461KB/s, maxb=128461KB/s, mint=24485msec, maxt=24485msec
WRITE: io=1024.4MB, aggrb=42839KB/s, minb=42839KB/s, maxb=42839KB/s, mint=24485msec, maxt=24485msec

Disk stats (read/write):
dm-0: ios=782987/261131, merge=0/0, ticks=1154639/286253, in_queue=1441157, util=99.65%, aggrios=786347/262229, aggrmerge=0/0, aggrticks=1163953/287616, aggrin_queue=1451392, aggrutil=99.59%
sda: ios=786347/262229, merge=0/0, ticks=1163953/287616, in_queue=1451392, util=99.59%

Исходя из полученной информации делаем вывод, что наш диск в среднем выполняет 32115 операций на чтение и 10709 на запись. (Соотношение 3/1)

read : io=3071.7MB, bw=128462KB/s, iops=32115, runt= 24485msec
write: io=1024.4MB, bw=42839KB/s, iops=10709, runt= 24485msec

Тест случайных операций на чтение

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

fio —randrepeat=1 —ioengine=libaio —direct=1 —gtod_reduce=1 —name=fiotest —filename=fiotest —bs=4k —iodepth=64 —size=4G —readwrite=randread

Читайте также:  Linux add admin user

Результат выполнения команды будет приблизительно следующим:

test: (g=0): rw=randread, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=64
fio-2.2.8
Starting 1 process
test: Laying out IO file(s) (1 file(s) / 4096MB)
Jobs: 1 (f=1): [r(1)] [100.0% done] [218.4MB/0KB/0KB /s] [55.9K/0/0 iops] [eta 00m:00s]
test: (groupid=0, jobs=1): err= 0: pid=12140: Mon Mar 12 20:50:22 2018
read : io=4096.0MB, bw=223054KB/s, iops=55763, runt= 18804msec
cpu : usr=9.33%, sys=38.98%, ctx=56455, majf=0, minf=94
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 : total=r=1048576/w=0/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0
latency : target=0, window=0, percentile=100.00%, depth=64

Run status group 0 (all jobs):
READ: io=4096.0MB, aggrb=223053KB/s, minb=223053KB/s, maxb=223053KB/s, mint=18804msec, maxt=18804msec

Disk stats (read/write):
dm-0: ios=1042660/4, merge=0/0, ticks=1074010/4, in_queue=1074126, util=99.53%, aggrios=1048576/3, aggrmerge=0/1, aggrticks=1088231/3, aggrin_queue=1088042, aggrutil=99.47%
sda: ios=1048576/3, merge=0/1, ticks=1088231/3, in_queue=1088042, util=99.47%

Результаты теста показывают 55763 операций чтения в секунду, что очень хорошо для локального SSD.

read : io=4096.0MB, bw=223054KB/s, iops=55763, runt= 18804msec

Тест случайных операций на запись

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

fio —randrepeat=1 —ioengine=libaio —direct=1 —gtod_reduce=1 —name=fiotest —filename=fiotest —bs=4k —iodepth=64 —size=4G —readwrite=randwrite

Результат выполнения команды будет приблизительно следующим:

test: (g=0): rw=randwrite, bs=4K-4K/4K-4K/4K-4K, ioengine=libaio, iodepth=64
fio-2.2.8
Starting 1 process
Jobs: 1 (f=1): [w(1)] [100.0% done] [0KB/122.1MB/0KB /s] [0/31.5K/0 iops] [eta 00m:00s]
test: (groupid=0, jobs=1): err= 0: pid=12169: Mon Mar 12 20:55:50 2018
write: io=4096.0MB, bw=114642KB/s, iops=28660, runt= 36586msec
cpu : usr=4.72%, sys=21.78%, ctx=31043, majf=0, minf=28
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 : total=r=0/w=1048576/d=0, short=r=0/w=0/d=0, drop=r=0/w=0/d=0
latency : target=0, window=0, percentile=100.00%, depth=64

Run status group 0 (all jobs):
WRITE: io=4096.0MB, aggrb=114642KB/s, minb=114642KB/s, maxb=114642KB/s, mint=36586msec, maxt=36586msec

Disk stats (read/write):
dm-0: ios=0/1040722, merge=0/0, ticks=0/2181650, in_queue=2181906, util=99.79%, aggrios=0/1048579, aggrmerge=0/0, aggrticks=0/2190553, aggrin_queue=2190371, aggrutil=99.73%
sda: ios=0/1048579, merge=0/0, ticks=0/2190553, in_queue=2190371, util=99.73%

Результаты теста показывают 28660 операций на запись в секунду.

write: io=4096.0MB, bw=114642KB/s, iops=28660, runt= 36586msec

Последним аспектом оценки производительности диска является измерение задержки по отдельным запросам. Один из способов выяснить это — воспользоваться утилитой ioping.

# ioping -c 10 .
4 KiB
4 KiB
4 KiB
4 KiB
4 KiB
4 KiB
4 KiB
4 KiB
4 KiB
4 KiB

— . (xfs /dev/dm-0) ioping statistics —
9 requests completed in 1.25 ms, 36 KiB read, 7.20 k iops, 28.1 MiB/s
generated 10 requests in 9.00 s, 40 KiB, 1 iops, 4.44 KiB/s
min/avg/max/mdev = 126.8 us / 138.8 us / 163.7 us / 11.6 us

Среднее значение задержки 138.8 us (микросекунд), что в целом очень хорошо! Если данный параметр будет превышать несколько миллисекунд, то с диском или дисковым массивом наблюдаются проблемы. Необходимо провести диагностику и найти “узкое место”, либо источник проблемы.

Читайте также:  Как установить cron linux

Измерение IOPS с помощью CrystalDiskMark в Windows

CrystalDiskMark — небольшая бесплатная программа, предназначенная для сравнительного тестирования быстродействия жестких дисков. Позволяет измерить скорость чтения и записи данных.

Загружаем и запускаем утилиту:

В программе представлено несколько тестов:

  • Sequential Tests (последовательная запись и чтение)
  • 4K Q8T8 (случайное чтение/запись блоков по 4Kб с глубиной 8 в 8 поток)
  • 4K Q1T1 (случайное чтение/запись блоков по 4Kб с глубиной 1 в 1 поток)
  • 4K QD32T1 (случайное чтение/запись блоков по 4Kб с глубиной 32 в 1 поток)

Запустим выполнение всех тестов и посмотрим на результат.

Посмотрим среднее количество IOPS на примере теста 4K Q8T8, для этого наведите курсор на значение и во всплывающей подсказке будет отображено количество IOPS.

Источник

Linux: Измерение производительности дисков (IOPS)

IOPS (input/output operations per second) – количество операций ввода-вывода, выполняемые системой хранения данных за одну секунду.

Hard Disk

Тестирование IOPS с помощью fio

Установка fio

в CentOS, утилита устанавливается из реозиторий appstream

В Debian или Ubuntu

Параметры командной строки

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% операций записи.

fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=fiotest --filename=testfio --bs=4k --iodepth=64 --size=1G --readwrite=randrw --rwmixread=75

Тестирование случайных операций чтения

Для тестирования только операций чтения, необходимо выполнить следующую команду

fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=fiotest --filename=testfio --bs=4k --iodepth=64 --size=1G --readwrite=randread

Тестирование случайных операций записи

Пример тестирование операций записи

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 мс.

Читайте также:  Google drive установить linux

Установка ioping

Параметры командной строки

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 

Запуск тестирования ioping

ioping возвращает результаты в us — микросекундах или в ms — миллисекундах

Среднее время 252,5 микросекунд, средняя задержка составляет 0,252 миллисекунды.

Похожие записи:

Источник

Оцените статью
Adblock
detector