Диагностика производительности диска на Linux OS.

Диагностика, доступность IaaS > Производительность диска
Измерения проводятся с помощью утилиты fio (GitHub проекта https://github.com/axboe/fio/)
Эта программа есть в репозиториях основных дистрибутивов Linux. Также её можно установить из пакетов DEB или RPM, или собрать из исходных текстов, скачать их можно на страничке проекта в GitHub
Инструкция сделана на примере Ubuntu 20.04. Для теста была взята реальная виртуальная машина на кластере с платформой 2016. На виртуальной машине подключены 3 диска разного формата Archive, Standard, Super. На каждом из них проводились измерения
Измерения нужно проводить на ВМ в состоянии «покоя» когда по вводу/выводу на диски ВМ нет нагрузки.
 
Стандарт производительности дисков Облакотеки
 
SLA  Облакотеки предлагает клиентам следующие уровни производительности дисков 
 Параметр
Архив
Стандарт
Супер
Максимальное  IOPS
1000
10 000
30 000
Гарантированное IOPS
100
1 000
3 000
Время отклика (задержка), мсек
50
10
10
 
Где используются  параметры: 
  • количество IOPS (операций ввода-вывода в секунду),
  • время отклика (latency) в милисекундах
 
Поэтому для объективной диагностики измерения нужно выполнять именно этих параметров.

Установка программы fio

# apt install fio
 
Внимание! Перед началом тестирования, обязательно убедитесь, что в параметрах теста указываете корректные данные тестируемого диска и на диске есть достаточно места для размещения тестовых данных. Ошибка может привести к краху системы и потере данных.
  1. Просмотреть список доступных дисков можно командой fdisk –l или lsblk. В нашем примере будет проведен тест трех дисков, разных форматов. Соответственно для каждого из них будут следующие данные: /dev/sda3, /dev/sdb1, и /dev/sdc1
диск
Точка монтирования
формат
примечание
/dev/sda3
/
super
Каталог для измерений /fio_sda
/dev/sdb1
/fio_sdb
standard
 
/dev/sdc1
/fio_sdc
archive
 
 
 
  1. Убедитесь, что на тестируемом разделе есть минимум 4Гб свободного места. Сделать это можно командой df -H

Настройка теста

Параметры тестирования задаются через конфигурационный файл. , Для удобства выполнения теста, создадим 3 конфигурационных файла test.ini для каждого типа дисков со следующим содержимым:
 
[test IOPS]
blocksize=8k
filename=//fio_sda/testfile ;для каждого диска тут подставляем его тестовый каталог
filesize=4G
direct=1
buffered=0
ioengine=libaio
iodepth=64
rw=randrw
rwmixwrite=30
runtime=10
clat_percentiles=0
unlink=1
 
Файл конфигурации будет размещен в тестовом каталоге, который принадлежит файловой системе каждого тестируемого диска.
Диск
Тестовый каталог
/dev/sda3
/fio_sda
/dev/sdb1
/fio_sdb
/dev/sdc1
/fio_sdc
 
 
 
 
 
 
В параметре конфигурационного файла - filename указывается путь для тестового файла в который, в процессе измерения, будут выполняться операции ввода/вывода. Тестовый файл должен быть размещен в каталоге принадлежащем тестируемой файловой системе (диску). В нашем примере:
 
 
Super
/fio_sda
Standard
/fio_sdb
Archive
/fio_sdc
 

Запуск теста

Тест запускается с правами суперпользователя. Для нашего примера строка запуска тестирования выглядит следующим образом:
 
sudo fio /fio_sda/test.ini --output=/fio_sda/iopstest.log  для диска формата super
sudo fio /fio_sdb/test.ini --output=/fio_sdb/iopstest.log для диска формата standard
sudo fio /fio_sdc/test.ini --output=/fio_sdc/iopstest.log для диска формата archive
 
Опция --output=filename  позволяет сохранить результаты тестирования в файл отчета.

Результаты

Тестирование, это выполнение последовательных операций чтение/записи в случайном порядке. Результаты получаем отдельно для чтения и отдельно для записи. Ключевые данные отмечены на скриншоте ниже красной рамкой:
 
Нас интересуют показатели iops и lat.
 - IOPS количество операций чтения и записи в секунду. В данном тесте, чтобы получить общий результат для файловой системы взять
суммарное значение iops для чтения и записи;
 - lat – задержка диска, из результатов теста берем  среднее (avg) значение. Для получения общего результата для файловой системы, нужно вычислить среднее арифметическое значение из двух результатов для чтения и записи.
 
 
 
Результаты тестов
Так будет выглядеть вывод в файл результата работы программы fio
 
 
Расчет для диска формата Super
Для расчета из файла вывода программы fio возьмем только нужные параметры. В результатах замеров они выделены жирным шрифтом
 
  read: IOPS=21.1k, BW=165MiB/s (173MB/s)(1653MiB/10020msec)
     lat (usec): min=131, max=58968, avg=2161.66, stdev=5126.02
  write: IOPS=9081, BW=70.9MiB/s (74.4MB/s)(711MiB/10020msec); 0 zone resets
     lat (usec): min=183, max=59028, avg=2017.11, stdev=5085.34
 
 
Внимание! Значение lat указано в usec (микросекунды). Так как эталонное значение задержки приводится в миллисекундах, тогда значение usec надо разделить на 1000 чтобы получить искомый результат.
 
IOPS = (Read: IOPS=21.1k) + (write: IOPS=9081) = 30 181
Задержка = (2.161 + 2.017) / 2 = 2,089 ms
 
Расчет для диска формата Standard
Для расчета из результата возьмем только нужные параметры
 
  read: IOPS=7069, BW=55.2MiB/s (57.9MB/s)(554MiB/10029msec)
     lat (usec): min=143, max=52707, avg=6324.61, stdev=11037.15
  write: IOPS=3010, BW=23.5MiB/s (24.7MB/s)(236MiB/10029msec); 0 zone resets
     lat (usec): min=191, max=52692, avg=6399.71, stdev=11080.24
    
IOPS = (Read: IOPS=7069) + (write: IOPS=3010) = 10 079
Задержка = (6,324 + 6,399) / 2 = 6,3615 ms
 
Расчет для диска формата Archive
Для расчета из результата возьмем только нужные параметры
 
  read: IOPS=702, BW=5622KiB/s (5757kB/s)(55.3MiB/10065msec)
     lat (usec): min=209, max=153668, avg=49540.43, stdev=11816.80
  write: IOPS=303, BW=2429KiB/s (2487kB/s)(23.9MiB/10065msec); 0 zone resets
     lat (usec): min=647, max=125510, avg=49675.40, stdev=12027.00
 
IOPS = (Read: IOPS=702) + (write: IOPS=303) = 1005
Задержка = (49,540 + 49,675) / 2 = 49,61 ms
 
Соберем результат в таблицу
Параметр
Archive
Standrd
Super
 
IOPS
1005
10 079
30 181
 
Задержка
49,6
6,36
2,08
 
 
 
 
 
 
 
Параметры для дисковой системы заявленные в SLA
 Параметр
Архив
Стандарт
Супер
Максимальное  IOPS
1000
10 000
30 000
Гарантированное IOPS
100
1 000
3 000
Время отклика (задержка), мсек
50
10
10
 
 

Add Feedback