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

    Когда мы сталкиваемся с неким программным продуктом, с которым нам предстоит взаимодействовать, сценарий взаимодействия мы вольны выбирать сами. Можно героически изобретать велосипед, а можно понадеяться, что авторы несколько лучше, чем мы, знают свой продукт, поэтому предоставляемый ими 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.
    Veeam Software
    Продукты для резервного копирования информации

    Комментарии 0

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

    Самое читаемое