SURFEX v8.1
General documentation of Surfex
getrss.c
Go to the documentation of this file.
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <unistd.h>
4 #include "getstatm.h"
5 
6 typedef long long int ll_t;
7 
8 #if defined(CRAY) && !defined(SV2)
9 #define getrss GETRSS
10 #else
11 #define getrss getrss_
12 #endif
13 
14 #if defined(RS6K) || defined(SGI) || defined(NECSX)
15 #include <sys/resource.h>
16 
17 #if defined(RS6K) && defined(__64BIT__)
18 #if defined(USE_GETPROCS)
19 /* From http://www-941.ibm.com/collaboration/wiki/display/WikiPtype/ryo
20  Also : Thanks to Oliver Treiber, ECMWF, 16-Jan-2007 for useful discussions !! */
21 #include <procinfo.h>
22 #include <sys/time.h>
23 extern int getprocs64 (struct procentry64 *ProcessBuffer,
24  int ProcessSize, struct fdsinfo64 *FileBuffer, int FileSize,
25  pid_t *IndexPointer, int Count);
26 /* By the way : getprocs() for 32-bit addressing may also be worth trying */
27 #endif
28 #endif
29 
30 ll_t
32 {
33  const ll_t scaler = 1024; /* in kilobytes */
34  ll_t rc = 0;
35 #if defined(__64BIT__)
36 #if defined(USE_GETPROCS)
37  /* IBM RS6K with -DUSE_GETPROCS */
38  struct procentry64 procs;
39  pid_t mypid = getpid();
40  rc = getprocs64(&procs, sizeof(procs), NULL, 0, &mypid, 1);
41  rc = (rc == 1) ? (ll_t) procs.pi_drss*4*scaler : 0;
42 #else
43  struct rusage64 r;
44  rc = getrusage64(RUSAGE_SELF, &r);
45  rc = (rc == 0) ? (ll_t) r.ru_maxrss * scaler : 0;
46 #endif
47 #else
48  struct rusage r;
49  rc = getrusage(RUSAGE_SELF, &r);
50  rc = (rc == 0) ? (ll_t) r.ru_maxrss * scaler : 0;
51 #endif
52  return rc;
53 }
54 
55 #else
56 
57 #if defined(LINUX)
58 static ll_t basesize = -1;
59 static size_t pagesize = 4096;
60 ll_t getrss()
61 {
62  struct statm sm;
63  ll_t rc = 0;
64  if (getstatm(&sm) == 0) {
65  if (basesize < 0) { /* the very first time */
66  basesize = sm.resident;
67  pagesize = getpagesize();
68  if (pagesize <= 0) pagesize = 4096;
69  }
70  rc = (sm.resident - basesize) * pagesize;
71  }
72  return rc;
73 }
74 #else
75 ll_t getrss()
76 {
77  ll_t rc = (ll_t)((char *)sbrk(0) - (char *)0);
78  return rc;
79 }
80 #endif
81 
82 #endif
83 
int getprocs64(struct procentry64 *ProcessBuffer, int ProcessSize, struct fdsinfo64 *FileBuffer, int FileSize, pid_t *IndexPointer, int Count)
int getstatm(struct statm *sm)
Definition: getstatm.c:7
long long int ll_t
Definition: privpub.h:293
int resident
Definition: getstatm.h:19
long long int ll_t
Definition: getrss.c:6
Definition: getstatm.h:16
ll_t getrss()
Definition: getrss.c:31
static size_t pagesize
Definition: getrss.c:59
static ll_t basesize
Definition: getrss.c:58