Превращаем vCPU в процессорные ядра в XenServer/XCP

Опубликовано Jay сб, 14.01.2012 02:19

Как известно, vCPU в виртуальных машинах XenServer/XCP представляются отдельными процессорами (отдельными виртуальными сокетами на виртуальной матплате). Иногда возникает необходимость представить их для виртуальной машины в виде комбинации из процессоров и процессорных ядер. Например, из 8 vCPU сделать 2 процессора по 4 ядра. Наиболее типичное применение этой возможности - обход ограничения на количество процессоров в Windows. К примеру, Windows Server 2008 R2 Foundation ограничен одним процессором при отсутствии ограничений на количество ядер у этого процессора. То есть, выдавать ему более одного vCPU "в лоб" нет смысла - он их не увидит. Зато эти vCPU можно выдать в виде ядер одного процессора.

Следует упомянуть, что эта магическая возможность существует в XenServer Advanced, Enterprise, Platinum или Essentials for XenServer Enterprise Edition. То есть, в XenServer Free Edition этой возможности нет. Но зато она есть в XCP.

Итак, собственно, сама процедура выглядит следующим образом. Для начала, нужен UUID виртуальной машины, над которой будут проводиться дальнейшие манипуляции.

xe vm-list params=uuid name-label=<Имя VM>

Затем, выставляем желаемое количество ядер на процессор (параметр cores-per-socket):

xe vm-param-set platform:cores-per-socket=<Количество ядер на процессор> uuid=<VM-UUID>

Далее, выставляем общее количество процессорных ядер, которое будет выделено для виртуальной машины, в параметре VCPUs-at-startup.

xe vm-param-set VCPUs-at-startup=<Количество ядер> uuid=<VM-UUID>

Также, выставляем максимальное количество ядер для виртуальной машины.

xe vm-param-set VCPUs-max=<Количество ядер> 

О параметре VCPUs-max в документации особо не распространяются. Так и пишут - maximum number of virtual CPUs. Предполагается, что, в общем случае, он будет равен VCPUs-at-startup. Я предполагаю, что здесь оставлен задел на динамическую реконфигурацию количества процессоров/ядер для тех операционок, которые поддерживают горячую замену процессоров. Пока же его лучше выставить в то же значение, что и VCPUs-at-startup.

Теперь подробнее и с примерами.

Допустим, что наш гипервизор установлен на сервере с 2 процессорами по 4 ядра в каждом. Тогда, если выставить виртуальной машине cores-per-socket=4, а VCPUs-at-startup=8, то она увидит те же 2 процессора по 4 ядра. Если же выставить VCPUs-at-startup=4, то получится один процессор с 4 ядрами.

Практика показала, что можно создавать и более экзотические конфигурации. Например, 2 процессора по 3 ядра (вспомним трехъядерники AMD) - это cores-per-socket=3 и VCPUs-at-startup=6.

Рекомендую ознакомиться также с информацией по следующим ссылкам: