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

Last change on this file since 2124 was 2101, checked in by ansari, 23 years ago

Ajout classe ResourceUsage - Reza 16/7/2002

File size: 2.7 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
72 delta_elapsed_time = elapsed_time;
73 time_t tm = time(NULL);
74 if (elapsed_time == 0) t0_time = tm;
75 elapsed_time = (tm - t0_time)*1000;
76 if (elapsed_time < 1) elapsed_time = 1;
77 delta_elapsed_time = elapsed_time-delta_elapsed_time;
78 return(rc);
79}
80
81void ResourceUsage::Print(ostream& os, int lp, bool upd)
82{
83 if (upd) Update();
84 os << " --------------- ResourceUsage::Print(lp=" << lp
85 <<" ) --------------- " << endl;
86 int load = getAverageCPULoad()*100.;
87 os << " CPU-Usage= " << getCPUTime() << " Elapsed= " << getElapsedTime()
88 << " msec - Load= " << load << " %" << endl;
89 long fracmem = getMemorySize()*100/getMaxMemorySize();
90 os << " MemoryUsage= " << getMemorySize() << " /Max= " << getMaxMemorySize()
91 << " kbytes (" << fracmem << " %)" << endl;
92 if (lp < 1) return;
93 os << " CPU-Usage= " << cur_tottm << "ms (usr,sys)=("
94 << cur_usrtm << "," << cur_systm << ")" << endl;
95 os << " DataSize=" << cur_datasz << " /Max " << max_datasz
96 << " kbytes" << endl;
97 os << " StackSize=" << cur_stack << " /Max " << max_stack
98 << " kbytes" << endl;
99 os << " ResSize=" << cur_rss << " /Max " << max_rss
100 << " kbytes" << endl;
101}
Note: See TracBrowser for help on using the repository browser.