Что такое аргумент cpumaps и maplen в api virDomainGetVcpus из libvirt
Я пытаюсь получить информацию о том, что vcpus работает на моей машине, и для этого я использую libvirt. Я не могу понять, как использовать API virDomainGetVcpus, который имеет аргументы cpumaps и maplen.
Я использую C. Пожалуйста, дайте мне знать, если у вас есть понимание.
Благодарю.
1 ответ
Решение
Вам необходимо использовать virDomainGetInfo и virNodeGetInfo для гостевого числа гостевых процессоров и количества хост-процессоров. Тогда вы можете выделить карту нужного размера. Этот код сделает свое дело:
virNodeInfo nodeinfo;
virDomainInfo dominfo;
int nhostcpus;
if (virNodeGetInfo(conn, &nodeinfo) < 0)
return -1;
nhostcpus = VIR_NODEINFO_MAXCPUS(nodeinfo);
if (virDomainGetInfo(dom, &dominfo) != 0)
return -1;
cpuinfo = malloc(sizeof(virVcpuInfo)*dominfo.nrVirtCpu);
cpumaplen = VIR_CPU_MAPLEN(nhostcpu);
cpumaps = vshMalloc(ctl, dominfo.nrVirtCpu * cpumaplen);
if ((ncpus = virDomainGetVcpus(dom,
cpuinfo, dominfo.nrVirtCpu,
cpumaps, cpumaplen)) < 0)
return -1;