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

ЦП в хост-системе Hyper-V просто простаивает, даже если виртуальные машины работают на полную мощность.

У меня есть сервер под управлением 64-разрядной версии Windows 2008 Hyper-V с 8 ГБ ОЗУ и Intel Xeon X3440 @ 2,53 ГГц, который дает мне 8 логических ядер в мониторе производительности в хост-системе.

Я установил три виртуальные машины, все под управлением 32-разрядной версии Windows 2008.

  1. Сборка сервера под управлением Team City
  2. Промежуточный сервер
  3. SQL Server под управлением SQL Server 2005

Эти три машины работают очень медленно, у них 100% ЦП, хотя хост-система вообще почти не использует ЦП, обычно менее 10%.

Может ли кто-нибудь дать несколько советов относительно лучшей настройки для распределения ЦП? Должен ли я установить на каждом сервере по два ядра или мне следует увеличить это число выше общего количества ядер на хосте?

Какое число следует установить для резерва виртуальных машин и лимита виртуальных машин?

Неужели 8 гигабайт физической памяти недостаточно для 3 виртуальных машин?

Спасибо за прочтение. :)

Бьёрн, тебя беспокоит то, что не является проблемой. В вашем случае у вас есть гипервизор и четыре виртуальные машины. Одна из этих виртуальных машин (управляющая ОС) поставлялась с гипервизором. Затем вы установили три виртуальные машины.

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

Это именно то, что делает Hyper-V при условии, что вы установили «Компоненты интеграции виртуальных машин» на все свои виртуальные машины. Эти компоненты значительно повышают эффективность ввода-вывода за счет установки драйверов, предназначенных для виртуальных машин. Затем, если ваши виртуальные машины не особенно загружены операциями ввода-вывода, ваша управляющая ОС будет просто ждать, пока вы с ней взаимодействуете, пытаясь использовать как можно меньше ресурсов. Это хорошая вещь.

Если вы хотите видеть фактические показатели ЦП от гипервизора, а не от управляющей ОС, используйте Performance Monitor в управляющей ОС и ищите счетчики Hyper-V. Они расскажут вам об использовании физического процессора.

Дуг Люксем (который, кажется, много знает об этом) хорошо ответил на это сегодня в другой ветке. Так что я просто украду его текст:

Во-первых, вы должны помнить, что в Hyper-V этот «хост» называется родительским разделом, и он действительно похож на виртуализированный гость со специальными разрешениями и ролями. Как и любой другой ребенок / гость, когда вы открываете Диспетчер задач, вы не можете видеть использование ЦП другими дочерними элементами на сервере.

У Бена Армстронга есть хорошее объяснение этого здесь: http://blogs.msdn.com/virtual_pc_guy/archive/2008/02/28/hyper-v-virtual-machine-cpu-usage-and-task-manager.aspx

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

Я не могу вспомнить на 100%, как это работало, но посмотрите на следующее

Я считаю, что ОС Hyper-V (хост-ОС, если хотите) - это просто оболочка и не отображает эти счетчики должным образом, во всяком случае, не в perfmon. Также может быть, что он отображает только то, что использует сама ОС хоста, а не виртуальные машины.

Прошло некоторое время с тех пор, как я работал с Hyper-V, но я думаю, что это был базовый уровень того, что вы видите.

Удачи

Хорошо, что я уже сделал:

Память, выделенная каждому серверу: 2300, 2300 и 2000 мегабайт. Это оставляет немного свободной памяти на хосте и каждой виртуальной машине.

4 виртуальных процессора на каждом сервере. В любой момент времени в основном работают два сервера: сервер SQL либо вместе с сервером сборки, либо с промежуточным сервером. Это означает, что, вероятно, большую часть времени 8 виртуальных процессоров будут заняты одновременно, а последние 4 не будут делать так много.

Резерв виртуальных машин установлен на 0 на всех виртуальных машинах. Ограничение виртуальных машин установлено на 100% для всех виртуальных машин.

В отчаянной попытке занять ЦП я установил для рабочих процессов виртуальной машины приоритет в реальном времени на хосте.

