libvirt的api virDomainGetVcpus中的cpumaps和maplen参数是什么

Wal*_*man 5 operating-system libvirt

我正在尝试获取在我的机器上运行的 vcpus 的信息,同样我正在使用 libvirt。我无法理解如何使用具有 cpumaps 和 maplen 参数的 api virDomainGetVcpus。

我正在使用 C。如果您有一些见解,请告诉我。

谢谢。

小智 8

您需要使用 virDomainGetInfo 和 virNodeGetInfo 来来宾来宾 CPU 的数量和主机 CPU 的数量。然后你可以分配一个合适大小的地图。这段代码可以解决问题:

 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;
Run Code Online (Sandbox Code Playgroud)