Неймовірно низька продуктивність диска 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.