АнглийскийФранцузскийИспанский

Ad


Значок OnWorks

guestfs-performance - Онлайн в облаке

Запускайте guestfs-performance в бесплатном хостинг-провайдере OnWorks через Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS

Это команда guestfs-performance, которую можно запустить в бесплатном хостинг-провайдере OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.

ПРОГРАММА:

ИМЯ


guestfs-performance - разработка libguestfs для максимальной производительности

ОПИСАНИЕ


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

Охвачены три основные области. Libguestfs запускает устройство (небольшой дистрибутив Linux)
внутри qemu / KVM. Первые две области: минимизация времени, необходимого для начала этого
прибор, а также количество запусков прибора. Третья область - это
сокращение времени, необходимого для проверки ВМ.

БАЗОВЫЙ Измерения


Прежде чем вносить изменения в способ использования libguestfs, произведите базовые измерения.

Исходный уровень: Начало домен прибор
На ненагруженной машине рассчитайте время, необходимое для запуска устройства:

время guestfish -a / dev / null run

Выполните эту команду несколько раз подряд и отбросьте первые несколько запусков, чтобы
измерение типичного случая "горячего кэша".

объяснение

Эта команда запускает устройство libguestfs на нулевом диске, а затем немедленно закрывает
это вниз. При первом запуске команды она создаст устройство и кэширует его.
(обычно под /var/tmp/.guestfs-*). Последующие запуски должны повторно использовать кэшированное устройство.

Ожидаемый Результаты

Вы должны ожидать, что время будет меньше 6 секунд. Если время, которое вы видите на
незагруженная машина находится над этим, затем см. раздел «УСТРАНЕНИЕ НЕИСПРАВНОСТЕЙ»
внизу.

Исходный уровень: Выполнение проверка of a гость
Для этого теста вам понадобится незагруженная машина и хотя бы один настоящий гостевой образ или образ диска.
Если вы планируете использовать libguestfs только для гостей X (например, X = Windows), то используйте
Х-гость здесь был бы наиболее подходящим. Если вы планируете запустить libguestfs против
смесь гостей, затем используйте смесь гостей для тестирования здесь.

Посчитайте, сколько времени нужно на выполнение проверки и монтирования дисков гостя. Использовать
первая команда, если вы будете использовать образы дисков, и вторая команда, если вы будете
используя libvirt.

время guestfish --ro -a disk.img -i exit

время guestfish --ro -d GuestName -i exit

Выполните команду несколько раз подряд и отбросьте первые несколько запусков, чтобы
измерение типичного случая "горячего кэша".

объяснение

Эта команда запускает устройство libguestfs на указанном образе диска или гостевой системе libvirt,
выполняет проверку libguestfs на нем (см. «ПРОВЕРКА» в гость(3)), монтирует гостевой
дисков, затем отбрасывает все эти результаты и завершает работу.

При первом запуске команды создается устройство и кэшируется (обычно
под /var/tmp/.guestfs-*). Последующие запуски должны повторно использовать кэшированное устройство.

Ожидаемый Результаты

Вы должны ожидать, что время на ≤ 5 секунд больше, чем измеренное в первом базовом показателе.
тест выше. (Например, если первый базовый тест был выполнен за 5 секунд, то этот тест
должен работать ≤ 10 секунд).

ПОНИМАНИЕ ПРИБОР И КОГДА IT IS СОЗДАНО / КЕШЕНО


При первом использовании libguestfs он соберет и кэширует устройство. Это обычно
in /var/tmp/.guestfs-*, если вы не установили $ TMPDIR или $ LIBGUESTFS_CACHEDIR, и в этом случае
он будет во временном каталоге.

Для получения дополнительной информации о конструкции устройства см. «SUPERMIN APPLIANCES» в
супермин(1).

Каждый раз, когда запускается libguestfs, он проверяет, что ни в одном из файлов хоста, используемых устройством, нет
измененный. Если есть, то прибор восстанавливают. Обычно это происходит, когда пакет
устанавливается или обновляется на хосте (например, с помощью таких программ, как «yum» или «apt-get»). В
причина для реконструкции прибора - безопасность: новая программа, которая была
установленная программа может содержать исправление безопасности, поэтому мы хотим включить исправленную программу в
прибор автоматически.

Это последствия для производительности:

