KVM: Які функції процесора покращують роботу віртуальних машин?


21

Ми використовуємо Ubuntu 12.04 із такими параметрами:

  • Dell R910
  • Ядро 3.2.0-25-generic # 40-Ubuntu SMP x86_64 x86_64 x86_64 GNU / Linux
  • kvm 1: 84 + dfsg-0ubuntu16 + 1.0 + noroms + 0ubuntu13
  • qemu-kvm 1.0 + noroms-0ubuntu13
  • qemu-загальний 1,0 + noroms-0ubuntu13
  • qemu-kvm 1.0 + noroms-0ubuntu13
  • 4 x процесор Intel (R) Xeon (R) E7- 4870 при 2,40 ГГц (у кожного з 10 фізичними ядрами, HT та Intel VT)
  • Наразі у гостей Windows немає VirtIO, але це незабаром зміниться

На цій машині ми працюємо з декількома гостями Windows, один з них - 32-бітний Windows 2003, інший - Windows 2008 (64 біт). В даний час ми боремося з проблемами продуктивності і розігруємось з моделями процесора.

Ми зазвичай використовуємо "qemu-system-x86_64 для нашого Windows 32-бітового гостя, наприклад:

/usr/bin/qemu-system-x86_64 -S -M pc-1.0 -cpu qemu32 -enable-kvm -m 4096 -smp 4,sockets=4,cores=1,threads=1 [...] 

Виступ цього гостя виявився трохи низьким. Ми ще не виконували жодного орієнтиру, але скажімо, що копіювання великої кількості даних (файлів) всередині VM з одного каталогу в інший йде набагато швидше, коли ми переключаємо модель процесора з "-cpu qemu32" на "-cpu Nehalem ". Файли, копіювання яких зайняло близько 2: 40 год, тепер копіюють протягом 40 хвилин. Звичайно, це не високоякісний тест, і є багато можливостей для більш професійної спроби. Але це чіткий показник того, що вибір правильної моделі процесора може сильно вплинути на продуктивність гостя.

Тепер я зацікавився і побіг:

qemu-x86_64 -cpu ?
x86           [n270]
x86         [athlon]
x86       [pentium3]
x86       [pentium2]
x86        [pentium]
x86            [486]
x86        [coreduo]
x86          [kvm32]
x86         [qemu32]
x86          [kvm64]
x86       [core2duo]
x86         [phenom]
x86         [qemu64]

І:

kvm -cpu ?model
 x86       Opteron_G3  AMD Opteron 23xx (Gen 3 Class Opteron)
 x86       Opteron_G2  AMD Opteron 22xx (Gen 2 Class Opteron)
 x86       Opteron_G1  AMD Opteron 240 (Gen 1 Class Opteron)
 x86          Nehalem  Intel Core i7 9xx (Nehalem Class Core i7)
 x86           Penryn  Intel Core 2 Duo P9xxx (Penryn Class Core 2)
 x86           Conroe  Intel Celeron_4x0 (Conroe/Merom Class Core 2)
 x86           [n270]  Intel(R) Atom(TM) CPU N270   @ 1.60GHz
 x86         [athlon]  QEMU Virtual CPU version 1.0
 x86       [pentium3]
 x86       [pentium2]
 x86        [pentium]
 x86            [486]
 x86        [coreduo]  Genuine Intel(R) CPU           T2600  @ 2.16GHz
 x86          [kvm32]  Common 32-bit KVM processor
 x86         [qemu32]  QEMU Virtual CPU version 1.0
 x86          [kvm64]  Common KVM processor
 x86       [core2duo]  Intel(R) Core(TM)2 Duo CPU     T7700  @ 2.40GHz
 x86         [phenom]  AMD Phenom(tm) 9550 Quad-Core Processor
 x86         [qemu64]  QEMU Virtual CPU version 1.0

З усіма цими різними версіями важко здогадатися. "Негалем", здається, найефективніший у цьому списку. Тепер мені цікаво, як сказати, яка модель процесора найкраща для мого гостя? Переглядаючи Інтернет, я знайшов такі ресурси:

Коли я читаю ці сайти правильно, вони стверджують, що "-cpu хост" може принести найкращі показники. Я ще не переймаюся міграцією, оскільки обидва хости KVM обладнані однаково (фактично однаково обладнання).

Отже, що рекомендують досвідчені адміністратори KVM? Чи є золоте правило чи навіть матриця на кшталт "ця модель найкраща для цієї гостьової ОС"?

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


Навіщо взагалі турбуватися перемикачем -cpu? Просто залиште це.
psusi

1
Чому б не потурбуватися цим? Афаїк може принести поліпшення продуктивності.
Валентин

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

2
Я щойно з'ясував, що libvirt автоматично додає параметр "-host qemu32", тому що ми його не встановлюємо.
Валентин

3
@psusi: Я просто перевірив це сьогодні ... коли я покидаю перемикач -cpu, продуктивність настільки ж хороша, як я вибираю найкращу можливу модель процесора.
Валентин

Відповіді:


13

Насправді це дуже просто. Для однорідних кластерів та одиночних налаштувань хоста використовуйте hostопцію. Для змішаних кластерів використовуйте найнижчу доступну версію процесора, тому якщо один хост - Penryn, а другий Nehalem, використовуйте Penryn на обох.

Якщо ви використовуєте RHEV або oVirt, це вже вбудовано. VMWare має це "EVC" і позиціонує його як величезну особливість.

Повертаючись до продуктивності, вам обов'язково потрібні virtio скрізь, де ви можете їх поставити. І якщо ви все-таки стикаєтеся з вузькими місцями ефективності, їх зазвичай можна вирішувати в кожному конкретному випадку, залежно від місця їх виникнення.

[offtop] Що стосується вашого вибору розповсюдження, я вже коментував іншу тему [/ offtop]


Дякую Дясні, сподівався, що ти відповідеш і надасиш мені якесь "золотое правило"!
Валентин

11

Наразі гості Windows не мають VirtIO

Не втрачайте більше часу, переробляючи що-небудь.
Встановіть драйвери virtIO та поверніться. Різниця настільки величезна, що будь-яке вдосконалення, яке ви можете знайти зараз, не матиме значення для virtIO.


Наведемо лише приклад з одним із наших серверів: - без virtIO W2k3 може обробляти близько 10 користувачів термінальних серверів
- з virtIO, той же апарат з тією ж ОС в даний час обробляє від 120 до 125 користувачів з невеликим сповільненням. І ми додали ще одну віртуальну машину для запуску SQL Server одного і того ж фізичного комп'ютера


Дякую за підказку. Так, VirtIO повинен бути включений, але ми стикаємося з кількома проблемами з гостем Windows 2003, які слід вирішити спочатку. Окрім цього, я хочу мати уточнення щодо теми моделі процесора.
Валентин

Це одна з причин, що я використовую Hyper-V. Починаючи з 2008 року це означає НЕ ВСТАНОВИТИ, а це означає, що всі драйвери для Hyper-V підтримуються з оновленням Windows. Питання сумісності там є смертельними.
TomTom

@TomTom Hyper-V - не єдиний гіпервізор, сертифікований для роботи з Windows. І сертифікація в цьому контексті означає SVVP / WHQL.
діасний

1
Ні, до речі, це єдиний, хто працює з коробки, оскільки в ньому вже встановлені драйвери;) Плюс, я думаю, що XEN, коли вони підробляють на Hyper-V драйвери. Не потрібно підтримувати інший зовні оновлений елемент - це справді приємна річ. Мені все одно, чи вони підписані - справа в тому, що я не дивлюся іншого постачальника, оскільки все відбувається через оновлення Windows. Я просто бажаю MS відкрити оновлення Windows для сторонніх softawre;)
TomTom

1
Оскільки я впевнений, що ви чули про ковзання та шаблони VM, я (майже) не згадаю про них :) Моя проблема з Hyper-V - надзвичайно погана підтримка гостей Linux.
діасний

8

Qemu не працює так, як це роблять інші гіпервізори. Для початку він може забезпечити повну емуляцію. Це означає, що ви можете запустити x86 код, наприклад, на процесорі ARM. Коли ви працюєте в режимі KVM, він насправді цього не робить ... процесор не піддається впливу, але те, що повідомляється в ОС, буде змінено -cpuпрапором.

Якщо ви хочете більш високої швидкості, це відправна точка, щоб спробувати якнайкраще співставити можливості віртуального процесора з вашим реальним процесором. Це зменшить випадки, коли неоптимальні опкоди викликаються для виконання завдань, а також зменшить коди, які неможливо, щоб ваше обладнання спочатку було переведено на щось інше. Оскільки ваша модель процесора Xeon була випущена на початку 2011 року, вона, ймовірно, підтримує здебільшого рядки Core i7. З цього приводу я б сказав, що архітектура Негалема - це ваша найкраща емуляція.

Цитуючи з одного з ваших посилань ( Налаштування KVM ):

Щоб передати всі доступні функції хост-процесора гостям, використовуйте перемикач командного рядка

 qemu -cpu host

якщо ви хочете зберегти сумісність, ви можете відкрити вибрані функції для свого гостя. Якщо всі ваші хости мають ці функції, сумісність зберігається:

 qemu -cpu qemu64,+ssse3,+sse4.1,+sse4.2,+x2apic

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

Однак більшу частину часу ти хочеш дотримуватися -cpu host. Визначення процесора з менш доступними прапорами означає, що програми уникатимуть використання функцій, які можуть зробити їх швидшими.


4
Він використовує KVM, який потребує цих розширень для віртуалізації та не запускає емуляцію; навіть якщо він базується на qemu
Хав'єр

1
Все-таки +1 голосуйте від мене за зусилля та рекомендацію використовувати хост -cpu!
Валентин

3

Ви заплутуєте параметр "-cpu host". Цей параметр НЕ вмикає лише всі функції процесора, характерні для вашої хост-системи, він дозволяє ВСІМ функціям, які підтримує ваш процесор, і всім тим, що можна імітувати, навіть якщо ваш процесор не підтримує їх.

Хост -cpu
- це хороший варіант, але не найефективніший, тому що він може вмикати параметри, які можуть бути імітовані тим, що підтримує ваш процесор, гостьова система може бути трохи сповільнена в будь-який час, коли вона намагається використовувати одну з цих функцій, яку потрібно наслідувати .

Джерело: http://wiki.qemu.org/Features/CPUModels


1
Спочатку я вважав, що ця відповідь стосується підтримки інструкцій, наприклад, підтримки SSE, яка може бути імітацією. Але це, звичайно, не має сенсу, якщо ви працюєте в режимі KVM або TCG, а не суміш обох. Тож я здогадуюсь, що емуляція, про яку йдеться тут, може бути такими, як x2apic, де немає підтримки в / ч, але ядро ​​може її підробити. Я лише згадую це, щоб спробувати уточнити вищесказане, оскільки воно спочатку збило з пантелику.
Ніл Макгілл

-2

CentOS 6.7 дає мені належну продуктивність KVM + Spice на Dell R910. Я думаю, що як тільки ти дасть йому постріл, ти не повернешся ні до чого іншого (серйозно)!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.