Home | History | Annotate | Download | only in numa
      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 (at) in.ibm.com               */
     28 /*                                                                            */
     29 /* History:     Created - Nov 28 2007 - Pradeep Kumar Surisetty               */
     30 /*                                                 pradeepkumars (at) 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;
     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 
     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 
     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