После бесчисленных обсуждений, статей и технических отчетов я не нашел подходящего ответа и решил самостоятельно протестировать, стоит ли использовать Hyper-Threading или нет. В процессе поиска ответа я также нашел ответ на вопрос об использовании фиксированной или динамической памяти для виртуальных машин в Proxmox. [[Оговорка: Все это основано на моих тестах и конфигурации, поэтому мое мнение может быть предвзято в отношении моей виртуальной среды]]
Короткий ответ: ДА! Используйте Hyper-Threading, когда это возможно, даже на новых многоядерных узлах.
- Используйте фиксированную память для виртуальных машин, где требуется производительность. Не используйте динамическую память, особенно на виртуальных машинах на базе Windows.
Длинный ответ
Использованное оборудование для тестирования
-------------------------
Узел 1 = Dual Xeon E5-5620v2, 64ГБ ОЗУ, Hyper-Threading отключен, общее количество ядер 12 (12+0 HT)
Узел 2 = Dual Xeon E5-5620v2, 64ГБ ОЗУ, Hyper-Threading включен, общее количество ядер 24 (12+12 HT)
Изначально использованные виртуальные машины для тестирования
--------------------------
2 x Windows Server 2008 R2 64 Bit - 6 vCPU, максимум 16ГБ ОЗУ, минимум 4ГБ ОЗУ
В моей среде обе Windows Server служат RDS серверами. Каждая с примерно 20 пользователями. Я использовал Performance Monitor в Windows для сбора данных о производительности. Не использовал никаких других инструментов.
Изначально я установил оба сервера на Узел 2, но у нас были некоторые проблемы с производительностью в течение некоторого времени. Я не хотел верить, что мое оборудование недостаточно мощное, чтобы просто 2 RDS сервера. Performance Monitor показывал, что ОЗУ не использовалась даже наполовину, но загрузка ЦП была выше 80% в рабочее время, иногда достигая 100% и оставаясь на этом уровне. У RDS серверов установлены только стандартные офисные программы, такие как MS Office, Quickbooks и т.д. Нет графически-интенсивной работы, даже просмотр YouTube.
Чтобы убедиться, что проблема не в оборудовании, я переместил одну из RDS серверов на Узел 1, где Hyper-Threading был включен в то время. Реально не было заметной разницы.
Чтобы выяснить, не является ли причиной проблемы Hyper-Threading, я отключил HT на первом узле, но производительность этой виртуальной машины фактически ухудшилась. Перезагрузил виртуальную машину с включенным HT, и все стало лучше.
Попробовал различные настройки:
- увеличение/уменьшение vCPU, памяти
- фиксирование/увеличение/уменьшение файла подкачки Windows
- размещение виртуальных машин на локальном диске, а не на RBD
Наконец, я перезагрузил виртуальную машину без какого-либо пользователя или программы, запущенной в системе. Но Performance Monitor показывал загрузку ЦП примерно в 45% на обеих виртуальных машинах. Виртуальные машины на Узле 1 с отключенным HT фактически показывали немного более высокую загрузку. Во всех случаях потребление памяти было намного ниже.
Наконец, я отключил динамическую память и зафиксировал ее на 16ГБ. После перезагрузки виртуальной машины Performance Monitor показал..................... 1% потребления!!! Сделал ту же настройку для виртуальной машины на узле с отключенным HT, тот же результат. ЦП была тиха!
После подключения всех пользователей через RDP и запуска программ для имитации максимальной нагрузки во всех их сеансах загрузка ЦП возросла до 49% на узле с включенным HT и 61% на узле с отключенным HT. Мне даже удалось уменьшить количество vCPU до 2 и заставить его работать нормально. Но поскольку это RDS сервер и пользователь может вызвать всплеск в любое время, я изменил его на 4 vCPU.
Я настроил фиксированную память для ВСЕХ виртуальных машин как Windows, так и Linux в кластере и смог освободить 32 vCPU!!!! Виртуальные машины, которые раньше работали с высокой загрузкой ЦП, учитывая их роль, теперь отлично работают с меньшим количеством vCPU.
Следует отметить, что в наших кластерах мы внимательно следим за выделением vCPU, чтобы не допускать перевыделения или злоупотребления узлами с включенным Hyper-Threading. Поэтому ранее назначенные vCPU требовались для удовлетворения потребления.
После того, как я зафиксировал память для всех виртуальных машин Windows, я снова провел тест с HT или без него. Виртуальная машина, казалось, была более счастлива на узле с включенным HT, чем на отключенном. Снова, все это на основе данных Performance Monitor.
Даже с меньшим количеством vCPU и фиксированной памятью наши пользователи RDP гораздо счастливее, как показывают нам отчеты, которые мы получаем каждый день.
Я отслеживал кластер последние 2 дня, vCPU гораздо тише с фиксированной памятью.
Чтобы убедиться, что именно фиксированная память сделала разницу, я изменил одну из виртуальных машин на старые настройки с динамической памятью, и та же старая высокая загрузка vCPU вернулась. Изменил ее обратно на фиксированную, загрузка значительно снизилась.
Так вот вопрос ко всем, является ли это нормальным поведением? Другие испытывали или замечали подобную тенденцию?
Я нашел много статей, в которых говорится об HT или его отсутствии. Некоторые говорили отключить HT для многоядерных узлов. Некоторые говорили просто оставить его включенным. Я уверен, что многие из вас пытались найти тот же ответ. Мои выводы говорят оставить его включенным. Я все еще отслеживаю кластер. На данный момент все выглядит гораздо лучше на узле с включенным HT, чем на отключенном.
И еще, почему фиксированная память будет потреблять меньше vCPU, чем динамическая?
Хотя все работает превосходно благодаря этим изменениям, я хотел бы знать, "почему" и, возможно, другие опыты.
Короткий ответ: ДА! Используйте Hyper-Threading, когда это возможно, даже на новых многоядерных узлах.
- Используйте фиксированную память для виртуальных машин, где требуется производительность. Не используйте динамическую память, особенно на виртуальных машинах на базе Windows.
Длинный ответ
Использованное оборудование для тестирования
-------------------------
Узел 1 = Dual Xeon E5-5620v2, 64ГБ ОЗУ, Hyper-Threading отключен, общее количество ядер 12 (12+0 HT)
Узел 2 = Dual Xeon E5-5620v2, 64ГБ ОЗУ, Hyper-Threading включен, общее количество ядер 24 (12+12 HT)
Изначально использованные виртуальные машины для тестирования
--------------------------
2 x Windows Server 2008 R2 64 Bit - 6 vCPU, максимум 16ГБ ОЗУ, минимум 4ГБ ОЗУ
В моей среде обе Windows Server служат RDS серверами. Каждая с примерно 20 пользователями. Я использовал Performance Monitor в Windows для сбора данных о производительности. Не использовал никаких других инструментов.
Изначально я установил оба сервера на Узел 2, но у нас были некоторые проблемы с производительностью в течение некоторого времени. Я не хотел верить, что мое оборудование недостаточно мощное, чтобы просто 2 RDS сервера. Performance Monitor показывал, что ОЗУ не использовалась даже наполовину, но загрузка ЦП была выше 80% в рабочее время, иногда достигая 100% и оставаясь на этом уровне. У RDS серверов установлены только стандартные офисные программы, такие как MS Office, Quickbooks и т.д. Нет графически-интенсивной работы, даже просмотр YouTube.
Чтобы убедиться, что проблема не в оборудовании, я переместил одну из RDS серверов на Узел 1, где Hyper-Threading был включен в то время. Реально не было заметной разницы.
Чтобы выяснить, не является ли причиной проблемы Hyper-Threading, я отключил HT на первом узле, но производительность этой виртуальной машины фактически ухудшилась. Перезагрузил виртуальную машину с включенным HT, и все стало лучше.
Попробовал различные настройки:
- увеличение/уменьшение vCPU, памяти
- фиксирование/увеличение/уменьшение файла подкачки Windows
- размещение виртуальных машин на локальном диске, а не на RBD
Наконец, я перезагрузил виртуальную машину без какого-либо пользователя или программы, запущенной в системе. Но Performance Monitor показывал загрузку ЦП примерно в 45% на обеих виртуальных машинах. Виртуальные машины на Узле 1 с отключенным HT фактически показывали немного более высокую загрузку. Во всех случаях потребление памяти было намного ниже.
Наконец, я отключил динамическую память и зафиксировал ее на 16ГБ. После перезагрузки виртуальной машины Performance Monitor показал..................... 1% потребления!!! Сделал ту же настройку для виртуальной машины на узле с отключенным HT, тот же результат. ЦП была тиха!
После подключения всех пользователей через RDP и запуска программ для имитации максимальной нагрузки во всех их сеансах загрузка ЦП возросла до 49% на узле с включенным HT и 61% на узле с отключенным HT. Мне даже удалось уменьшить количество vCPU до 2 и заставить его работать нормально. Но поскольку это RDS сервер и пользователь может вызвать всплеск в любое время, я изменил его на 4 vCPU.
Я настроил фиксированную память для ВСЕХ виртуальных машин как Windows, так и Linux в кластере и смог освободить 32 vCPU!!!! Виртуальные машины, которые раньше работали с высокой загрузкой ЦП, учитывая их роль, теперь отлично работают с меньшим количеством vCPU.
Следует отметить, что в наших кластерах мы внимательно следим за выделением vCPU, чтобы не допускать перевыделения или злоупотребления узлами с включенным Hyper-Threading. Поэтому ранее назначенные vCPU требовались для удовлетворения потребления.
После того, как я зафиксировал память для всех виртуальных машин Windows, я снова провел тест с HT или без него. Виртуальная машина, казалось, была более счастлива на узле с включенным HT, чем на отключенном. Снова, все это на основе данных Performance Monitor.
Даже с меньшим количеством vCPU и фиксированной памятью наши пользователи RDP гораздо счастливее, как показывают нам отчеты, которые мы получаем каждый день.
Я отслеживал кластер последние 2 дня, vCPU гораздо тише с фиксированной памятью.
Чтобы убедиться, что именно фиксированная память сделала разницу, я изменил одну из виртуальных машин на старые настройки с динамической памятью, и та же старая высокая загрузка vCPU вернулась. Изменил ее обратно на фиксированную, загрузка значительно снизилась.
Так вот вопрос ко всем, является ли это нормальным поведением? Другие испытывали или замечали подобную тенденцию?
Я нашел много статей, в которых говорится об HT или его отсутствии. Некоторые говорили отключить HT для многоядерных узлов. Некоторые говорили просто оставить его включенным. Я уверен, что многие из вас пытались найти тот же ответ. Мои выводы говорят оставить его включенным. Я все еще отслеживаю кластер. На данный момент все выглядит гораздо лучше на узле с включенным HT, чем на отключенном.
И еще, почему фиксированная память будет потреблять меньше vCPU, чем динамическая?
Хотя все работает превосходно благодаря этим изменениям, я хотел бы знать, "почему" и, возможно, другие опыты.
