Неймовірно низька продуктивність диска KVM (файли диска qcow2 + virtio)


27

У мене виникають серйозні проблеми з роботою диска під час налаштування гостя KVM. Використовуючи простий ddтест, розділ на хості, на якому знаходяться зображення qcow2 (дзеркальний масив RAID), пише понад 120 Мб / с , а мій гість записує від 0,5 до 3 Мб / с .

  • Гість налаштований на пару процесорів і 4G оперативної пам’яті і наразі не працює нічим іншим; це абсолютно мінімальна установка на даний момент.
  • Продуктивність перевіряється за допомогою time dd if=/dev/zero of=/tmp/test oflag=direct bs=64k count=16000.
  • Гість налаштований на використання virtio, але це, здається, не має значення для продуктивності.
  • Хост-розділи вирівняні на 4 Кб (і продуктивність хоста в будь-якому випадку хороша).
  • Використання кешування зворотного запису на дисках збільшує продуктивність, про яку повідомляється, але я вважаю за краще не використовувати її; навіть без цього продуктивність повинна бути набагато кращою, ніж ця.
  • Ведучий і гість мають Ubuntu 12.04 LTS, який постачається з qemu-kvm 1.0 + noroms-0ubuntu13 і libvirt 0.9.8-2ubuntu17.1.
  • У хості увімкнено планувальник терміну вводу-виводу, а у гостя - Noop.

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

Оновлення 1

І раптом, коли я повертаюся назад і тестую зараз, це 26,6 Мб / с; це більше схоже на те, що я очікував w / qcrow2. Я залишу питання на випадок, якщо хтось має якісь ідеї щодо того, що могло бути проблемою (і якщо вона загадково повернеться знову).

Оновлення 2

Я перестав турбуватися про продуктивність qcow2 і просто перерізав на LVM поверх RAID1 із неочищеними зображеннями, все ще використовуючи virtio, але встановивши кеш = 'none' та io = 'native' на дисководі. Виконання запису тепер є додатком. 135 Мб / с, використовуючи той самий базовий тест, що і вище, тому, здається, немає особливого сенсу з'ясовувати, в чому проблема, коли її можна так легко вирішити цілком.


Ви не згадали про використовувані дистрибутивні та програмні версії.
— діасний

Додано інформацію про версії.
— El Yobo

ах, як очікувалося, ubuntu ... якийсь шанс ви зможете відтворити це на Fedora?
— діасний

Сервер знаходиться в Німеччині, а зараз я в Мексиці, так що це може бути трохи хитро. І якби це раптом спрацювало ... Я все-таки не хотів би мати справу з сервером Fedora;) Я побачив кілька коментарів, які свідчать про те, що у систем Debian / Ubuntu було більше проблем, ніж у Fedora / CentOS для KVM там була проведена робота по розробці.
— El Yobo

моя річ точно. і в будь-якому випадку, якщо вам потрібна ОС сервера, вам потрібна RHEL, а не Ubuntu
— діасний

Відповіді:


14

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


3
Очевидно, але вони також не призначені бути такими ж дурними, як цифри, які я отримую.
— El Yobo

1
Більшість прикладів там показують подібну продуктивність з qcow2, що, здається, є значним покращенням порівняно зі старою версією. Сам сайт KVM з'явився на linux-kvm.org/page/Qcow2, який показує порівнянні часи для різних випадків.
— El Yobo

1
18:35 (qcow2) проти 8:48 (сирий) - це "порівнянні часи"?
— жіноча

1
Я переключив їх на резервні файли, підтримувані LVM, поверх RAID1, встановив іо-планувальник, щоб не було гостя, а термін - на хості, і тепер він пише 138 Мб / с. Я досі не знаю, що саме стало причиною того, що у qcow2 була швидкість 3 Мб / с, але, очевидно, це можна зробити вбік, використовуючи «сире», тому дякую, що ти штовхнув мене в цьому напрямку.
— El Yobo

1
Це не зовсім вірно - останні патчі у швидкості qemu qcow2 дуже багато! Ми майже нарівні.
— lzap

7

Як досягти найкращих показників за допомогою QCOW2 :

qemu-img create -f qcow2 -o preallocation=metadata,compat=1.1,lazy_refcounts=on imageXYZ

Найважливішим з них є попереднє розміщення, яке дає приємний стимул, на думку розробників qcow2. Зараз це майже нарівні з LVM ! Зауважте, що це зазвичай увімкнено у сучасних дистрибутивах Linux (Fedora 25+).

Також ви можете надати небезпечний кеш, якщо це не виробничий екземпляр (це небезпечно і не рекомендується, корисно лише для тестування):

<driver name='qemu' cache='unsafe' />

Деякі користувачі повідомляють, що ця конфігурація перемагає LVM / небезпечну конфігурацію в деяких тестах.

Для всіх цих параметрів потрібна остання версія QEMU 1.5+ ! Знову ж таки, більшість сучасних дистрибутивів мають це.


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

1
Як я вже говорив: якщо це не екземпляр виробництва (добре для тестування)
— lzap

Досить справедливо. Я пропустив її;)
— shodanshok

6

Я домігся чудових результатів для зображення qcow2 за допомогою цього параметра:

<driver name='qemu' type='raw' cache='none' io='native'/>

який відключає кеш-адрес гостя та вмикає AIO (Asynchronous IO). Виконання вашої ddкоманди дало мені 177 Мб / с на хості та 155 Мб / с на гості. Зображення розміщується на тому ж LVM-томі, де було проведено тест хоста.

Моя qemu-kvmверсія є 1.0+noroms-0ubuntu14.8і ядро 3.2.0-41-genericзі складу Ubuntu 12.04.2 LTS.


5
Ви встановили тип зображення qcow2 на "raw"?
— Олексій

Я думаю, що я скопіював старі записи, я вважаю, що переваги швидкості повинні бути однаковими для type='qcow2', чи можете ви перевірити це, перш ніж редагувати? У мене немає більше доступу до такої конфігурації - я перейшов до LXC за допомогою mount bindкаталогів, щоб досягти справжньої рідної швидкості у гостей.
— Гертас

2

Якщо ви запускаєте vms однією командою, для аргументів ви можете використовувати

kvm -drive file = / path_to.qcow2, if = virtio, cache = off <...>

Це отримало мене від 3 Мб / с до 70 МБ / с


2

У старих версіях Qemu / KVM бекенд Qcow2 був дуже повільним, коли він не був попередньо розміщений, тим більше, якщо він використовувався без включеного кешу зворотного запису. Дивіться тут для отримання додаткової інформації.

У останніх версіях Qemu файли Qcow2 набагато швидше, навіть якщо не використовується попереднє розміщення (або лише метадані). Однак обсяги LVM залишаються швидшими.

Зауваження про режими кешу: зворотна запис кеш є кращим способом, якщо не використовуючи гість без або з обмеженою можливостями підтримки кешу диска змиву / бар'єри. На практиці Win2000 + гості та будь-які параметри кріплення бар'єру Linux EXT4, XFS або EXT3 + - це штрафи. З іншого боку, кеш = небезпечний ніколи не повинен використовуватися у виробничих машинах, оскільки промивання кеш-пам’яті не розповсюджується на хост-систему. Несподіване відключення хоста може буквально знищити файлову систему гостя.


2

У мене виникло саме таке питання. У віртуальній машині RHEL7 у мене є цільове програмне забезпечення LIO iSCSI, до якого підключаються інші машини. Як базове сховище (backstore) для своїх iSCSI LUN я спочатку використовував LVM, але потім перейшов до файлів на основі зображень.

Довга історія: коли резервне зберігання додається до контролера зберігання virtio_blk (vda, vdb тощо) - продуктивність від клієнта iSCSI, який підключається до цілі iSCSI, була в моєму середовищі ~ 20 IOPS, з пропускною здатністю (залежно від розміру IO) ~ 2- 3 МіБ / с. Я змінив контролер віртуального диска у віртуальній машині на SCSI і я можу отримати 1000+ IOPS та пропускну здатність 100+ MiB / s від своїх клієнтів iSCSI.

<disk type='file' device='disk'>
   <driver name='qemu' type='qcow2' cache='none' io='native'/>
   <source file='/var/lib/libvirt/images/station1/station1-iscsi1-lun.img'/>
   <target dev='sda' bus='scsi'/>
   <address type='drive' controller='0' bus='0' target='0' unit='0'/>
</disk>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.