· Процесс сборки (или восстановления) кэшированного устройства выполняется медленно, и вы можете
Избегайте этого, используя стационарный прибор (см. ниже).

· Если не используется стационарное устройство, имейте в виду, что обновление программного обеспечения на хосте приведет к
одноразовый ремонт прибора.

· / Вар / TMP (или $ TMPDIR, $ LIBGUESTFS_CACHEDIR) должны быть на быстром диске и иметь много
места для устройства.

С ПОМОЩЬЮ A FIXED ПРИБОР


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

Чтобы собрать устройство, выполните команду:

libguestfs-make-фиксированное устройство

замена " "с именем каталога, в котором будет храниться устройство
(обычно вы называете подкаталог, например: / usr / локальный / lib / guestfs / устройство or
/ dev / shm / устройство).

Затем установите $ LIBGUESTFS_PATH (и убедитесь, что эта переменная среды установлена ​​в вашем libguestfs
program) или измените вашу программу так, чтобы она вызывала "guestfs_set_path". Например:

экспорт LIBGUESTFS_PATH = / usr / local / lib / guestfs / устройство

Теперь вы можете запускать программы libguestfs, инструменты virt, guestfish и т. Д. Как обычно. Программы
будут использовать ваше фиксированное устройство и никогда не будут строить, перестраивать или кэшировать свои собственные
прибор.

(Подробную информацию по этому вопросу см .: libguestfs-make-фиксированное устройство(1 г.)).

Перфоманс of домен фиксированной прибор
В нашем тестировании мы не обнаружили, что использование фиксированного устройства давало измеримые
выигрыш в производительности, даже если устройство было расположено в памяти (т. е. на / dev / shm).
Однако следует учитывать два момента:

1. Использование фиксированного устройства не позволяет libguestfs перестроить устройство, то есть
что libguestfs будет иметь более предсказуемое время запуска.

2. Машина загружается по запросу. Простой тест, например:

время guestfish -a / dev / null run

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

СОКРАЩЕНИЯ НОМЕР OF TIMES ПРИБОР IS СТАРТОВАЛ


Безусловно, самый эффективный, хотя и не всегда самый простой способ добиться хорошей производительности - это
чтобы прибор запускался минимальное количество раз. Это, вероятно, будет
потребуется изменить ваше приложение libguestfs.

Попробуйте вызвать "guestfs_launch" не более одного раза для каждой целевой виртуальной машины или образа диска.

Вместо использования отдельного экземпляра рыба-гость(1) внести серию изменений в
того же гостя, используйте единственный экземпляр guestfish и / или используйте guestfish --Слушать опцию.

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

Вы также можете попробовать добавить диски от нескольких гостей к одному устройству. Перед попыткой
при этом обратите внимание на следующие моменты:

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

2. Существует жесткое ограничение на количество дисков, которые вы можете добавить к одному устройству. Вызов
"guestfs_max_disks" в гость(3) чтобы получить этот предел. Для получения дополнительной информации см.
"LIMITS" в гость(3).

3. Использование libguestfs таким способом сложно. Диски могут иметь неожиданное взаимодействие: для
Например, если два гостя используют один и тот же UUID для файловой системы (потому что они были клонированы),
или иметь группы томов с тем же именем (но см. "guestfs_lvm_set_filter").

вирт-дф(1) по умолчанию добавляет несколько дисков, поэтому исходный код для этой программы будет
хорошее место для начала.

укорачивание ВРЕМЯ ПРИНЯТЬ Для ИНСПЕКЦИЯ OF виртуальные машины


Главный совет очевиден: не проводите осмотр (который стоит дорого), если он вам не нужен.
результаты.

Если вы ранее выполнили проверку гостя, то можно безопасно кэшировать и
повторно использовать результаты с прошлого раза.

Некоторые диски вообще не нужно проверять: например, если вы создаете диск
образ, или если образ диска не является виртуальной машиной, или если образ диска имеет известную структуру.

Даже когда требуется базовая проверка ("guestfs_inspect_os"), дополнительная проверка
операций можно избежать:

· Монтирование дисков необходимо только для получения дополнительной информации о файловой системе.

· Список приложений ("guestfs_inspect_list_applications") - дорогостоящая операция
в Linux, но почти бесплатно в Windows.

· Создание значка гостя ("guestfs_inspect_get_icon") дешево в Linux, но дорого
в Windows.

