Назад | Перейти на главную страницу

KVM: какие функции ЦП улучшают работу виртуальных машин?

Мы используем Ubuntu 12.04 со следующими параметрами:

Мы запускаем несколько гостевых Windows на этом компьютере, одна из них - Windows 2003 32 Bit, другая - Windows 2008 (64 Bit). В настоящее время мы боремся с проблемами производительности и экспериментируем с моделями процессоров.

Обычно мы используем "qemu-system-x86_64 для нашей 32-разрядной гостевой системы Windows, например:

/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 [...] 

Результативность этого гостя оказалась несколько невысокой. Мы еще не запускали какой-либо тест, но предположим, что копирование большого количества данных (файлов) внутри виртуальной машины из одного каталога в другой происходит намного быстрее, когда мы переключаем модель процессора с «-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

Со всеми этими разными версиями сложно догадаться. "Nehalem", кажется, самый эффективный в этом списке. Теперь мне интересно, как определить, какая модель процессора лучше для моего гостя? Просматривая Интернет, я нашел следующие ресурсы:

Когда я правильно читаю эти сайты, они утверждают, что "-cpu host" может обеспечить лучшую производительность. Меня пока не беспокоит миграция, так как оба узла KVM оснащены одинаково (точно такое же оборудование).

Итак, что рекомендуют опытные администраторы KVM? Есть ли золотое правило или даже матрица типа «эта модель лучше всего подходит для этой гостевой ОС»?

Приношу свои извинения, если я смог узнать эту информацию самостоятельно - я запускал различные поисковые запросы в Google и просматривал множество веб-сайтов. Я не смог найти то, что отвечает на мой вопрос.

На самом деле это довольно просто. Для однородных кластеров и установок с одним хостом используйте host вариант. Для смешанных кластеров используйте самую низкую доступную версию ЦП, поэтому, если один хост - Penryn, а другой - Nehalem, используйте Penryn на обоих.

Если вы используете RHEV или oVirt, он уже встроен. В VMWare это называется «EVC» и позиционируется как огромная функция.

Возвращаясь к производительности, вам определенно понадобится virtio, где бы вы его ни разместили. И если вы по-прежнему сталкиваетесь с узкими местами в производительности, их обычно можно устранить в каждом конкретном случае, в зависимости от того, где они возникают.

[offtop] О выбранном вами дистрибутиве я уже комментировал в другой ветке [/ offtop]

У гостей Windows в настоящее время нет VirtIO

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

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

Qemu работает не так, как многие другие гипервизоры. Во-первых, он может обеспечить полную эмуляцию. Это означает, что вы можете запускать код x86, например, на процессоре ARM. В режиме KVM, когда вы его используете, он на самом деле этого не делает ... процессор открыт, несмотря ни на что, но то, что сообщается в ОС, будет изменено -cpu флаг.

Если вам нужны более высокие скорости, это отправная точка, чтобы попытаться как можно лучше сопоставить возможности виртуального процессора и вашего реального процессора. Это уменьшит количество случаев, когда неоптимальные коды операций вызываются для выполнения задач, а также сократит количество кодов операций, которые невозможно на вашем оборудовании, которые сначала переводятся на что-то другое. Поскольку ваша модель процессора Xeon была выпущена в начале 2011 года, она, вероятно, в основном поддерживает серию Core i7. Для этого я бы сказал, что архитектура Nehalem - ваша лучшая эмуляция.

Цитата по одной из ваших ссылок (Настройка KVM):

Чтобы передать гостю все доступные функции хост-процессора, используйте переключатель командной строки

 qemu -cpu host

если вы хотите сохранить совместимость, вы можете предоставить гостю выбранные функции. Если все ваши хосты имеют эти функции, совместимость сохраняется:

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

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

Однако в большинстве случаев вы хотите придерживаться -cpu host. Указание ЦП с менее доступными флагами означает, что приложения будут избегать использования функций, которые могут сделать их быстрее.

Вы запутались с параметром «-cpu host». Эта опция НЕ включает только все функции ЦП, характерные для вашей хост-системы, она включает ВСЕ функции, которые поддерживает ваш ЦП, и все, что можно эмулировать, даже если ЦП не поддерживает их.

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

Источник: http://wiki.qemu.org/Features/CPUModels

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