| /******************************************************************************/ |
| /* */ |
| /* Copyright (c) International Business Machines Corp., 2007 */ |
| /* */ |
| /* This program is free software; you can redistribute it and/or modify */ |
| /* it under the terms of the GNU General Public License as published by */ |
| /* the Free Software Foundation; either version 2 of the License, or */ |
| /* (at your option) any later version. */ |
| /* */ |
| /* This program is distributed in the hope that it will be useful, */ |
| /* but WITHOUT ANY WARRANTY; without even the implied warranty of */ |
| /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See */ |
| /* the GNU General Public License for more details. */ |
| /* */ |
| /* You should have received a copy of the GNU General Public License */ |
| /* along with this program; if not, write to the Free Software */ |
| /* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ |
| /* */ |
| /******************************************************************************/ |
| |
| /******************************************************************************/ |
| /* */ |
| /* File: numa_node_size.c */ |
| /* */ |
| /* Description: Invokes numa_node_size() API */ |
| /* */ |
| /* Author: Pradeep Kumar Surisetty pradeepkumars@in.ibm.com */ |
| /* */ |
| /* History: Created - Nov 28 2007 - Pradeep Kumar Surisetty */ |
| /* pradeepkumars@in.ibm.com */ |
| /* */ |
| /******************************************************************************/ |
| |
| #include "config.h" |
| #include <stdio.h> |
| #include <stdlib.h> |
| #if HAVE_NUMA_H |
| #include <numa.h> |
| #endif |
| |
| int numa_exit_on_error = 0; |
| char *fmt_mem(unsigned long long mem, char *buf) |
| { |
| if (mem == -1L) |
| sprintf(buf, "<not available>"); |
| else |
| sprintf(buf, "%Lu MB", mem >> 20); |
| return buf; |
| } |
| |
| void hardware(void) |
| { |
| #if HAVE_NUMA_H |
| int i; |
| int maxnode = numa_max_node(); |
| printf("available: %d nodes (0-%d)\n", 1 + maxnode, maxnode); |
| for (i = 0; i <= maxnode; i++) { |
| char buf[64]; |
| long fr; |
| unsigned long sz = numa_node_size(i, &fr); |
| printf("node %d cpus:", i); |
| printf("node %d size: %s\n", i, fmt_mem(sz, buf)); |
| printf("node %d free: %s\n", i, fmt_mem(fr, buf)); |
| } |
| #endif |
| } |
| |
| int main(void) |
| { |
| #if HAVE_NUMA_H |
| nodemask_t nodemask; |
| void hardware(); |
| if (numa_available() < 0) { |
| printf("This system does not support NUMA policy\n"); |
| numa_error("numa_available"); |
| numa_exit_on_error = 1; |
| exit(numa_exit_on_error); |
| } |
| nodemask_zero(&nodemask); |
| nodemask_set(&nodemask, 1); |
| numa_bind(&nodemask); |
| hardware(); |
| return numa_exit_on_error; |
| #else |
| printf("NUMA is not available\n"); |
| return 1; |
| #endif |
| } |