ПАРАЛЛЕЛЬНО ТЕХНИКА


Устройства Libguestfs в основном привязаны к вводу-выводу, и вы можете запускать несколько устройств в
параллельно. При наличии достаточного количества свободной памяти разница в
запуск 1 устройства против N устройств параллельно.

На 2-ядерном (4-поточном) ноутбуке с 16 ГБ ОЗУ с помощью (не особо реалистичного) теста
Сценарий Perl ниже, следующий график показывает отличную масштабируемость при запуске между 1
и 20 приборов параллельно:

12 ++ --- + ---- + ---- + ---- + ----- + ---- + ---- + ---- + ---- + - - ++
+ + + + + + + + + + *
| |
| * |
11++++
| |
| |
| * * |
10++++
| * |
| |
с | |
9++++
е | |
| * |
с | |
8 ++ * ++
о | * |
| |
п 7 ++ ++
| * |
д | * |
| |
с 6 ++ ++
| * * |
| * |
| |
5++++
| |
| * |
| * * |
4++++
| |
| |
+ * * * + + + + + + + +
3 ++ - * - + ---- + ---- + ---- + ----- + ---- + ---- + ---- + ---- + - - ++
0 2 4 6 8 10 12 14 16 18 20
количество параллельных устройств

Можно запустить параллельно более 20 устройств, но если вы используете
libvirt, то вы должны знать, что из коробки libvirt ограничивает количество
клиентские подключения к 20.

Приведенный ниже простой сценарий Perl был использован для сбора данных для графика выше, но есть
гораздо больше информации по этому вопросу, включая более сложные тестовые сценарии и графики,
доступны в следующих сообщениях блога:

http://rwmj.wordpress.com/2013/02/25/multiple-libguestfs-appliances-in-parallel-part-1/
http://rwmj.wordpress.com/2013/02/25/multiple-libguestfs-appliances-in-parallel-part-2/
http://rwmj.wordpress.com/2013/02/25/multiple-libguestfs-appliances-in-parallel-part-3/
http://rwmj.wordpress.com/2013/02/25/multiple-libguestfs-appliances-in-parallel-part-4/

#!/ usr / bin / env Perl

использовать строго;
использовать нити;
использовать предупреждения;
используйте Sys :: Guestfs;
используйте Time :: HiRes qw (время);

подтест {
мой $ g = Sys :: Guestfs-> новый;
$ g-> add_drive_ro ("/ dev / null");
$ g-> запуск ();

# Вы можете добавить сюда некоторую работу для libguestfs.

$ g-> закрыть ();
}

# Поместить все в кеш.
тестовое задание (); тестовое задание (); тестовое задание ();

для моих $ nr_threads (1..20) {
мой $ start_t = время ();
мои @ нитки;
foreach (1 .. $ nr_threads) {
нажмите @threads, threads-> create (\ & test)
}
Еогеасп (@threads) {
$ _-> соединение ();
if (my $ err = $ _-> error ()) {
die "сбой запуска с потоками $ nr_threads: $ err"
}
}
мой $ end_t = время ();
printf ("% d% .2f \ n", $ nr_threads, $ end_t - $ start_t);
}

С ПОМОЩЬЮ ПОЛЬЗОВАТЕЛЬСКИЙ РЕЖИМ LINUX


Начиная с libguestfs 1.24, появилась возможность использовать бэкэнд Linux в пользовательском режиме (uml).
вместо KVM (см. "ЗАДНЯЯ ЧАСТЬ LINUX РЕЖИМА ПОЛЬЗОВАТЕЛЯ" в гость(3)). Этот раздел делает некоторые
общие замечания об этом бэкэнде, но это очень рекомендуемый измерить свой собственный
рабочая нагрузка в рамках UML, а не доверие комментариям или интуиции.

· UML обычно работает так же или немного медленнее, чем KVM, на baremetal.

· Однако при виртуализации UML часто выполняет то же самое, что и на baremetal,
тогда как KVM может работать намного медленнее при виртуализации (поскольку аппаратное ускорение
не доступен).

· Загрузка и загрузка в UML в 10 раз медленнее, чем в KVM. Libguestfs отправляет
эти данные через эмулированный последовательный порт UML, который намного менее эффективен, чем у KVM
виртио-серийный.

· В UML отсутствуют некоторые функции (например, поддержка qcow2), поэтому он может быть вообще неприменим.

