[libvirt] [PATCH] nodeinfo: Get the correct CPU number on AMD Magny Cours platform
Stefan Berger
stefanb at linux.vnet.ibm.com
Mon May 14 12:01:37 UTC 2012
On 05/14/2012 04:25 AM, Osier Yang wrote:
> "Instead of developing one CPU with 12 cores, the Magny Cours is
> actually two 6 core “Bulldozer” CPUs combined in to one package"
>
> I.e, each package has two NUMA nodes, and the two numa nodes share
> the same core ID set (0-6), which means parsing the cores number
> from sysfs doesn't work in this case.
>
> And the wrong CPU number could cause three problems for libvirt:
>
> 1) performance lost
>
> A domain without "cpuset" or "placement='auto'" (to drive numad)
> specified will be only pinned to part of the CPUs.
>
> 2) domain can be started
>
> If a domain uses numad, and the advisory nodeset returned from
> numad contains node which exceeds the range of wrong total CPU
> number. The domain will fail to start, as the bitmask passed to
> sched_setaffinity could be fully filled with zero.
>
> 3) wrong CPU number affects lots of stuffs.
>
> E.g. for command "virsh vcpuinfo", "virsh vcpupin", it will always
> output with the truncated CPU list.
>
> For more details:
>
> https://www.redhat.com/archives/libvir-list/2012-May/msg00607.html
>
> This patch is to fix the problem by parsing /proc/cpuinfo to get
> the value of field "cpu cores", and use it as nodeinfo->cores if
> it's greater than the cores number from sysfs.
>
> @@ -265,6 +266,22 @@ int linuxNodeInfoCPUPopulate(FILE *cpuinfo,
> && (*p == '\0' || *p == '.' || c_isspace(*p)))
> nodeinfo->mhz = ui;
> }
> +
> + if (STRPREFIX(buf, "cpu cores")) {
> + char *p;
> + unsigned int ui;
> + buf += 9;
Nit: empty line after var. declaration.
> + while (*buf&& c_isspace(*buf))
> + buf++;
> + if (*buf != ':' || !buf[1]) {
> + nodeReportError(VIR_ERR_INTERNAL_ERROR,
> + "%s", _("parsing cpuinfo cpu MHz"));
> + return -1;
> + }
This should probably say _("parsing number of CPU cores")
Stefan
More information about the libvir-list
mailing list