[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] RE: [Xen-devel] [Patch] adjust the cpu-affinity to more than 64 cpus
Yeah, now cpu affinity and pin are fine under all IA platform, with no 64 limit :) Thanks James for original patch, and thanks Masaki confirm it! Jinsong Masaki Kanno wrote: > Hi Jinsong, > > Thank you for fixing the issue. > I confirmed that your patch works on both ia32pae and ia64. > > ia32pae: > # xm vcpu-list > Name ID VCPU CPU State Time(s) > CPU Affinity Domain-0 0 0 1 > r-- 33.9 any cpu Domain-0 0 1 > 0 -b- 22.5 any cpu # xm vcpu-pin Domain-0 0 0 > # xm vcpu-list > Name ID VCPU CPU State Time(s) > CPU Affinity Domain-0 0 0 0 > -b- 34.4 0 Domain-0 0 1 1 > r-- 23.2 any cpu > > ia64: > # xm vcpu-list > Name ID VCPU CPU State Time(s) > CPU Affinity Domain-0 0 0 0 > r-- 23.7 any cpu Domain-0 0 1 > 1 -b- 10.6 any cpu Domain-0 0 > 2 2 -b- 6.8 any cpu Domain-0 > 0 3 3 -b- 9.7 any cpu # xm vcpu-pin Domain-0 0 0 > # xm vcpu-list > Name ID VCPU CPU State Time(s) > CPU Affinity Domain-0 0 0 0 > -b- 24.0 0 Domain-0 0 1 1 > -b- 10.8 any cpu Domain-0 0 2 > 2 r-- 6.8 any cpu Domain-0 0 > 3 3 -b- 9.8 any cpu > > Best regards, > Kan > > Wed, 31 Mar 2010 02:23:47 +0800, "Liu, Jinsong" wrote: > >> James and Masaki, >> >> The issue Masaki said does exist, it appear under ia32pae. >> A patch (c/s 21087) is to fix the bug. >> >> Thanks, >> Jinsong >> >> ________________________________ >> From: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx >> [mailto:xen-devel-bounces@lists .xensource.com] On Behalf Of James >> Song >> Sent: Friday, March 19, 2010 5:10 PM >> To: Masaki Kanno; xen-devel@xxxxxxxxxxxxxxxxxxx >> Subject: Re: [Xen-devel] [Patch] adjust the cpu-affinity to more >> than 64 cpus >> >> I update upstream code to c/s 20145. This patch works fine and I >> haven't meet this problem. >> >> linux-2j72:/home # xm vcpu-pin 0 1 0 >> linux-2j72:/home # xm vcpu-list 0 >> Name ID VCPU CPU State Time(s) >> CPU Affinity Domain-0 0 0 0 >> --- 23.4 0 Domain-0 0 1 0 >> r-- 19.2 0 >> >> >> B.T.W, there are something wrong when compile c/s 21046! >> >> -James >> >>>>> Masaki Kanno <kanno.masaki@xxxxxxxxxxxxxx> 2010-3-19 11:14 >>> Hi >>>>> James, >> >> I tested xm vcpu-pin command with xen-unstable changeset 21044. >> The command failed as follows. Also Time(s) values by xm vcpu-list >> command were strange. The values were same in all VCPUs. >> >> # xm vcpu-list >> Name ID VCPU CPU State Time(s) >> CPU Affinity Domain-0 0 0 1 >> r-- 116.5 any cpu Domain-0 0 1 >> 1 r-- 116.5 any cpu # xm vcpu-pin Domain-0 0 0 Error: Cannot >> pin vcpu: 0 to cpu: [0] - (22, 'Invalid argument') >> Usage: xm vcpu-pin <Domain> <VCPU|all> <CPUs|all> >> >> Set which CPUs a VCPU can use. >> # xm vcpu-list >> Name ID VCPU CPU State Time(s) >> CPU Affinity Domain-0 0 0 1 >> r-- 117.0 any cpu Domain-0 0 1 >> 1 r-- 117.0 any cpu >> >> >> I reverted changeset 21044 and 21040, and then I tested xm vcpu-pin >> command again. The command succeeded as follows. >> >> # xm vcpu-list >> Name ID VCPU CPU State Time(s) >> CPU Affinity Domain-0 0 0 0 >> r-- 60.8 any cpu Domain-0 0 1 >> 1 -b- 42.8 any cpu # xm vcpu-pin Domain-0 0 0 # xm vcpu-list >> Name ID VCPU CPU State Time(s) >> CPU Affinity Domain-0 0 0 0 >> r-- 61.6 0 Domain-0 0 1 1 >> -b- 43.2 any cpu >> >> Best regards, >> Kan >> >> Wed, 17 Mar 2010 20:41:22 -0700 (PDT), "James (song wei)" wrote: >> >>> >>> Keir, could you take a look at this issue. >>> New Patch for this issue: >>> Singed-off-by: James (Song Wei) <jsong@xxxxxxxxxx> >>> >>> diff -r 8b269215464b tools/libxc/xc_domain.c >>> --- a/tools/libxc/xc_domain.cWed Mar 10 14:01:32 2010 +0800 >>> +++ b/tools/libxc/xc_domain.cThu Mar 18 11:37:55 2010 +0800 @@ >>> -105,23 +105,28 @@ int xc_vcpu_setaffinity(int xc_handle, >>> uint32_t domid, >>> int vcpu, >>> - uint64_t cpumap) >>> + uint64_t *cpumap, int cpusize) { >>> DECLARE_DOMCTL; >>> int ret = -1; >>> - uint8_t local[sizeof (cpumap)]; >>> + uint8_t *local = malloc(cpusize); >>> >>> + if(local == NULL) >>> + { >>> + PERROR("Could not alloc memory for Xen hypercall"); + >>> goto out; + } >>> domctl.cmd = XEN_DOMCTL_setvcpuaffinity; >>> domctl.domain = (domid_t)domid; >>> domctl.u.vcpuaffinity.vcpu = vcpu; >>> >>> - bitmap_64_to_byte(local, &cpumap, sizeof(cpumap) * 8); >>> + bitmap_64_to_byte(local, cpumap, cpusize * 8); >>> >>> set_xen_guest_handle(domctl.u.vcpuaffinity.cpumap.bitmap, >>> local); >>> >>> - domctl.u.vcpuaffinity.cpumap.nr_cpus = sizeof(cpumap) * 8; >>> + domctl.u.vcpuaffinity.cpumap.nr_cpus = cpusize * 8; >>> >>> - if ( lock_pages(local, sizeof(local)) != 0 ) >>> + if ( lock_pages(local, cpusize) != 0 ) >>> { >>> PERROR("Could not lock memory for Xen hypercall"); >>> goto out; @@ -129,9 +134,10 @@ >>> >>> ret = do_domctl(xc_handle, &domctl); >>> >>> - unlock_pages(local, sizeof(local)); >>> + unlock_pages(local, cpusize); >>> >>> out: >>> + free(local); >>> return ret; >>> } >>> >>> @@ -139,18 +145,25 @@ >>> int xc_vcpu_getaffinity(int xc_handle, >>> uint32_t domid, >>> int vcpu, >>> - uint64_t *cpumap) >>> + uint64_t *cpumap, int cpusize) { >>> DECLARE_DOMCTL; >>> int ret = -1; >>> - uint8_t local[sizeof (cpumap)]; >>> + uint8_t * local = malloc(cpusize); >>> + >>> + if(local == NULL) >>> + { >>> + PERROR("Could not alloc memory for Xen hypercall"); + >>> goto out; + } >>> >>> domctl.cmd = XEN_DOMCTL_getvcpuaffinity; >>> domctl.domain = (domid_t)domid; >>> domctl.u.vcpuaffinity.vcpu = vcpu; >>> >>> + >>> set_xen_guest_handle(domctl.u.vcpuaffinity.cpumap.bitmap, >>> local); - domctl.u.vcpuaffinity.cpumap.nr_cpus = sizeof(cpumap) >>> * 8; + domctl.u.vcpuaffinity.cpumap.nr_cpus = cpusize * 8; >>> >>> if ( lock_pages(local, sizeof(local)) != 0 ) >>> { >>> @@ -161,8 +174,9 @@ >>> ret = do_domctl(xc_handle, &domctl); >>> >>> unlock_pages(local, sizeof (local)); >>> - bitmap_byte_to_64(cpumap, local, sizeof(local) * 8); >>> - out: >>> + bitmap_byte_to_64(cpumap, local, cpusize * 8); +out: >>> + free(local); >>> return ret; >>> } >>> >>> diff -r 8b269215464b tools/libxc/xenctrl.h >>> --- a/tools/libxc/xenctrl.hWed Mar 10 14:01:32 2010 +0800 >>> +++ b/tools/libxc/xenctrl.hThu Mar 18 11:37:55 2010 +0800 @@ >>> -310,11 +310,13 @@ int xc_vcpu_setaffinity(int xc_handle, >>> uint32_t domid, >>> int vcpu, >>> - uint64_t cpumap); >>> + uint64_t *cpumap, >>> + int cpusize); >>> int xc_vcpu_getaffinity(int xc_handle, >>> uint32_t domid, >>> int vcpu, >>> - uint64_t *cpumap); >>> + uint64_t *cpumap, >>> + int cpusize); >>> >>> /** >>> * This function will return information about one or more domains. >>> It is diff -r 8b269215464b tools/python/xen/lowlevel/xc/xc.c >>> --- a/tools/python/xen/lowlevel/xc/xc.cWed Mar 10 14:01:32 2010 >>> +0800 +++ b/tools/python/xen/lowlevel/xc/xc.cThu Mar 18 11:37:55 >>> 2010 +0800 @@ -217,8 +217,12 @@ { >>> uint32_t dom; >>> int vcpu = 0, i; >>> - uint64_t cpumap = ~0ULL; >>> + uint64_t *cpumap; >>> PyObject *cpulist = NULL; >>> + int nr_cpus, size; >>> + xc_physinfo_t info; >>> + xc_cpu_to_node_t map[1]; >>> + uint64_t cpumap_size = sizeof(*cpumap); >>> >>> static char *kwd_list[] = { "domid", "vcpu", "cpumap", NULL }; >>> >>> @@ -226,26 +230,38 @@ >>> &dom, &vcpu, &cpulist) ) >>> return NULL; >>> >>> + set_xen_guest_handle(info.cpu_to_node, map); >>> + info.max_cpu_id = 1; >>> + if ( xc_physinfo(self->xc_handle, &info) != 0 ) >>> + return pyxc_error_to_exception(); >>> + >>> + nr_cpus = info.nr_cpus; >>> + >>> + size = (nr_cpus + cpumap_size * 8 - 1)/ (cpumap_size * 8); >>> + cpumap = malloc(cpumap_size * size); >>> + if(cpumap == NULL) >>> + return pyxc_error_to_exception(); >>> + >>> if ( (cpulist != NULL) && PyList_Check(cpulist) ) { >>> - cpumap = 0ULL; >>> + for ( i = 0; i < size; i++) >>> + { >>> + cpumap[i] = 0ULL; >>> + } >>> for ( i = 0; i < PyList_Size(cpulist); i++ ) { >>> long cpu = PyInt_AsLong(PyList_GetItem(cpulist, i)); >>> - if ( cpu >= 64 ) >>> - { >>> - errno = EINVAL; >>> - PyErr_SetFromErrno(xc_error_obj); >>> - return NULL; >>> - } >>> - cpumap |= (uint64_t)1 << cpu; >>> + cpumap[cpu / (cpumap_size * 8)] |= (uint64_t)1 << (cpu >>> % (cpumap_size * 8)); } >>> } >>> >>> - if ( xc_vcpu_setaffinity(self->xc_handle, dom, vcpu, cpumap) >>> != 0 ) + if ( xc_vcpu_setaffinity(self->xc_handle, dom, vcpu, >>> cpumap, size * cpumap_size) != 0 ) + { >>> + free(cpumap); >>> return pyxc_error_to_exception(); >>> - >>> + } >>> Py_INCREF(zero); >>> + free(cpumap); >>> return zero; >>> } >>> >>> @@ -365,7 +381,11 @@ >>> uint32_t dom, vcpu = 0; >>> xc_vcpuinfo_t info; >>> int rc, i; >>> - uint64_t cpumap; >>> + uint64_t *cpumap; >>> + int nr_cpus, size; >>> + xc_physinfo_t pinfo = { 0 }; >>> + xc_cpu_to_node_t map[1]; >>> + uint64_t cpumap_size = sizeof(*cpumap); >>> >>> static char *kwd_list[] = { "domid", "vcpu", NULL }; >>> >>> @@ -373,12 +393,25 @@ >>> &dom, &vcpu) ) return >>> NULL; >>> >>> + set_xen_guest_handle(pinfo.cpu_to_node, map); >>> + pinfo.max_cpu_id = 1; >>> + if ( xc_physinfo(self->xc_handle, &pinfo) != 0 ) >>> + return pyxc_error_to_exception(); >>> + nr_cpus = pinfo.nr_cpus; >>> rc = xc_vcpu_getinfo(self->xc_handle, dom, vcpu, &info); if >>> ( rc < 0 ) return pyxc_error_to_exception(); >>> - rc = xc_vcpu_getaffinity(self->xc_handle, dom, vcpu, &cpumap); >>> + size = (nr_cpus + cpumap_size * 8 - 1)/ (cpumap_size * 8); + >>> + if((cpumap = malloc(cpumap_size * size)) == NULL) >>> + return pyxc_error_to_exception(); >>> + >>> + rc = xc_vcpu_getaffinity(self->xc_handle, dom, vcpu, cpumap, >>> cpumap_size * size); if ( rc < 0 ) >>> + { >>> + free(cpumap); >>> return pyxc_error_to_exception(); >>> + } >>> >>> info_dict = Py_BuildValue("{s:i,s:i,s:i,s:L,s:i}", >>> "online", info.online, @@ -386,19 >>> +419,19 @@ "running", info.running, >>> "cpu_time", info.cpu_time, >>> "cpu", info.cpu); - >>> cpulist = PyList_New(0); >>> - for ( i = 0; cpumap != 0; i++ ) >>> + for ( i = 0; i < nr_cpus; i++ ) >>> { >>> - if ( cpumap & 1 ) { >>> + if (*(cpumap + i / (cpumap_size * 8)) & 1 ) { >>> PyObject *pyint = PyInt_FromLong(i); >>> PyList_Append(cpulist, pyint); >>> Py_DECREF(pyint); >>> } >>> - cpumap >>= 1; >>> + cpumap[i / (cpumap_size * 8)] >>= 1; >>> } >>> PyDict_SetItemString(info_dict, "cpumap", cpulist); >>> Py_DECREF(cpulist); + free(cpumap); >>> return info_dict; >>> } >>> >>> http://old.nabble.com/file/p27941371/adjust_vcpuaffinity_more_cpu.patch >>> adjust_vcpuaffinity_more_cpu.patch >>> >>> >>> >>> -- >>> View this message in context: >>> http://old.nabble.com/-Patch--adjust-the-cpu- >>> affinity-to-more-than-64-cpus-tp27928229p27941371.html >>> Sent from the Xen - Dev mailing list archive at Nabble.com. >>> >>> >>> _______________________________________________ >>> Xen-devel mailing list >>> Xen-devel@xxxxxxxxxxxxxxxxxxx >>> http://lists.xensource.com/xen-devel >> >> >> -------------------------------text/plain------------------------------- >> _______________________________________________ >> Xen-devel mailing list >> Xen-devel@xxxxxxxxxxxxxxxxxxx >> http://lists.xensource.com/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |