Le 06/09/2012 10:44, Samuel Thibault a écrit : > Gabriele Fatigati, le Thu 06 Sep 2012 10:12:38 +0200, a écrit : >> mbind hwloc_linux_set_area_membind() fails: >> >> Error from HWLOC mbind: Cannot allocate memory > Ok. mbind is not really supposed to allocate much memory, but it still > does allocate some, to record the policy > >> // hwloc_obj_t obj = hwloc_get_obj_by_type(topology, HWLOC_OBJ_NODE, >> tid); >> hwloc_obj_t obj = hwloc_get_obj_by_type(topology, HWLOC_OBJ_PU, tid); >> hwloc_cpuset_t cpuset = hwloc_bitmap_dup(obj->cpuset); >> hwloc_bitmap_singlify(cpuset); >> hwloc_set_cpubind(topology, cpuset, HWLOC_CPUBIND_THREAD); >> >> for( i = chunk*tid; i < len; i+=PAGE_SIZE) { >> // res = hwloc_set_area_membind_nodeset(topology, &array[i], >> PAGE_SIZE, obj->nodeset, HWLOC_MEMBIND_BIND, HWLOC_MEMBIND_THREAD); >> res = hwloc_set_area_membind(topology, &array[i], PAGE_SIZE, >> cpuset, HWLOC_MEMBIND_BIND, HWLOC_MEMBIND_THREAD); > and I'm afraid that calling set_area_membind for each page might be too > dense: the kernel is probably allocating a memory policy record for each > page, not being able to merge adjacent equal policies. >
It's supposed to merge VMA with same policies (from what I understand in the code), but I don't know if that actually works. Maybe Gabriele found a kernel bug :) Brice