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

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

Compil SysTools sur SunOS - Reza 10/9/2002

File size: 2.8 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#if defined(SunOS)
26 // Max resident size ne semble pas etre defini sur SunOS
27 max_rss = max_datasz;
28#else
29 getrlimit(RLIMIT_RSS, &rl);
30 max_rss = rl.rlim_cur/1024;
31#endif
32 getrlimit(RLIMIT_STACK, &rl);
33 max_stack = rl.rlim_cur/1024;
34
35 cur_datasz = 0;
36 cur_stack = 0;
37 cur_rss = 0;
38 delta_rss = 0;
39 cur_tottm = 0;
40 cur_usrtm = 0;
41 cur_systm = 0;
42 elapsed_time = 0;
43 delta_rss = 0;
44 delta_tottm = 0;
45 delta_elapsed_time = 0;
46 Update();
47
48}
49
50ResourceUsage::~ResourceUsage()
51{
52}
53
54inline uint_8 s_timeval2msec(struct timeval & tv)
55{
56 uint_8 ret = tv.tv_sec; ret *= 1000;
57 ret += tv.tv_usec/1000; return(ret);
58}
59
60int ResourceUsage::Update()
61{
62 struct rusage rsu;
63 int rc = getrusage(RUSAGE_SELF, &rsu);
64 delta_tottm = cur_tottm;
65 delta_rss = cur_rss;
66 cur_usrtm = s_timeval2msec(rsu.ru_utime);
67 cur_systm = s_timeval2msec(rsu.ru_stime);
68 cur_tottm = cur_usrtm+cur_systm;
69 cur_rss = rsu.ru_maxrss;
70 cur_datasz = rsu.ru_idrss;
71 cur_stack = rsu.ru_isrss;
72 delta_tottm = cur_tottm-delta_tottm;
73 delta_rss = cur_rss-delta_rss;
74
75 delta_elapsed_time = elapsed_time;
76 time_t tm = time(NULL);
77 if (elapsed_time == 0) t0_time = tm;
78 elapsed_time = (tm - t0_time)*1000;
79 if (elapsed_time < 1) elapsed_time = 1;
80 delta_elapsed_time = elapsed_time-delta_elapsed_time;
81 return(rc);
82}
83
84void ResourceUsage::Print(ostream& os, int lp, bool upd)
85{
86 if (upd) Update();
87 os << " --------------- ResourceUsage::Print(lp=" << lp
88 <<" ) --------------- " << endl;
89 int load = getAverageCPULoad()*100.;
90 os << " CPU-Usage= " << getCPUTime() << " Elapsed= " << getElapsedTime()
91 << " msec - Load= " << load << " %" << endl;
92 long fracmem = getMemorySize()*100/getMaxMemorySize();
93 os << " MemoryUsage= " << getMemorySize() << " /Max= " << getMaxMemorySize()
94 << " kbytes (" << fracmem << " %)" << endl;
95 if (lp < 1) return;
96 os << " CPU-Usage= " << cur_tottm << "ms (usr,sys)=("
97 << cur_usrtm << "," << cur_systm << ")" << endl;
98 os << " DataSize=" << cur_datasz << " /Max " << max_datasz
99 << " kbytes" << endl;
100 os << " StackSize=" << cur_stack << " /Max " << max_stack
101 << " kbytes" << endl;
102 os << " ResSize=" << cur_rss << " /Max " << max_rss
103 << " kbytes" << endl;
104}
Note: See TracBrowser for help on using the repository browser.