--- projects/libstatgrab/src/libstatgrab/memory_stats.c 2010/02/21 10:04:26 1.36 +++ projects/libstatgrab/src/libstatgrab/memory_stats.c 2010/10/03 18:35:57 1.37 @@ -18,7 +18,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA * 02111-1307 USA * - * $Id: memory_stats.c,v 1.36 2010/02/21 10:04:26 tdb Exp $ + * $Id: memory_stats.c,v 1.37 2010/10/03 18:35:57 tdb Exp $ */ #ifdef HAVE_CONFIG_H @@ -56,6 +56,10 @@ #include #include #endif +#ifdef AIX +#include +#include +#endif #ifdef WIN32 #include #include "win32.h" @@ -100,6 +104,10 @@ sg_mem_stats *sg_get_mem_stats(){ size_t size; int pagesize, page_multiplier; #endif +#ifdef AIX + perfstat_memory_total_t mem; + long long pagesize; +#endif #ifdef WIN32 MEMORYSTATUSEX memstats; #endif @@ -123,6 +131,23 @@ sg_mem_stats *sg_get_mem_stats(){ mem_stat.total = ((long long) pstat_static->physical_memory) * pagesize; mem_stat.free = ((long long) pstat_dynamic.psd_free) * pagesize; mem_stat.used = mem_stat.total - mem_stat.free; +#endif +#ifdef AIX + if((pagesize=sysconf(_SC_PAGESIZE)) == -1){ + sg_set_error_with_errno(SG_ERROR_SYSCONF, "_SC_PAGESIZE"); + return NULL; + } + + /* return code is number of structures returned */ + if(perfstat_memory_total(NULL, &mem, sizeof(perfstat_memory_total_t), 1) != 1) { + sg_set_error_with_errno(SG_ERROR_SYSCTLBYNAME, "perfstat_memory_total"); + return NULL; + } + + mem_stat.total = ((long long) mem.real_total) * pagesize; + mem_stat.free = ((long long) mem.real_free) * pagesize; + mem_stat.used = ((long long) mem.real_inuse) * pagesize; + mem_stat.cache = ((long long) mem.numperm) * pagesize; #endif #ifdef SOLARIS if((pagesize=sysconf(_SC_PAGESIZE)) == -1){