ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/libstatgrab/src/libstatgrab/memory_stats.c
(Generate patch)

Comparing projects/libstatgrab/src/libstatgrab/memory_stats.c (file contents):
Revision 1.32 by tdb, Sat Sep 24 13:29:22 2005 UTC vs.
Revision 1.33 by tdb, Sun Oct 29 23:01:16 2006 UTC

# Line 40 | Line 40
40   #include <sys/sysctl.h>
41   #include <unistd.h>
42   #endif
43 < #if defined(NETBSD) || defined(OPENBSD)
43 > #if defined(NETBSD)
44   #include <sys/param.h>
45   #include <sys/time.h>
46   #include <uvm/uvm.h>
47   #endif
48 + #if defined(OPENBSD)
49 + #include <sys/param.h>
50 + #include <sys/types.h>
51 + #include <sys/sysctl.h>
52 + #include <sys/unistd.h>
53 + #endif
54   #ifdef HPUX
55   #include <sys/param.h>
56   #include <sys/pstat.h>
# Line 85 | Line 91 | sg_mem_stats *sg_get_mem_stats(){
91          u_int inactive_count;
92          int pagesize;
93   #endif
94 < #if defined(NETBSD) || defined(OPENBSD)
94 > #if defined(NETBSD)
95          struct uvmexp *uvm;
96   #endif
97 + #if defined(OPENBSD)
98 +        int mib[2];
99 +        struct vmtotal vmtotal;
100 +        size_t size;
101 +        static int pagesize, pageshift;
102 + #endif
103   #ifdef WIN32
104          MEMORYSTATUSEX memstats;
105   #endif
# Line 218 | Line 230 | sg_mem_stats *sg_get_mem_stats(){
230          mem_stat.used=physmem-mem_stat.free;
231   #endif
232  
233 < #if defined(NETBSD) || defined(OPENBSD)
233 > #if defined(NETBSD)
234          if ((uvm = sg_get_uvmexp()) == NULL) {
235                  return NULL;
236          }
237  
238          mem_stat.total = uvm->pagesize * uvm->npages;
227 #ifdef NETBSD
239          mem_stat.cache = uvm->pagesize * (uvm->filepages + uvm->execpages);
229 #else
230        /* Can't find cache memory on OpenBSD */
231        mem_stat.cache = 0;
232 #endif
240          mem_stat.free = uvm->pagesize * (uvm->free + uvm->inactive);
241          mem_stat.used = mem_stat.total - mem_stat.free;
242 + #endif
243 +
244 + #if defined(OPENBSD)
245 +        /* get the page size with "getpagesize" and calculate pageshift
246 +         * from it
247 +         */
248 +        pagesize = getpagesize();
249 +        pageshift = 0;
250 +        while (pagesize > 1) {
251 +                pageshift++;
252 +                pagesize >>= 1;
253 +        }
254 +
255 +        /* we only need the amount of log(2)1024 for our conversion */
256 +        pageshift -= 10;        /* Log base 2 of 1024 is 10 (2^10 == 1024) */
257 + #define pagetok(size) ((size) << pageshift)
258 +        mib[0] = CTL_VM;
259 +        mib[1] = VM_METER;
260 +        size = sizeof(vmtotal);
261 +        if (sysctl(mib, 2, &vmtotal, &size, NUSG_ERROR_SYSCTL, 0) < 0) {
262 +                sg_set_error_with_errno(SG_ERROR_SYSCTL,
263 +                                        "CTL_VM.VM_METER");
264 +                return NULL;
265 +        }
266 +        /* convert memory stats to Kbytes */
267 +        mem_stat.used = pagetok(vmtotal.t_rm);          /* total real mem in use */
268 +        mem_stat.cache = 0;                             /* ? */
269 +        mem_stat.free = pagetok(vmtotal.t_free);        /* free memory pages */
270 +        mem_stat.total = (mem_stat.used + mem_stat.free);
271   #endif
272  
273   #ifdef WIN32

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines