англійськафранцузькаіспанська

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 для найкращої продуктивності

ОПИС


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

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

БАЗА ВИМІРЮВАННЯ


Перш ніж вносити зміни до того, як ви використовуєте libguestfs, виконайте базові вимірювання.

Базовий рівень: Починаючи прилад
На розвантаженій машині час, скільки часу потрібно для запуску пристрою:

time guestfish -a /dev/null run

Виконайте цю команду кілька разів поспіль і відкиньте перші кілька запусків, щоб ви були
вимірювання типового випадку «гарячого кешу».

Пояснення

Ця команда запускає пристрій libguestfs на нульовому диску, а потім негайно закриває
це вниз. Коли ви вперше запустите команду, вона створить пристрій і кешує його
(зазвичай під /var/tmp/.guestfs-*). Подальші запуски мають повторно використовувати кешований пристрій.

Очікуваний результати

Ви повинні очікувати отримання часу менше 6 секунд. Якщо час ви бачите на
розвантажена машина знаходиться вище цього, то дивіться розділ «УСУНЕННЯ НЕПОЛАДОК ПОДАЛЬНОЇ ЕФЕКТИВНОСТІ»
нижче.

Базовий рівень: Виконання перевірка of a гість
Для цього тесту вам знадобиться вивантажена машина і принаймні один справжній гість або образ диска.
Якщо ви плануєте використовувати libguestfs лише для X гостей (наприклад, X = Windows), то використовуйте
Гість X тут був би найбільш доречним. Якщо ви плануєте запустити libguestfs проти
поєднання гостей, а потім використовуйте суміш гостей для тестування тут.

Час, скільки часу потрібно для перевірки та встановлення дисків гостя. Використовувати
перша команда, якщо ви будете використовувати образи дисків, і друга команда, якщо ви будете використовувати
за допомогою libvirt.

час guestfish --ro -a disk.img -i вихід

час guestfish --ro -d Ім'я гостя -i вихід

Виконайте команду кілька разів поспіль і відкиньте перші кілька запусків, щоб ви були
вимірювання типового випадку «гарячого кешу».

Пояснення

Ця команда запускає пристрій libguestfs на названому образі диска або libvirt guest,
виконує його перевірку libguestfs (див. «ПЕРЕВІРКА» в guestfs(3)), сідає на гостя
дисків, потім відкидає всі ці результати та вимикається.

Коли ви вперше запустите команду, вона створить пристрій і кешує його (зазвичай
при /var/tmp/.guestfs-*). Подальші запуски мають повторно використовувати кешований пристрій.

Очікуваний результати

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

РОЗУМІННЯ THE ПРИЛАД І КОЛИ IT IS ВСТРОЕНИЙ/КЕШ


Коли ви вперше використовуєте libguestfs, він створить і кешує пристрій. Це зазвичай
in /var/tmp/.guestfs-*, якщо в цьому випадку ви не встановили $TMPDIR або $LIBGUESTFS_CACHEDIR
він буде в цьому тимчасовому каталозі.

Додаткову інформацію про те, як сконструйовано прилад, див. у розділі «Прилади SUPERMIN».
супермін(1).

Кожного разу, коли запускається libguestfs, він перевіряє, чи немає файлів хосту, які використовуються пристроєм
змінився. Якщо такі є, то прилад відновлюється. Зазвичай це відбувається, коли пакет
встановлюється або оновлюється на хості (наприклад, за допомогою таких програм, як "yum" або "apt-get"). The
Причиною реконструкції пристрою є безпека: нова програма, яка була
встановлений може містити виправлення безпеки, тому ми хочемо включити виправлену програму в файл
прилад автоматично.

Це наслідки продуктивності:

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

· Якщо ви не використовуєте стаціонарний пристрій, майте на увазі, що оновлення програмного забезпечення на хості призведе до
одноразова перебудова пристрою.

· / var / tmp (або $TMPDIR, $LIBGUESTFS_CACHEDIR) має бути на швидкому диску та мати багато
місця для пристрою.

ВИКОРИСТАННЯ A ФІКСОВАНО ПРИЛАД


Щоб повністю контролювати, коли пристрій буде виготовлено, ви можете створити стаціонарний пристрій. Це
пристрій має зберігатися на швидкому локальному диску.

Щоб створити пристрій, виконайте команду:

libguestfs-make-fixed-appliance

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

Потім встановіть $LIBGUESTFS_PATH (і переконайтеся, що ця змінна середовища встановлена ​​у вашому libguestf
програми), або змініть свою програму, щоб вона називала "guestfs_set_path". Наприклад:

експорт LIBGUESTFS_PATH=/usr/local/lib/guestfs/appliance

Тепер ви можете запускати програми libguestfs, інструменти virt, guestfish тощо. Програми
використовуватиме ваш стаціонарний пристрій і ніколи не буде створювати, перебудовувати чи кешувати свої власні
прилад.

(Для детальної інформації з цього приводу див.: libguestfs-make-fixed-appliance(1)).

продуктивність of фіксованою прилад
Під час нашого тестування ми не виявили, що використання стаціонарного приладу дало будь-які вимірювані показники
покращення продуктивності, навіть якщо пристрій знаходився в пам’яті (тобто увімкнено / dev / shm).
Однак варто враховувати два моменти:

1. Використання фіксованого пристрою заважає libguestfs коли-небудь відновлювати пристрій, тобто
що libguestfs матиме більш передбачуваний час запуску.

2. Прилад завантажується на вимогу. Простий тест, наприклад:

time guestfish -a /dev/null run

не завантажує дуже багато приладу. Справжня програма libguestfs з використанням складних
Виклики API завантажують набагато більше пристрою. Можливість зберігати
пристрій у визначеному місці робить продуктивність більш передбачуваною.

ЗНИЖЕННЯ THE НОМЕР OF TIMES THE ПРИЛАД IS ЗАПУСК


На сьогоднішній день найефективнішим, хоча і не завжди найпростішим способом досягнення хорошої продуктивності є
щоб переконатися, що пристрій запускається мінімальну кількість разів. Це, мабуть, буде
передбачити зміну вашої програми libguestf.

Спробуйте викликати "guestfs_launch" щонайбільше один раз для кожної цільової віртуальної машини або образу диска.

Замість використання окремого екземпляра риба-гость(1) щоб внести ряд змін до
того самого гостя, використовуйте один екземпляр guestfish та/або використовуйте guestfish --послухай варіант.

Розгляньте можливість написання вашої програми як демона, який тримає гостя відкритим під час створення серії
змін. Або розмістіть усі операції, які ви хочете виконати, перш ніж відкрити гостя.

Ви також можете спробувати додати диски від кількох гостей до одного пристрою. Перш ніж спробувати
при цьому зверніть увагу на наступні моменти:

1. Додавання кількох гостей до одного пристрою є проблемою безпеки, оскільки це може дозволити одному
Гість, щоб заважати дискам іншого гостя. Робіть це, тільки якщо ви довіряєте всьому
гостей, або якщо ви можете згрупувати гостей за довірою.

2. Існує жорстке обмеження на кількість дисків, які можна додати до одного пристрою. Телефонуйте
"guestfs_max_disks" в guestfs(3), щоб отримати цю межу. Для отримання додаткової інформації див
«МЕЖИ» в guestfs(3).

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

virt-df(1) за замовчуванням додає кілька дисків, тому вихідним кодом цієї програми буде a
гарне місце для початку.

СКОРОЧЕННЯ THE ЧАС ВІДПОВІСТИ ДЛЯ ІНСПЕКЦІЯ 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 ++ ++
| * |
| |
s | |
9 ++ ++
е | |
| * |
c | |
8 ++ * ++
o | * |
| |
n 7 ++ ++
| * |
d | * |
| |
s 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(time);

