Как стать автором
Обновить
Veeam Software
Продукты для резервного копирования информации

VixDiskLibSample: тестируйте виртуальные диски правильно

Время на прочтение7 мин
Количество просмотров3.2K
Когда мы сталкиваемся с неким программным продуктом, с которым нам предстоит взаимодействовать, сценарий взаимодействия мы вольны выбирать сами. Можно героически изобретать велосипед, а можно понадеяться, что авторы несколько лучше, чем мы, знают свой продукт, поэтому предоставляемый ими API (или набор библиотек) является оптимальным решением. На практике, к сожалению, не всё так радужно, но сегодня не об этом.

Для работы со своей дисковой подсистемой VMware уже много лет предоставляет VDDK — развесистый набор библиотек, документации и примеров кода, с помощью которых ваше приложение может работать с дисками виртуальных машин. Само собой мы в Veeam очень не любим изобретать ненужные велосипеды, поэтому VDDK в наших продуктах используется крайне активно.

Но это всё никак не влияет на количество клиентов, которые считают, что работать с дисками можно ещё быстрее, а все предлагаемые тесты производительности показывают априори неверные результаты. Вот в такие моменты нам на помощь и приходит ультимативное оружие — VixDiskLibSample.



VixDiskLibSample — это небольшая программа на С++, входящая в VDDK и демонстрирующая принципы работы с библиотекой vixDiskLib.То есть с дисками виртуальных машин лучше и быстрее, чем она, никто работать не будет. И что нам особенно важно, её можно использовать как бенчмарк на запись и чтение. Этакий ультимативный тест, результаты которого будет сложно назвать невалидными.

Заполучить её можно вместе с самим VDDK. Скачиваем его с сайта VMware и в случае Linux просто компилируем после установки

[root@toor diskLib] cd /usr/lib/vmware-vix-disklib/doc/samples/diskLib
[root@toor diskLib] ls
Makefile  vixDiskLibSample.cpp
[root@toor disklib] make
[root@toor diskLib] ls
Makefile  vix-disklib-sample  vixDiskLibSample.cpp

Предлагаемый по умолчанию путь для установки.
 
/usr/share/doc/vmware-vix-disklib/samples/disklib

Также в сети есть информация, что на некоторых дистрибутивах надо добавить следующие строчки в vixDiskLibSample.cpp для успешной компиляции:

#else
#include <stdio.h>
#include <string.h>

Если и в этом случае не скомпилируется, то рекомендуют попробовать добавить переменную окружения LD_LIBRARY_PATH=/usr/lib/vmware-vix-disklib/lib64 и запустить ldconf с правами рута после добавления адреса /usr/lib/vmware-vix-disklib/lib64 в /etc/ld.so.conf.d/vmware-vix-disklib.conf

Зато под Windows в Visual Studio всё компилируется без проблем. И хозяйке на заметку: VDDK в Veeam используется только при работе через Windows прокси. На Linux, по ряду причин, используется собственное решение с применением vSphere API.  

А что с этого пользователям Veeam, спросите вы?

Отвечаем: подключая библиотеки VDDK разных версий, идущих вместе с Veeam Backup & Replication, вы можете проверить истинную скорость работы с хостом в самых разнообразных режимах.

Библиотеки хранятся по адресу C:\Program Files (x86)\Veeam\Backup Transport\x64\vddk_Х_Х, и их использование обязательно для верных результатов.

Теперь давайте посмотрим на самые важные  для нас команды и опции при запуске. Ибо, как и для всех инструментов для тестирования, полный список здесь весьма и весьма не мал.

-readbench Запуск бенчмарка на чтение с указанным размером блока. Размер указывается в секторах. 
 -writebench Всё то же самое, только запись. Важно: Это деструктивная операция! Запись идёт по-честному! Не вздумайте запускать на продакшн машину! Её перезапишет бинарным мусором!
