numa_alloc_onnode does not allocate on node passed as argument

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi everyone,

I am experiencing a weird problem. When using numa_alloc_onnode repeatedly to allocate memory, it does not allocate memory on the node passed as an argument. 

Sample code:
#include <numa.h>
#include <numaif.h>
#include <iostream>
using namespace std;

void find_memory_node_for_addr(void* ptr) {
   int numa_node = -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 = 5000;
   //numa_set_preferred(1);

   numa_run_on_node(2);
   for(int i = 0; i < 20; i++) {
      size_t s = n * sizeof(int64_t);
      x = (int64_t*)numa_alloc_onnode(s, 1);
      for(int j = 0; j < n; j++)
         x[j] = 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);”, the output is all 1s as expected. Am I doing something wrong? Have you seen similar 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 (Ubuntu/Linaro 4.6.3-1ubuntu5) ) #46-Ubuntu SMP Fri Jul 27 17:03:23 UTC 2012

I am using libnuma 2.0.10 but I’ve had the same problem with 2.0.8~rc3-1.

Thank you very much,
Andres
--
To unsubscribe from this list: send the line "unsubscribe linux-numa" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]     [Devices]

  Powered by Linux