підтест {
my $g = Sys::Guestfs->new;
$g->add_drive_ro ("/dev/null");
$g->запуск ();

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

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

# Завантажте все в кеш.
тест (); тест (); тест ();

для моїх $nr_threads (1..20) {
мій $start_t = час ();
мої @threads;
foreach (1..$nr_threads) {
push @threads, threads->create (\&test)
}
foreach (@threads) {
$_->приєднатися ();
якщо (мій $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 РЕЖИМ КОРИСТУВАЧІВ» у guestfs(3)). Цей розділ робить деякі
загальні зауваження щодо цього бекенда, але це так дуже доцільно виміряти своє
навантаження під UML, а не довіра коментарям чи інтуїції.

· UML зазвичай виконує те ж саме або трохи повільніше, ніж KVM, на baremetal.

· Однак UML часто виконує те саме під час віртуалізації, що й на baremetal,
тоді як KVM може працювати набагато повільніше під час віртуалізації (оскільки апаратне прискорення virt
недоступний).

· Завантаження та завантаження в UML у 10 разів повільніше, ніж у KVM. Libguestfs надсилає
ці дані через емульований послідовний порт UML, який набагато менш ефективний, ніж KVM
віртіо-серійний.

· UML не вистачає деяких функцій (наприклад, підтримки qcow2), тому він може бути не застосовним взагалі.

Деякі фактичні цифри див.
http://rwmj.wordpress.com/2013/08/14/performance-of-user-mode-linux-as-a-libguestfs-backend/#content

ВИРІШЕННЯ ПРОБЛЕМ БІДНО ДІЯЛЬНОСТІ


Забезпечувати апаратні засоби віртуалізації 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: launch: program=guestfish
0.000134 libguestfs: запуск: версія=1.29.31fedora=23,release=2.fc23,libvirt
0.000044 libguestfs: запуск: бекенд зареєстрований: unix
0.000035 libguestfs: запуск: бекенд зареєстрований: uml
0.000035 libguestfs: запуск: бекенд зареєстрований: libvirt
0.000032 libguestfs: запуск: бекенд зареєстрований: прямий
0.000030 libguestfs: launch: backend=libvirt
0.000031 libguestfs: запуск: tmpdir=/tmp/libguestfsw18rBQ
0.000029 libguestfs: launch: umask=0002
0.000031 libguestfs: launch: euid=1000
0.000030 libguestfs: версія libvirt = 1002012 (1.2.12)
[і т.д.]

Позначки часу – це секунди (поступово від попереднього рядка).

ДЕТАЛІ ЧАСИ ВИКОРИСТАННЯ SYSTEMTAP


Ви можете використовувати SystemTap (степ(1)), щоб отримати детальні часи з програм libguestfs.

Збережіть наступний сценарій як time.stap:

глобальний останній;

функція display_time () {
зараз = gettimeofday_us ();
дельта = 0;
якщо (останнє > 0)
дельта = зараз - остання;
останній = зараз;

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

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

/* Відображати всі виклики статичних маркерів. */
процес зондування ("/ Usr / Бібліотека*/libguestfs.so.0")
.provider("guestfs").mark("*") ? {
час_відображення();
printf ("\t%s %s\n", $$name, $$parms);
}

/* Відображати всі виклики функцій guestfs_*. */
процес зондування ("/ Usr / Бібліотека*/libguestfs.so.0")
.function("guestfs_[az]*") ? {
час_відображення();
printf ("\t%s %s\n", probefunc(), $$parms);
}

Запустіть його як root в одному вікні:

# stap time.stap
готовий

Він друкує "готовий", коли SystemTap завантажить програму. Запустіть програму libguestfs,
guestfish або інструмент virt в іншому вікні. Наприклад:

$ guestfish -a /dev/null запуск

У вікні переходу ви побачите велику кількість результатів із зазначенням часу, затраченого на кожен
показаний крок (мікросекунди в дужках). Наприклад:

xxxx (+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): start_start
[і т.д.]

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

ДЕТАЛІ ВІДМОВЛЕННЯ ВИКОРИСТАННЯ GDB


Ви можете підключити BIOS/ядро пристрою за допомогою gdb. Якщо ти знаєш, що робиш,
це може бути корисним способом діагностики регресії завантаження.

По-перше, ви повинні змінити qemu, щоб він працював з параметрами "-S" і "-s". Ці варіанти
змушує qemu зупинятися під час завантаження та дозволяти вам підключити налагоджувач. Прочитайте qemu(1) для подальшого
інформації. Libguestfs кілька разів викликає qemu (для сканування виводу довідки тощо)
і вам потрібно лише остаточний виклик qemu, щоб використовувати ці параметри, тому використовуйте обгортку qemu
такий сценарій:

#!/ bin / bash -

# Встановіть, щоб вказувати на справжній двійковий файл qemu.
qemu=/usr/bin/qemu-kvm

if [ "$1" != "-global" ]; тоді
# Вихід довідки сканування тощо.
exec $qemu "$@"
ще
# Дійсно працює qemu.
exec $qemu -S -s "$@"
fi

Тепер запустіть guestfish або інший інструмент libguestfs з обгорткою qemu (див. «QEMU WRAPPERS» у
guestfs(3) щоб зрозуміти, що це робить):

LIBGUESTFS_HV=/шлях/до/qemu-wrapper guestfish -a /dev/null -v запустити

Це має призупинитися відразу після запуску qemu. В іншому вікні підключіть до qemu за допомогою gdb:

$gdb
(gdb) набір архітектури i8086
Передбачається, що цільовою архітектурою є i8086
(gdb) цільовий віддалений :1234
Віддалене налагодження за допомогою :1234
0x0000fff0 в ?? ()
(gdb) продовж

На цьому етапі ви можете використовувати стандартні методи gdb, напр. натиснути «^C», щоб перервати завантаження
і "bt" отримують трасування стека, встановлення точок зупину тощо
BIOS і в ядрі Linux вам захочеться змінити архітектуру назад на 32 або 64
біт

Використовуйте guestfs-performance онлайн за допомогою служб onworks.net


Безкоштовні сервери та робочі станції

Завантажте програми для Windows і Linux

  • 1
    facetracknoir
    facetracknoir
    Модульна програма хедтрекінгу, яка
    підтримує кілька фейстрекерів, фільтрів
    і протоколи гри. Серед трекерів
    це SM FaceAPI, AIC Inercial Head
    Трекер ...
    Завантажити facetracknoir
  • 2
    PHP QR-код
    PHP QR-код
    PHP QR-код з відкритим вихідним кодом (LGPL)
    бібліотека для генерації QR-коду,
    2-вимірний штрих-код. На основі
    бібліотека libqrencode C, надає API для
    створення QR-коду barc...
    Завантажте QR-код PHP
  • 3
    freeciv
    freeciv
    Freeciv - це безкоштовна покрокова програма
    багатокористувацька стратегічна гра, в якій кожен
    гравець стає лідером a
    цивілізації, що бореться за отримання с
    кінцева мета: стати...
    Завантажити Freeciv
  • 4
    Зозуля Пісочниця
    Зозуля Пісочниця
    Cuckoo Sandbox використовує компоненти для
    стежити за поведінкою зловмисного програмного забезпечення в a
    Середовище пісочниці; ізольовано від
    решта системи. Він пропонує автоматизовані
    аналіз про...
    Завантажити Cuckoo Sandbox
  • 5
    LMS-YouTube
    LMS-YouTube
    Відтворення відео YouTube на LMS (перенесення
    Triode для YouTube API v3) Це
    додаток, який також можна отримати
    від
    https://sourceforge.net/projects/lms-y...
    Завантажте LMS-YouTube
  • 6
    Фонд презентацій Windows
    Фонд презентацій Windows
    Фонд презентацій Windows (WPF)
    є фреймворком інтерфейсу користувача для створення Windows
    настільні програми. WPF підтримує a
    широкий набір розробки додатків
    особливості ...
    Завантажити Windows Presentation Foundation
  • Детальніше »

Команди Linux

Ad