Превращаем vCPU в процессорные ядра в XenServer/XCP
Как известно, 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.
Рекомендую ознакомиться также с информацией по следующим ссылкам:
