Что такое аргумент 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;
Другие вопросы по тегам