-multithread N Начиная с версии 6.5, можно использовать в параллельном режиме для работы с несколькими дисками.
-host Хост для подключения. Можно в виде DNS имени, можно IP.
-user Пользователь по схеме domain\user
-password Думаю, понятно 
-vm vmPath=/path/to/vm Это если мы знаем, где лежит наша машина, но не знаем других её координат
-vm «moref=vm-ХХХ» Путь до машины в инвентори. Он же moref. Проще всего находить через MOB по адресу https://vcenter.local/mob/ Важно: если у вас просто одинокий хост без vCenter, используйте moref=XXX, без vm
-ssmoref Ссылка на снапшот вашей машины, ибо, как известно, одно дело читать данные просто с дисков, а другое — когда на вашем пути стоит снепшот. Или несколько снепшотов. Обязательный параметр(как и сам снепшот) для включённых машин.
-mode Параметр, указывающий режим работы с диском. Ссылается на VixDiskLib_ConnectEx. Доступные значения nbd, nbdssl, san и hotadd. Все они хорошо известны нашим пользователям.
-libdir Путь до папки с библиотеками. По умолчанию должен быть «C:\Program Files (x86)\Veeam\Backup Transport\x86\vddk_X_X» Если работать с standalone хостом, можно не указывать.
-thumb Появившийся в версии 6.0 обязательный параметр для указания отпечатка SSL сертификата. Без него работать не будет. Проще всего подсмотреть в браузере ;)
-initex configfile Путь до файла с конфигом для VixDiskLib_InitEx

Подробные логи по умолчанию пишутся в папку 
C:\Users\current user\AppData\Local\Temp\vmware-current user\vixDiskLib-####.log
Для беспроблемной жизни очень советую очищать эту папку после каждого запуска тестов в режимах san и hotadd. И закрывать окно с консолью (имеется в виду виндовое cmd, а не линуксовое). Это связано с особенностью работы функции VDDKEndAccess, которая не вызывается, если прекратить тест по Ctrl+C, и тестовые диски остаются висеть прицепленными в выбранной машине. 

Теперь, когда с общей теорией покончено, переходим к разделу

Практика


Общий синтаксис запуска выглядит как 

vixdisklibsample.exe command [options] diskPath

В простейшем случае мы можем подключиться к хосту, указав его имя, логин, пароль и путь до нужной машины.

C:\VDDK\bin>vixDiskLibSample.exe -info -host demo -user root -password secret [datastore1] test/test.vmdk

-info покажет DiskPath выбранного диска.

Если хост подключён к vCenter, надо добавить параметры -libdir и -vm. В случае VDDK>6.0 не забываем про -thumb

C:\VDDK\bin>vixDiskLibSample.exe -info -host demo -user Administrator -password secret -thumb "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00" -libdir "C:\Program Files (x86)\Veeam\Backup Transport\x86\vddk_X_X" -vm vmPath=Datastorage/vm/DemoVM "[datastore1] DemoVM/Demo.vmdk"


А дальше начинается самое интересное: указываем -mode и -ssmoref. Очень сильно рекомендую делать все тесты именно со снапшотом, чтобы случайно не испортить оригинальный диск. И помним: тест на запись — операция деструктивная! Он действительно пишет данные, а не симулирует процесс!

С другой стороны, запретить я вам тоже ничего не могу.

Итак, запускаем тест на запись в режиме Hotadd

C:\VDDK\bin>vixDiskLibSample.exe -writebench 1024 -host demo.local -user "demo\adm" -password "%TOPSECRET%" -vm "moref=vm-80380" -ssmoref "snapshot-82782" -thumb "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00"
-mode hotadd -libdir "C:\Program Files (x86)\Veeam\Backup Transport\x86\vddk_6_0" "[datastore1] test/test.vmdk"

appGlobals.port902VixDiskLib: Invalid configuration file parameter.  Failed to read configuration file.
Disk "[datastore1] test/test-000001.vmdk" is open using transport mode "hotadd".
ReadFlag  : 0
Processing 10240 buffers of 1048576 bytes.
Wrote 64 MBytes in 2699 msec (23 MBytes/sec)
Wrote 64 MBytes in 2667 msec (23 MBytes/sec)
Wrote 64 MBytes in 687 msec (93 MBytes/sec)
Wrote 64 MBytes in 608 msec (105 MBytes/sec)
Wrote 64 MBytes in 687 msec (93 MBytes/sec)
...
Wrote 64 MBytes in 795 msec (80 MBytes/sec)
Wrote 64 MBytes in 749 msec (85 MBytes/sec)
Wrote 64 MBytes in 1326 msec (48 MBytes/sec)
Wrote 64 MBytes in 2465 msec (25 MBytes/sec)
Wrote 64 MBytes in 2449 msec (26 MBytes/sec)
Wrote 10240 MBytes in 141040 msec (72 MBytes/sec)
Deleted directory C:\Users\ADMINI~1\AppData\Local\Temp\2\vmware-Administrator\4206be79-cfef-4175-51a5-6e7c0900591b-vm-80380\hotadd

Для SAN mode всё тоже самое, но надо учитывать, что для этого теста cmd надо запустить с правами администратора, иначе вы получите ошибки «You do not have access rights to this file» и «No path to device LVID».

А если вы хотите протестировать вариант восстановления в режиме Direct SAN, то надо указать фейковый UUID в ветке HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\VMware, Inc.\volatile\UUIDHost

Теперь попробуем запустить тест на скорость чтения в режиме nbd.

C:\VDDK\bin>vixDiskLibSample.exe -readbench 1024 -host demo.local -user "demo\adm" -password "%TOPSECRET%" -vm "moref=vm-80380" -ssmoref "snapshot-82782" -thumb "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00"  -ssmoref "snapshot-82782"
-mode nbd -libdir "C:\Program Files (x86)\Veeam\Backup Transport\x86\vddk_6_0" "[datastore1] test/test.vmdk"

appGlobals.port902VixDiskLib: Invalid configuration file parameter.  Failed to read configuration file.
Disk "[datastore1] test/test.vmdk" is open using transportmode "nbd".
ReadFlag  : 4
Processing 20480 buffers of 524288 bytes.
Read 64 MBytes in 2293 msec (27 MBytes/sec)
Read 64 MBytes in 2153 msec (29 MBytes/sec)
Read 64 MBytes in 1747 msec (36 MBytes/sec)
Read 64 MBytes in 2013 msec (31 MBytes/sec)
Read 64 MBytes in 2823 msec (22 MBytes/sec)
…

Если захотите дать настоящей нагрузки, смело запускайте -readbench или -writebench сразу для нескольких дисков. Но для этого вам понадобится VDDK 6.5 или 7.0

C:\VDDK\bin\vixDiskLibSample.exe" -readbench 1024 -host "10.0.0.1" -user "AD\user" -password "****" -vm "moref=vm-1" -ssmoref "snapshot-100" -thumb "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00" -mode san -libdir "C:\Program Files (x86)\Veeam\Backup Transport\x64\vddk_6_5" -initex "C:\VDDK60\initex.txt" "[Datastore01] VM/VM.vmdk" "[Datastore01] VM/VM_1.vmdk" "[Datastore01] VM/VM_2.vmdk" "[Datastore01] VM/VM_3.vmdk

И в завершение давайте посмотрим, какую информацию о виртуальных дисках мы можем получить с помощью -info

C:\VDDK\bin>vixDiskLibSample.exe -info -host demo.local -user "demo\adm" -password "%TOPSECRET%" -vm "moref=vm-80380"
-ssmoref "snapshot-82787" -thumb "00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00" -mode nbd -libdir "C:\Program Files (x86)\Veeam\Backup Transport\x86\vddk_6_0" "[datastore1] test/test.vmdk"

appGlobals.port902VixDiskLib: Invalid configuration file parameter.  Failed to read configuration file.
Disk "[datastore1] test/test.vmdk" is open using transport mode "nbd".
capacity          = 20971520 sectors
number of links   = 1
adapter type      = LsiLogic SCSI
BIOS geometry     = 0/0/0
physical geometry = 1305/255/63
Transport modes supported by vixDiskLib: file:san:hotadd:nbdssl:nbd

Кстати, если вдруг не хочется рисковать настоящими дисками от настоящих машин, их можно создать здесь же. Правда, через -create нельзя создать диск сразу на хосте, но тут нам на помощь приходит опция -clone. Параметр -cap задаёт размер в мегабайтах, а делать это уже удобнее на linux машине.

./vix-disklib-sample -create -cap 1024 newdisk.vmdk
./vix-disklib-sample -clone virtdisk.vmdk –host demo.local –user root –password TOP_SECRET newdisk.vmdk

На этом мой быстрый экскурс в мир широких возможностей VixDiskLibSample закончен. Да, местами утилита несколько дуболомна, а её вывод не слишком удобен. Однако вы всегда можете на её основе сделать нечто своё, что позволит вам элегантно решать свои задачи без изобретения велосипедов и использования невнятных прослоек.

И немного полезных ссылок в конце:

  • Любую версию VDDK можно скачать по этой ссылке. По умолчанию вам предложат 7.0, однако сверху можно переключиться хоть на 5.1
  • Многообразие наших КВ посвящённых возможным проблемам с VDDK.
Теги:
Хабы:
Если эта публикация вас вдохновила и вы хотите поддержать автора — не стесняйтесь нажать на кнопку
Всего голосов 5: ↑5 и ↓0+5
Комментарии0

Публикации

Информация

Сайт
veeam.com
Дата регистрации
Дата основания
Численность
1 001–5 000 человек
Местоположение
Швейцария

Истории