Для некоторых реальных цифр см:
http://rwmj.wordpress.com/2013/08/14/performance-of-user-mode-linux-as-a-libguestfs-backend/# Содержание

УСТРАНЕНИЕ БЕДНЫЕ Арбитраж трафика


Обеспечивать аппаратные средства виртуализации is доступен
Используйте / proc / cpuinfo и эта страница:

http://virt-tools.org/learning/check-hardware-virt/

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

Аппаратное обеспечение virt обычно недоступно внутри виртуальных машин, и libguestfs будет медленно работать внутри.
другая виртуальная машина, что бы вы ни делали. Вложенная виртуализация плохо работает в нашем
опыт, и, конечно, не может заменить libguestfs на baremetal.

Обеспечивать KVM is доступен
Убедитесь, что KVM включен и доступен пользователю, который будет запускать libguestfs. Должно
будьте осторожны, устанавливая разрешения 0666 на / dev / kvm и большинство дистрибутивов сейчас это делают.

Процессоры в избежать
Избегайте процессоров, у которых нет аппаратной виртуализации, и некоторых процессоров, которые
просто очень медленно (отличный пример - AMD Geode).

Xen dom0
В Xen dom0 - это виртуальная машина, поэтому аппаратная виртуализация недоступна.

ДОП тайминги С ПОМОЩЬЮ TS


Использовать ts(1) команда (из moreutils) для отображения подробных таймингов:

$ guestfish -a / dev / null run -v | & ts -i '% .s'
0.000022 libguestfs: запуск: программа = guestfish
0.000134 libguestfs: запуск: версия = 1.29.31fedora = 23, выпуск = 2.fc23, libvirt
0.000044 libguestfs: запуск: бэкэнд зарегистрирован: unix
0.000035 libguestfs: запуск: бэкэнд зарегистрирован: uml
0.000035 libguestfs: запуск: бэкэнд зарегистрирован: libvirt
0.000032 libguestfs: запуск: бэкэнд зарегистрирован: прямой
0.000030 libguestfs: запуск: backend = libvirt
0.000031 libguestfs: запуск: tmpdir = / tmp / libguestfsw18rBQ
0.000029 libguestfs: запуск: umask = 0002
0.000031 libguestfs: запуск: euid = 1000
0.000030 libguestfs: версия libvirt = 1002012 (1.2.12)
[и т.д]

Метки времени - секунды (постепенно, начиная с предыдущей строки).

ДОП тайминги С ПОМОЩЬЮ СИСТЕМТАП


Вы можете использовать SystemTap (НТКГ(1)), чтобы получить подробные тайминги из программ libguestfs.

Сохраните следующий скрипт как время.stap:

глобальный последний;

функция display_time () {
сейчас = gettimeofday_us ();
дельта = 0;
если (последний> 0)
delta = now - последняя;
последний = сейчас;

printf ("% d (+% d):", теперь, дельта);
}

зонд начинается {
последний = 0;
printf ("готов \ п");
}

/ * Показать все вызовы статических маркеров. * /
зондировать процесс ("/ USR / Lib* / libguestfs.so.0 ")
.provider ("guestfs"). mark ("*")? {
display_time ();
printf ("\ t% s% s \ n", $$ name, $$ parms);
}

/ * Показать все вызовы функций guestfs_ *. * /
зондировать процесс ("/ USR / Lib* / libguestfs.so.0 ")
.function ("guestfs_ [az] *")? {
display_time ();
printf ("\ t% s% s \ n", probefunc (), $$ parms);
}

Запускаем его как root в одном окне:

# пауза time.stap
готовый

Он печатает "готово", когда SystemTap загружает программу. Запустите вашу программу libguestfs,
guestfish или инструмент virt в другом окне. Например:

$ guestfish -a / dev / null запустить

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

хххх (+0): guestfs_create
xxxx (+29): guestfs_set_pgroup g = 0x17a9de0 pgroup = 0x1
xxxx (+9): guestfs_add_drive_opts_argv g = 0x17a9de0 [...]
xxxx (+8): guestfs_int_safe_strdup g=0x17a9de0 str=0x7f8a153bed5d
xxxx (+19): guestfs_int_safe_malloc g = 0x17a9de0 nbytes = 0x38
xxxx (+5): guestfs_int_safe_strdup g=0x17a9de0 str=0x17a9f60
xxxx (+10): guestfs_launch g = 0x17a9de0
xxxx (+4): запуск_запуска
[и т.д]

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

