numa_alloc_onnode does not allocate on node passed as argument
Andres Nötzli <[email protected]> Tue, 21 Oct 2014 20:47:19 -0700
| Newsgroups | org.kernel.vger.linux-numa |
|---|---|
| Message-ID | <[email protected]> |
Hi everyone,
I am experiencing a weird problem. When using numa_alloc_onnode repeate=
dly to allocate memory, it does not allocate memory on the node passed =
as an argument.=20
Sample code:
#include <numa.h>
#include <numaif.h>
#include <iostream>
using namespace std;
void find_memory_node_for_addr(void* ptr) {
int numa_node =3D -1;
if(get_mempolicy(&numa_node, NULL, 0, ptr, MPOL_F_NODE | MPOL_F_ADDR=
) < 0)
cout << "WARNING: get_mempolicy failed" << endl;
cout << numa_node << endl;
}
int main() {
int64_t* x;
int64_t n =3D 5000;
//numa_set_preferred(1);
numa_run_on_node(2);
for(int i =3D 0; i < 20; i++) {
size_t s =3D n * sizeof(int64_t);
x =3D (int64_t*)numa_alloc_onnode(s, 1);
for(int j =3D 0; j < n; j++)
x[j] =3D j + i;
find_memory_node_for_addr(x);
}
return 0;
}
Output:
1
1
1
2
1
2
1
2
1
2
1
2
1
2
1
2
1
2
1
2
When uncommenting the line "numa_set_preferred(1);=E2=80=9D, the output=
is all 1s as expected. Am I doing something wrong? Have you seen simil=
ar issues?
I am running Ubuntu 12.04.5 LTS:
$ cat /proc/version
Linux version 3.2.0-29-generic (buildd@allspice) (gcc version 4.6.3 (Ub=
untu/Linaro 4.6.3-1ubuntu5) ) #46-Ubuntu SMP Fri Jul 27 17:03:23 UTC 20=
12
I am using libnuma 2.0.10 but I=E2=80=99ve had the same problem with 2.=
0.8~rc3-1.
Thank you very much,
Andres