вторник, 7 декабря 2010 г.

многоядерные виртуальные процессоры, cpuid.coresPerSocket

Из переписки:

Добрый день.
Я тут сегодня решил посмотреть как работает новая фича с настройкой виртуальных ЦПУ с несколькими ядрами на 1 сокет.
И неожиданно убил пол дня на разбирательство с проблемами, как оказалось вся проблема была в изначально неправильном понимании значения настроек.
Вот думаю может Вы у себя разместите на сайте статью об этом, чтобы другие меньше мучились.
Я изначально понимал значение параметра vCPU как количество виртуальных сокетов, а cpuid.coresPerSocket как количество ядер на каждый сокет.
Т.е. общее кол-во ядер, как я думал, должно быть = vCPU * cpuid.coresPerSocket
Как оказалось это в корне не так.
vCPU – это количество виртуальных ядер, cpuid.coresPerSocket – это количество ядер в одном сокете.
Количество сокетов ESX вычисляет при запуске виртуалки как = vCPU/cpuid.coresPerSocket
В принципе все довольно логично.
Гостевая ОС W2k3SE.
Полезные Ссылки:
http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=1010184 – описывает как это все должно делаться. Если читать внимательно, то даже можно увидеть
«Ensure that cpuid.coresPerSocket is divisible by the number of vCPUs in the virtual machine. That is, when you divide cpuid.coresPerSocket by the number of vCPUs in the virtual machine, it must return an integer value. For example, if your virtual machine is created with 8 vCPUs, coresPerSocket can only be 1, 2, 4, or 8.»
http://www.vcritical.com/2009/09/use-coreinfo-to-view-vm-core-and-socket-count/ - неплохая статья, где на скриншотах видно как это работает на W2008
http://communities.vmware.com/message/1615945;jsessionid=878239AC1B989212A0A3FEF665CAD55A – Эта ссылка греет мне душу, что я не один такой, неправильно понимающий
http://www.boche.net/blog/index.php/2010/07/25/vsphere-4-1-multicore-virtual-cpus/ - ну а это статья, в которой есть скриншот из WM Workstation, где видимо логика настроек именно с умножением. Зачем одна фирма делает в разных продуктах один и тот же функционал с совершенно разной логикой настроек, это уже отдельный вопрос.

Скриншоты:
8 vCPU, сокеты по четыре ядра:
image
8 vCPU, сокеты по два ядра:
image

thx Evgeniy Kogan,

4 комментария:

  1. Сдается мне на второй картинке все-таки 4 двухядерных. Те в сокете по два ядра => cpuid.coresPerSocket = 2

    ОтветитьУдалить
  2. поправил, спасибо.

    ура, хотя бы один человек прочитал и обдумал прочтенное!
    ;-)

    ОтветитьУдалить
  3. Михаил, приветствую. Читаю Вашу книгу по 4.0 и набрел на эту тему. Вопрос: стоит ли выставлять этот параметр если не принимать во внимание лицензирование? Что будет лучше работать с точек зрения винды и вмвари (быстрее и производительнее) восемь одноядерных или два четырехядерных? спасибо

    ОтветитьУдалить
  4. на производительность этот параметр не влияет никак.

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

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