source: Sophya/trunk/SophyaLib/SysTools/resusage.cc@ 2183

Last change on this file since 2183 was 2159, checked in by ansari, 23 years ago

Correction/ajout getCPULoad() ds resusage.h , Reza 4/8/2002

File size: 2.6 KB
Line 
1#include "resusage.h"
2
3#include <sys/types.h>
4#include <sys/time.h>
5#include <sys/resource.h>
6#include <unistd.h>
7#include <time.h>
8
9/*!
10 \class SOPHYA::ResourceUsage
11 \ingroup SysTools
12 This class gives acces to various system resource usage
13 (CPU, memory, ...).
14 All returned values are in kilobytes for memory consumptions
15 and in milli-seconds fo CPU and elapsed times.
16 The information should be updated through the call to the
17 Update() method.
18*/
19
20ResourceUsage::ResourceUsage()
21{
22 struct rlimit rl;
23 getrlimit(RLIMIT_DATA, &rl);
24 max_datasz = rl.rlim_cur/1024;
25 getrlimit(RLIMIT_RSS, &rl);
26 max_rss = rl.rlim_cur/1024;
27 getrlimit(RLIMIT_STACK, &rl);
28 max_stack = rl.rlim_cur/1024;
29
30 cur_datasz = 0;
31 cur_stack = 0;
32 cur_rss = 0;
33 delta_rss = 0;
34 cur_tottm = 0;
35 cur_usrtm = 0;
36 cur_systm = 0;
37 elapsed_time = 0;
38 delta_rss = 0;
39 delta_tottm = 0;
40 delta_elapsed_time = 0;
41 Update();
42
43}
44
45ResourceUsage::~ResourceUsage()
46{
47}
48
49inline uint_8 s_timeval2msec(struct timeval & tv)
50{
51 uint_8 ret = tv.tv_sec; ret *= 1000;
52 ret += tv.tv_usec/1000; return(ret);
53}
54
55int ResourceUsage::Update()
56{
57 struct rusage rsu;
58 int rc = getrusage(RUSAGE_SELF, &rsu);
59 delta_tottm = cur_tottm;
60 delta_rss = cur_rss;
61 cur_usrtm = s_timeval2msec(rsu.ru_utime);
62 cur_systm = s_timeval2msec(rsu.ru_stime);
63 cur_tottm = cur_usrtm+cur_systm;
64 cur_rss = rsu.ru_maxrss;
65 cur_datasz = rsu.ru_idrss;
66 cur_stack = rsu.ru_isrss;
67 delta_tottm = cur_tottm-delta_tottm;
68 delta_rss = cur_rss-delta_rss;
69
70 delta_elapsed_time = elapsed_time;
71 time_t tm = time(NULL);
72 if (elapsed_time == 0) t0_time = tm;
73 elapsed_time = (tm - t0_time)*1000;
74 if (elapsed_time < 1) elapsed_time = 1;
75 delta_elapsed_time = elapsed_time-delta_elapsed_time;
76 return(rc);
77}
78
79void ResourceUsage::Print(ostream& os, int lp, bool upd)
80{
81 if (upd) Update();
82 os << " --------------- ResourceUsage::Print(lp=" << lp
83 <<" ) --------------- " << endl;
84 int load = getAverageCPULoad()*100.;
85 os << " CPU-Usage= " << getCPUTime() << " Elapsed= " << getElapsedTime()
86 << " msec - Load= " << load << " %" << endl;
87 long fracmem = getMemorySize()*100/getMaxMemorySize();
88 os << " MemoryUsage= " << getMemorySize() << " /Max= " << getMaxMemorySize()
89 << " kbytes (" << fracmem << " %)" << endl;
90 if (lp < 1) return;
91 os << " CPU-Usage= " << cur_tottm << "ms (usr,sys)=("
92 << cur_usrtm << "," << cur_systm << ")" << endl;
93 os << " DataSize=" << cur_datasz << " /Max " << max_datasz
94 << " kbytes" << endl;
95 os << " StackSize=" << cur_stack << " /Max " << max_stack
96 << " kbytes" << endl;
97 os << " ResSize=" << cur_rss << " /Max " << max_rss
98 << " kbytes" << endl;
99}
Note: See TracBrowser for help on using the repository browser.