VMware
Сбор статистики для выбора параметров vFRC в VMware
Как известно, для эффективного использования vFRC (virtual flash read cache) у VMware, нужно правильным образом выбрать два параметра — размер кэша, и размер блока кэша. Если с размером ещё можно попытаться разобраться эмпирически (читай — методом научного тыка), то с размером блока это сделать как-то сложнее. Чтобы правильно выбрать размер блока, нужна статистика по каждой отдельной виртуальной машине, для которой предполагается использовать vFRC, на предмет того, блоки какого размера превалируют в дисковом обмене. И именно такой размер блока нужно выставлять в vFRC. Оказывается, в VMware есть механизм, который такую позволяет собрать статистику по размерам блоков обмена.
Для этого нужно подключиться к хосту, на котором работает искомая ВМ, по SSH. И выполнить следующие команды:
Эта команда выведет нам список виртуалок на хосте, а также виртуальных дисков у каждой виртуалки:
Virtual Machine worldGroupID: 35676, Virtual Machine Display Name: TEST-IO, Virtual Machine Config File:
/vmfs/volumes/55f97ce4-d51833a0-3617-0007430759d0/TEST-IO/TEST-IO.vmx, {
Virtual SCSI Disk handleID: 8214 (scsi0:0)
Virtual SCSI Disk handleID: 8215 (scsi0:1)
}
У меня на хосте одна машина, поэтому вот.
Из этого чарующего списка нас интересуют два идентификатора: Virtual Machine worldGroupID и Virtual SCSI Disk handleID.
Первый является идентификатором ВМ, второй — идентификатором того виртуального диска этой ВМ, для которой вам нужна статистика. В моём случае worldGroupID равен 35676, а Virtual SCSI Disk handleID равен 8215 — меня интересует именно второй диск. На этой виртуалке у меня сейчас запущен Microsoft JetStress 2013 и тестовые базы лежать именно на втором диске.
Затем, нужно запустить сбор статистики. Делается это командой:
vscsiStats: Starting Vscsi stats collection for worldGroup 53290, handleID 8202 (scsi0:0)
Success.
Ключ /-w/ задаёт worldGroupID, ключ /-i/ задаёт disk handleID. Хост нам отвечает, что сбор статистики начат.
Через какое-то время можно посмотреть, что там мы насобирали:
Histogram: IO lengths of commands,virtual machine worldGroupID,35676,virtual disk handleID,8215 (scsi0:1)
min,4096
max,524288
mean,41803
count,1308632
Frequency,Histogram Bucket Limit
0,512
0,1024
0,2048
0,4095
72510,4096
0,8191
17429,8192
14999,16383
4949,16384
1107407,32768
4878,49152
1839,65535
18921,65536
754,81920
4768,131072
60065,262144
113,524288
0,524288
Histogram: IO lengths of Read commands,virtual machine worldGroupID,35676,virtual disk handleID,8215 (scsi0:1)
min,4096
max,262144
mean,50433
count,724878
Frequency,Histogram Bucket Limit
0,512
0,1024
0,2048
0,4095
910,4096
0,8191
0,8192
2,16383
0,16384
667157,32768
0,49152
0,65535
428,65536
1,81920
269,131072
56111,262144
0,524288
0,524288
Histogram: IO lengths of Write commands,virtual machine worldGroupID,35676,virtual disk handleID,8215 (scsi0:1)
min,4096
max,524288
mean,31087
count,583754
Frequency,Histogram Bucket Limit
0,512
0,1024
0,2048
0,4095
71600,4096
0,8191
17429,8192
14997,16383
4949,16384
440250,32768
4878,49152
1839,65535
18493,65536
753,81920
4499,131072
3954,262144
113,524288
0,524288
Формат таблички очень простой. Три блока диаграмм, первая — всего количество команд ввода-вывода с блоками соответствующего размера, затем отдельно команды только чтения, и только записи. Цифры идут в формате: «<кол-во_команд>, <размер_блока>».
Как вы понимаете из названия технологии «Virtual Flash READ cache», нас интересует только второй раздел, который «IO lengths of Read commands». Если эти данные сохранить в формат CSV, а затем творчески обработать в Excel, то получим вот такую красивую картинку:

Из каковой следует, что размер блока кэша нам для этой нагрузки следует делать именно 32 Kb.
После того, как мы осознали эту простую истину, нужно выключить сбор статистики на гипервизоре:
И идти настраивать vFRC :-)
Вообще же, vscsiStat — довольно интересная утиля. Она позволяет не только выяснить размер блоков, которыми виртуалка обменивается с хранилищем, но и оценить тип нагрузки в терминах «случайная/последовательная». Для этого нужно собрать инфу командой:
Она покажет, насколько далеко находятся запрашиваемые виртуалкой блоки данных. Чем дальше цифры от 0, тем нагрузка «случайнее». Есть ещё возможность оценить статистику по задержкам выполнения команд, и есть ключ /-p all/, который выводит вообще все типы данных.
Так же один белый человек озадачился, и создал страничку, на которой можно просто впихнуть весь вывод, который сгенерила вам vscsiStat, и нарисовать красивые диаграммы автоматически. Вот что-то такое в итоге получается:

Вот ссылка: http://www.virten.net/vscsistats/
Скажем автору большое человеческое спасибо за такой сервис :-)
Зависание инсталлятора VMware tools
Попытался сейчас на одной виртуалке с Ubuntu заапргейдить VMware tools в «non-interactive mode». Это когда оно, по идее, должно само подключиться к виртуалке, и само всё сделать. Но операция «Initiated VMware tools install or upgrade» зависла на 0%, и больше ничего нельзя было с виртуалкой сделать — ни отмонтировать диск с VMware tools, ни мигрировать виртуалку, ни отменить операцию установки. При попытке выбрать «End Install/upgrade VMware tools» выскакивала ошибка «Call „VirtualMachine.UnmountToolsInstaller“ for object „Usergate-Webfilter“ on vCenter Server „vcenter.vsphere.local“ failed», а в логах появлялось сообщение: «The operation is not allowed in the current state».
В общем, оставался вариант только попробовать потушить машину, чего делать очень не хотелось — машина в продакшене, и ею пользуются клиенты.
В итоге на просторах отыскался рецепт:
- Включить SSH на том хосте, на котором работает виртуалка;
- Зайти в консоль хоста и выполнить там команду vim-cmd vmsvc/getallvms. Эта команда покажет список работающих виртуалок. В левой колонке будет ID соответствующей виртуалки. Ищем в списке виртуалку, на которой завис инсталлятор VMware tools, и определяем её ID;
- Выполняем команду vim-cmd vmsvc/tools.cancelinstall
, где VM_ID — идентификатор виртуалки, определённый на шаге 2. После этого операция установки VMware tools завершается с ошибкой и освобождает виртуалку; - Не забываем снова отключить службу SSH на хосте.