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 + нормы + 0ubuntu13
  • qemu-kvm 1.0 + noroms-0ubuntu13
  • qemu-common 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, один из которых - Windows 2003 32-разрядная, другая - Windows 2008 (64-разрядная). В настоящее время мы боремся с проблемами производительности и играем с моделями процессоров.

Мы обычно используем "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 и просмотрел множество веб-сайтов. Я не смог найти то, что отвечает на мой вопрос.

Valentin
источник
Зачем вообще беспокоиться о ключе -cpu? Просто оставь это.
Псуси
1
Почему бы не беспокоиться об этом? Afaik это может принести улучшения производительности.
Валентин
Если ему придется вмешаться и подражать вещам, это повредит производительности. Попробуйте без.
Псуси
2
Я только что узнал, что libvirt автоматически добавляет параметр "-host qemu32", потому что мы его не устанавливаем.
Валентин
3
@psusi: только что проверил это сегодня ... когда я оставляю переключатель -cpu в выключенном состоянии, производительность так же хороша, как и выбор наилучшей модели процессора.
Валентин

Ответы:

13

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

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

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

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

dyasny
источник
Спасибо, дясный, надеялся, что вы ответите и предоставите мне какое-то «золотое правило»!
Валентин
11

Гости Windows в настоящее время не имеют VirtIO

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

Просто пример с одним из наших серверов:
- без virtIO W2k3 может обрабатывать около 10 пользователей Terminal Server
- с помощью 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 для стороннего программного обеспечения;)
TomTom
1
Поскольку я уверен, что вы слышали о шаблонах скольжения и виртуальных машин, я (почти) не буду упоминать их :) Моя проблема с Hyper-V - крайне плохая поддержка гостей Linux.
Дядный
8

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

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

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

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

Джо Хусс
источник
1
Сначала я думал, что этот ответ относится к поддержке инструкций, например, к поддержке SSE, которую можно эмулировать. Но, конечно, это не имеет смысла, поскольку вы работаете либо в режиме KVM, либо в TCG, а не в обоих. Так что я полагаю, что упомянутая здесь эмуляция может быть чем-то вроде x2apic, где нет поддержки h / w, но ядро ​​может ее подделать. Я упоминаю об этом только для того, чтобы попытаться прояснить вышесказанное, поскольку это меня изначально смутило.
Нил Макгилл
-2

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

Марк Сир
источник