вторник, 13 апреля 2010 г.

Особенности многопроцессорных ВМ

Грабли: ВМ с Windows XP создана с 4мя процессорами, а XP видит только 2, хотя физически в сервере 2 4-ядерных процессора.

Причина: ничего общего презентуемые ВМ виртуальные процессоры с физическими не имеют. Каждый vCPU является одноядерным - соотв. XP ведет себя совершенно нормально, поскольку по условиям лицензии ограничена 2мя процессорами (сокетами).

Лечение: в Advanced Settings для ВМ создать параметр cpuid.coresPerSocket и присвоить ему желаемое значение. Соотв. если для 4х процессорной ВМ cpuid.coresPerSocket = 2, то ВМ увидит 2 2-ядерных процессора.

14 комментариев:

  1. Возникает только один вопрос а зачем это делать? Ведь скорость работы упадет.

    ОтветитьУдалить
  2. Из-за лицензионной политики.

    ОтветитьУдалить
  3. Если включён HyperThreading на ESX4, что получит виртуальная машина? Не будет ли сильного падения производительности из-за "неудачных" ядер?

    ОтветитьУдалить
  4. ESX различает "полноценные" ядра и HT ядра и соотв. распределит потоки таким образом, чтобы получить максимум производительности.

    ОтветитьУдалить
  5. Кул! :) Возникает другой вопрос - а зачем XP больше двух Ядер?

    ОтветитьУдалить
  6. В Windows SMB Server что с настройкой, что без нее - два одноядерных процессора.

    ОтветитьУдалить
  7. В XP тоже только два одноядерных, если запускать на хосте ESX с HT. А если на хосте без hyperthreading - то видны четыре ядра. Вывод - гипертрединговые ядра не ядра для vmware ?

    ОтветитьУдалить
  8. UPD по SBS: SBS тоже показывает два двухъядерника - изначально возникло непонимание с владельцем SBS.

    ОтветитьУдалить
  9. ESX различает "полноценные" ядра и HT ядра и соотв. распределит потоки таким образом, чтобы получить максимум производительности.

    Поясните пожалуйста. За счет чего увеличивается производительность?
    Если те команды VM которые планировщик гипервизора раздает ядрам (в нашем случае виртуальным HT),будут выполнятся на физических. Тем самым увеличивая на ядро CPU нагрузку на просчет своего собственного виртуального ядра.

    ОтветитьУдалить
  10. Был вопрос о "падении" производительности при включении HT, а не о фантастическом увеличении.

    ESX распределяет потоки в первую очередь по физическим ядрам, и лишь потом по логическим (гипетрединговым). В общем случае это выглядит точно так же, как если бы гипертрединга не было и потоки распредлялись все по тем же физическим ядрам и соотв. начинали бороться за процессорное время. VMware рекомендует включение HT для ESX и заявляет, что будет общий прирост производительности от 0 до 40%. Т.е. к падению это не приведет.

    Источник: http://communities.vmware.com/docs/DOC-5101

    ОтветитьУдалить
  11. Anton Zhbankov
    Источник: http://communities.vmware.com/docs/DOC-5101
    Это читал. Интересно за счет чего достигается прирост в 40%. Насколько я понимаю все зависит от того как написано приложение. Но в нашем случае гипервизор отдает VM это ядро(HT) как физическое.
    http://kb.vmware.com/kb/1728
    "ESX Server virtual machines don't provide Hyper-Threading technology to the guest operating system"
    Сам гипервизор как приложение не может мне кажется иметь такой разброс в приросте мощности.

    SMP CPU за один такт машинного времени выполняется одна инструкция или все таки возможно выполнения сразу нескольких ядрах одного pCPU?

    ОтветитьУдалить
  12. SMP CPU за один такт машинного времени выполняется одна инструкция или все таки возможно выполнения сразу нескольких ядрах одного pCPU?

    Ссори, имел в виду:
    сразу несколького инструкций на нескольких ядрах одного pCPU.

    ОтветитьУдалить
  13. >ESX различает "полноценные" ядра и HT ядра и
    >соотв. распределит потоки таким образом, чтобы
    >получить максимум производительности.

    Всё-таки непонятно. Может ли получить машина два HT ядра от разных физических ядер? То есть не может ли одна машина влиять на производительность другой - например, выполняя вычисления с плавающей точкой, что вдруг снизит производительность парного HT ядра.

    ОтветитьУдалить
  14. Машина в любом случае получает на каждый свой vCPU логическое ядро, а не физическое, будь то HT процессор или нет.

    Разница между HT процессорами и не-HT в том, что как только на одном физическом ядре появляется две машины (точнее два потока от vCPU разных машин), не-HT ядро начинает тупо делить между ними процессорное время. HT-ядро в некоторых случаях может совместить исполнение, что улучшает производительность.

    ESX прежде всего распределяет vCPU потоки по физическим ядрам. Т.е. если у нас 4ядерный HT процессор = 8 логических ядер, то логические ядра 0 и 1 принадлежат одному физическому. И ESX соотв. сначала раскидает vCPU потоки по ядрам 0, 2, 4 и 6, прежде чем начнет их кидать на 1, 3, 5 и 7. С точки зрения машины абсолютно безразлично, на каком логическом ядре она исполняется, на 0 или 1. Физически это одно и то же ядро, не нужно считать второе логическое HT ядро обрезком от "главного".

    И ESX соотв. изо всех сил постарается сделать так, чтобы два vCPU потока одной vSMP машины не оказались на логических ядрах одного и того же физического ядра.

    ОтветитьУдалить