1 /******************************************************************************/
2 /* */
3 /* Copyright (c) International Business Machines Corp., 2007 */
4 /* */
5 /* This program is free software; you can redistribute it and/or modify */
6 /* it under the terms of the GNU General Public License as published by */
7 /* the Free Software Foundation; either version 2 of the License, or */
8 /* (at your option) any later version. */
9 /* */
10 /* This program is distributed in the hope that it will be useful, */
11 /* but WITHOUT ANY WARRANTY; without even the implied warranty of */
12 /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See */
13 /* the GNU General Public License for more details. */
14 /* */
15 /* You should have received a copy of the GNU General Public License */
16 /* along with this program; if not, write to the Free Software */
17 /* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */
18 /* */
19 /******************************************************************************/
20
21 /******************************************************************************/
22 /* */
23 /* File: numa_node_size.c */
24 /* */
25 /* Description: Invokes numa_node_size() API */
26 /* */
27 /* Author: Pradeep Kumar Surisetty pradeepkumars@in.ibm.com */
28 /* */
29 /* History: Created - Nov 28 2007 - Pradeep Kumar Surisetty */
30 /* pradeepkumars@in.ibm.com */
31 /* */
32 /******************************************************************************/
33
34 #include "config.h"
35 #include <stdio.h>
36 #include <stdlib.h>
37 #if HAVE_NUMA_H
38 #include <numa.h>
39 #endif
40
41 int numa_exit_on_error = 0;
fmt_mem(unsigned long long mem,char * buf)42 char *fmt_mem(unsigned long long mem, char *buf)
43 {
44 if (mem == -1L)
45 sprintf(buf, "<not available>");
46 else
47 sprintf(buf, "%Lu MB", mem >> 20);
48 return buf;
49 }
50
hardware(void)51 void hardware(void)
52 {
53 #if HAVE_NUMA_H
54 int i;
55 int maxnode = numa_max_node();
56 printf("available: %d nodes (0-%d)\n", 1 + maxnode, maxnode);
57 for (i = 0; i <= maxnode; i++) {
58 char buf[64];
59 long fr;
60 unsigned long sz = numa_node_size(i, &fr);
61 printf("node %d cpus:", i);
62 printf("node %d size: %s\n", i, fmt_mem(sz, buf));
63 printf("node %d free: %s\n", i, fmt_mem(fr, buf));
64 }
65 #endif
66 }
67
main(void)68 int main(void)
69 {
70 #if HAVE_NUMA_H
71 nodemask_t nodemask;
72 void hardware();
73 if (numa_available() < 0) {
74 printf("This system does not support NUMA policy\n");
75 numa_error("numa_available");
76 numa_exit_on_error = 1;
77 exit(numa_exit_on_error);
78 }
79 nodemask_zero(&nodemask);
80 nodemask_set(&nodemask, 1);
81 numa_bind(&nodemask);
82 hardware();
83 return numa_exit_on_error;
84 #else
85 printf("NUMA is not available\n");
86 return 1;
87 #endif
88 }
89