IOPS ( input/output operations per second ) - количество операций ввода-вывода, выполняемых системой хранения данных, за одну секунду. Параметр используемые для определения производительности системы хранения.
Для расчета требования системы к дисками необходимо сначала определить текущее "потребление" операций ввода вывода.
Для начала необходимо получить статистику по использованию диска из /sys/block/<dev>/stat с момента запуска системы
где <dev> имя устройства, к примеру vda
Статистика содержит следующие данные, по порядку
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | Name units description ---- ----- ----------- read I/Os requests количество обработанных операций ввода/вывода чтения read merges requests количество операций ввода-вывода чтения, объединенных с операциями ввода-вывода в очереди read sectors sectors количество прочитанных секторов read ticks milliseconds общее время ожидания запросов на чтение write I/Os requests количество обработанных операций ввода/вывода записи write merges requests количество операций ввода-вывода записи, объединенных с операциями ввода-вывода в очереди write sectors sectors количество записанных секторов write ticks milliseconds общее время ожидания запросов на запись in_flight requests количество операций ввода-вывода, находящихся в настоящее время "в полете" io_ticks milliseconds общее время активности этого блокирующего устройства time_in_queue milliseconds общее время ожидания для всех запросов discard I/Os requests количество отброшенных операций ввода-вывода, обработанных discard merges requests количество отброшенных операций ввода-вывода, объединенных с операциями ввода-вывода в очереди discard sectors sectors количество отброшенных секторов discard ticks milliseconds общее время ожидания запросов на сброс |
Для расчета IOPS нам необходимы два параметра read I/Os и write I/Os, так как IOPS является их суммой.
Для получения данного значения используем команду
1 | cat /sys/block/<dev>/stat | awk '{sum+=$1+$5} END {print sum}' |
Пример
1 2 | cat /sys/block/vda/stat | awk '{sum+=$1+$5} END {print sum}' 85599223 |
мы получили текущее количество операций чтения записи, с момента запуска системы.
для получения текущего значения IOPS необходимо сделать задержку в одну секунду, после чего получить разницу в значениях.
1 2 3 4 5 6 7 | #!/bin/bash echo "Calculation IOPS..." IOP1=$(cat /sys/block/vda/stat | awk '{sum+=$1+$5} END {print sum}') sleep 1 IOP2=$(cat /sys/block/vda/stat | awk '{sum+=$1+$5} END {print sum}') echo $(( $IOP2 - $IOP1 )) |
соответственно для получения IOPS за длительный промежуток времени, к примеру за минуту, необходимо увеличить задержку, а так же добавить операцию деления, для финального результата
1 2 3 4 5 6 7 | #!/bin/bash echo "Calculation IOPS..." IOP1=$(cat /sys/block/vda/stat | awk '{sum+=$1+$5} END {print sum}') sleep 60 IOP2=$(cat /sys/block/vda/stat | awk '{sum+=$1+$5} END {print sum}') echo $(( ($IOP2 - $IOP1)/60 )) |