IOPS, VDI, IOMETER — Часть 6
vscsiStats — Данная статья про инструмент сбора данных, который отлично показывает реальную рабочую нагрузку I/O дисков виртуальной машины. О нем я говорил еще в первой статье, и вот, наконец, добрались.

Начнем с рассмотрения параметров команды vscsiStats:
-h | Выводит Help |
-l | Выводит список всех доступных виртуальных машин и их дисков |
-r | Обнуляет статистику |
-s | Начинает сбор статистики |
-x | Останавливает сбор статистики |
-w <WorldGroupID> | Выбрать определенную виртуальную машину |
-i <HandleID> | Выбрать определенный диск. Параметр -w обязательный. Пример: vscsiStats -s -w XXX -i YYY (Где XXX это WorldGroupID виртуальной машины, а YYY её Virtual SCSI Disk HandleID) |
-p <histoType> | Вывести табличку с данными. Может быть использован вместе с параметрами -w и -i. Одновременно может быть использован только один параметр histoType. На выбор есть вот эти параметры: all, ioLength, seekDistance, outstandingIOs, latency, interarrival |
-c | Использовать разделитель «запятая» при выгрузке в CSV файл. Может быть использован с параметром -p. |
Так, с теорией разобрались. Погнали практику!
- Заходим по ssh на хост.
- Смотрим список машин и используeмых ими дисков на хосте, нам это нужно, чтобы узнать worldGroupID и handleID выбранных машин:
[root@esxi:~] vscsiStats -l
Virtual Machine worldGroupID: 2219140, Virtual Machine Display Name: DC5, Virtual Machine Config File: /vmfs/volumes/5aeb0c19-aebe6070-6209-2c59e541cd64/DC5/DC5.vmx, {Virtual SCSI Disk handleID: 8232 (scsi0:0)}
- Стартуем сбор статистики по интересующему диску:
[root@esxi:~] vscsiStats -s -w 2219140
vscsiStats: Starting Vscsi stats collection for worldGroup 2219140, handleID 8232 (scsi0:0)Success.
- Даем типовую нагрузку на виртуальную машину.
- Ждем либо полчаса (максмильное время сбора, либо отменяем вручную).
- Указываем куда выгружать CSV файл с разделителями:
[root@esxi:~] vscsiStats -p all -c -w 2219140 > /tmp/vscsistats.csv
- Останавливаем сбор статистики:
[root@esxi:~] vscsiStats -x -w 2219140
vscsiStats: Stopping all Vscsi stats collection for worldGroup 2219140, handleID 8232 (scsi0:0)
Success. - Утаскиваем себе файлик на компьютер.
- *Опционально* можно выгрузить файл в сервис быстрого построения графиков. Или сделать это вручную в Excel.
Вот файлик для примера, можете поиграться с ним.
Что мы видим на графиках?
Самый простой, но полезный график — размер блока которым идет чтение/запись. В нашем случае, результат предсказуемый — нагрузка идет блоком 4k.
IO lengths of commands
IO lengths of Read commands
IO lengths of Write commands

Вот этот показатель интересный. Измеряется в LBN (Logical Block Numbers). Если вкратце — Чем значение ближе к 1, тем нагрузка больше последовательная. Чем значение дальше от 1 — тем нагрузка больше рандомная.
Distance (in LBNs) between successive commands
Distance (in LBNs) between successive Read commands
Distance (in LBNs) between successive Write commands
Distance (in LBNs) between each command from the closest of previous 16

Тут понятно, сам показатель задержки, но есть нюанс, он в микросекундах, чтобы получить наши привычные милисекунды надо значение с графика поделить на 1000. И страшные 15000мкс превращаются в обычные 15мс.
Latency of IOs in Microseconds (us)
Latency of Read IOs in Microseconds (us)
Latency of Write IOs in Microseconds (us)

Это значение — Глубина очереди. Может помочь в поиске проблем.
Number of outstanding IOs when a new IO is issued
Number of outstanding Read IOs when a new Read IO is issued
Number of outstanding Write IOs when a new Write IO is issued

Хитрый показатель — задержка между выполнением дисковых команд виртуальной машины.
Latency of IO interarrival time in Microseconds (us)
Latency of IO interarrival time for Reads in Microseconds (us)
Latency of IO interarrival time for Writes in Microseconds (us)

Довольно топорный тип получения данных, но, от этого, не самый плохой. Про него еще пишут в книжечке VMware vSphere Performance: Designing CPU, Memory, Storage, and Networking for Performance-Intensive Workloads.