ДОП ОТЛАДКА С ПОМОЩЬЮ GDB


Вы можете подключиться к BIOS / ядру устройства с помощью gdb. Если ты знаешь, что делаешь,
это может быть полезным способом диагностики регрессии загрузки.

Во-первых, вы должны изменить qemu, чтобы он работал с параметрами «-S» и «-s». Эти варианты
заставляет qemu останавливаться при загрузке и позволяет вам подключить отладчик. Читать кему(1) для дальнейшего
Информация. Libguestfs несколько раз вызывает qemu (для просмотра вывода справки и т. Д.)
и вы хотите, чтобы эти параметры использовались только при последнем вызове qemu, поэтому используйте оболочку qemu
сценарий вроде этого:

#!/ bin / bash -

# Установите это так, чтобы указывать на настоящий двоичный файл qemu.
qemu = / usr / bin / qemu-kvm

если ["$ 1"! = "-глобальный"]; тогда
# Сканирование вывода справки и т. Д.
exec $ qemu "$ @"
еще
# Действительно запущен qemu.
exec $ qemu -S -s "$ @"
fi

Теперь запустите guestfish или другой инструмент libguestfs с оболочкой qemu (см. «QEMU WRAPPERS» в
гость(3) чтобы понять, что это делает):

LIBGUESTFS_HV = / путь / к / qemu-wrapper guestfish -a / dev / null -v run

Это должно быть приостановлено сразу после запуска qemu. В другом окне подключитесь к qemu с помощью gdb:

$ ГБД
(gdb) установить архитектуру i8086
Предполагается, что целевая архитектура - i8086.
(gdb) целевой пульт: 1234
Удаленная отладка с использованием: 1234
0x0000fff0 в ?? ()
(GDB) продолжение

На этом этапе вы можете использовать стандартные методы GDB, например. нажав "^ C", чтобы прервать загрузку
и "bt" получают трассировку стека, устанавливают точки останова и т. д. Обратите внимание, что когда вы прошли
BIOS и ядро ​​Linux, вы захотите изменить архитектуру обратно на 32 или 64
немного.

Используйте guestfs-performance онлайн с помощью сервисов onworks.net


Бесплатные серверы и рабочие станции

Скачать приложения для Windows и Linux

  • 1
    фейстрекнуар
    фейстрекнуар
    Модульная программа отслеживания головы, которая
    поддерживает несколько фейс-трекеров, фильтры
    и игровые протоколы. Среди следопытов
    являются SM FaceAPI, инерционная головка AIC
    Трекер ...
    Скачать фейстрекнуар
  • 2
    QR-код PHP
    QR-код PHP
    PHP QR-код с открытым исходным кодом (LGPL)
    библиотека для генерации QR-кода,
    2-х мерный штрих-код. На основе
    Библиотека libqrencode C, предоставляет API для
    создание штрих-кода QR-кода ...
    Загрузите QR-код PHP
  • 3
    Фрицив
    Фрицив
    Freeciv - это бесплатная пошаговая
    многопользовательская стратегическая игра, в которой каждый
    игрок становится лидером
    цивилизация, борющаяся за получение
    конечная цель: стать ...
    Скачать Freeciv
  • 4
    Песочница с кукушкой
    Песочница с кукушкой
    Cuckoo Sandbox использует компоненты для
    контролировать поведение вредоносного ПО в
    Среда песочницы; изолированы от
    остальная часть системы. Он предлагает автоматизированный
    анализ о...
    Скачать Песочницу с кукушкой
  • 5
    LMS-YouTube
    LMS-YouTube
    Воспроизведение видео с YouTube в LMS (портирование
    Triode's to YouTbe API v3) Это
    приложение, которое также можно получить
    от
    https://sourceforge.net/projects/lms-y...
    Скачать LMS-YouTube
  • 6
    Windows Presentation Foundation
    Windows Presentation Foundation
    Фонд презентаций Windows (WPF)
    это UI-фреймворк для создания Windows
    настольные приложения. WPF поддерживает
    широкий набор приложений для разработки
    функции...
    Скачать Windows Presentation Foundation
  • Больше »

Команды Linux

Ad