File: tshared.c

package info (click to toggle)
numactl 2.0.11-2.1
  • links: PTS
  • area: main
  • in suites: stretch
  • size: 1,912 kB
  • ctags: 922
  • sloc: sh: 11,860; ansic: 6,542; makefile: 104
file content (50 lines) | stat: -rw-r--r-- 958 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
#include <numa.h>
#include <numaif.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/wait.h>
#include <unistd.h>

#define err(x) perror(x),exit(1)

enum SZ { 
	MEMSZ = 100<<20, 
	NTHR = 10,
}; 

/* test if shared interleaving state works. */
int main(void)
{ 
	int i, k;
	char *mem;
	int pagesz = getpagesize();
	int max_node;

	if (numa_available() < 0) {
		printf("no NUMA API available\n"); 
		exit(1);
	}
	max_node = numa_max_node(); 
	mem = numa_alloc_interleaved(MEMSZ); 
	for (i = 0; i < NTHR; i++) { 
		if (fork() == 0) { 
			for (k = i*pagesz; k < MEMSZ; k += pagesz * NTHR) { 
				mem[k] = 1;
			} 
			_exit(0); 
		} 
	} 
	for (i = 0; i < NTHR; i++)
		wait(NULL);
	k = 0; 
	for (i = 0; i < MEMSZ; i += pagesz) { 
		int nd; 
		if (get_mempolicy(&nd, NULL, 0, mem + i, MPOL_F_NODE|MPOL_F_ADDR) < 0)
			err("get_mempolicy");
		if (nd != k) 
			printf("offset %d node %d expected %d\n", i, nd, k); 
		k = (k+1)%(max_node+1); 
	} 
	
	return 0;
}