Показания ЦП на хосте все еще очень низкие, но теперь они не так интенсивны на виртуальных машинах и кажутся более отзывчивыми.

Хорошо, поскольку кто-то использует много виртуальных машин;)

  • Совершенно очевидно, что проблема не в памяти. Нам нужно следить за вводом-выводом на стороне хоста (т.е.все в целом) И на стороне виртуальной машины, но если вам удастся выделить 100% ЦП внутри виртуальной машины - это, очевидно, не захватывает диски и не использует выделенные слоты ЦП. Не говоря уже о том, что больше памяти бесполезно, но, как и в случае с физическим компьютером, виртуальная машина, интенсивно использующая виртуальную память, не сможет полностью использовать все выделенные циклы ЦП.

  • Вы говорите, что процессор загружен на 100%, но хост практически не выпирает. Сколько ядер ЦП у HOST? Если это четырехъядерная система с гиперпоточностью (с 8 ядрами - извините, я полностью сторонник AMD), виртуальная машина, использующая 2 ядра на 100%, будет отображаться ТОЛЬКО как - 25% для запуска на хосте. Это уже предполагает, что вы для начала используете правильный способ измерения загрузки ЦП (например, счетчики Hyper-V или диспетчер Hyper-V для краткости). Сервер ONE CORE на хосте с 8 CORE МОЖЕТ физически использовать только 12,5% доступной мощности ЦП для начала. Если это делает виртуальную машину вялой изнутри (что может быть - в зависимости от внутреннего приоритета ЦП виртуальной машины), то это похоже на перегрузку обычного компьютера, но хост почти не видит этого.

Таким образом, 3 виртуальные машины и 8-ядерный ЦП не имеют смысла использовать 1 виртуальный ЦП на хост. Вы в основном оставляете большую часть мощности процессора недоступной для виртуальных машин. Если вы перейдете на двухъядерный сервер на каждом сервере - при условии, что сервер и процессы от этого выиграют, - это даст вам лучшую уитлизацию. При этом вы можете пойти выше - в зависимости от того, как распределяется нагрузка (много ли делает SQ LServer, пока другие серверы заняты?).

В качестве примера - одна из моих машин - это 32-гигабайтная система AMD Opteron (скоро будет 64 гигабайта). Я редко загружаю ЦП полностью (всего с 4 ядрами) просто потому, что, хотя я запускаю на нем более десятка серверов, большинство из них не заняты одновременно, или системы с небольшой нагрузкой (например, несколько DNS). У меня есть другой сервер, на котором работает TFS (эквивалент Ms TeamCity), и если я что-то там предприму - все станет неприятно. Сборки, модульные тесты, запланированные лабораторные тесты виртуальных машин, модульные тесты баз данных - все это потребляет много ресурсов процессора. В зависимости от того, насколько он занят, этому CAN требуется больше мощности процессора. Как купить - это в основном вопрос «сколько пользователей» - 2-3 разработчика редко загружают сервер большую часть времени.

Итак, даже если вы выделите несколько ядер для, например, TeamCity - будете ли вы выполнять такие вещи, как несколько компиляций одновременно, или нет? Если регистрируется один разработчик, он просто никогда не будет регистрироваться в двух проектах одновременно;) Но попробуйте;)

это это короткий и хороший пост об использовании Hyper-V и ЦП. Я оставлю объяснение статье.

Кроме того, лучший способ добиться оптимальной производительности виртуальных машин - убедиться, что у вас есть сопоставление логических и физических ядер 1: 1. Итак, если у вас есть 3 виртуальных машины и 8 ядер, вы можете сделать 2 логических процессора на всех виртуальных машинах, оставив два для гипервизора / хоста.

Как правило, увеличивать логическое число над физическим - плохая идея.

Еще один способ повысить производительность - настроить статические виртуальные жесткие диски или использовать диски.

8 ГБ ОЗУ должно быть более чем достаточно для трех из большинства виртуальных машин, но все зависит от запущенных приложений и от того, насколько они хотели бы работать оптимально. Проверьте документацию по каждому.

Надеюсь это поможет.