source: Sophya/trunk/SophyaLib/SysTools/resusage.h@ 3753

Last change on this file since 3753 was 2598, checked in by ansari, 21 years ago

Documentation (ajoutee ou completee) pour les classes du module SysTools - Reza 11 Aout 2004

File size: 4.8 KB
RevLine 
[2101]1// This may look like C code, but it is really -*- C++ -*-
2// permet d'obtenir des informations sur les ressources utilisees
3// R. Ansari - Juillet 2002
4// LAL (Orsay) / IN2P3-CNRS DAPNIA/SPP (Saclay) / CEA
5
6#ifndef RESUSAGE_H_SEEN
7#define RESUSAGE_H_SEEN
8
9#include "machdefs.h"
[2322]10#include <iostream>
[2101]11
12namespace SOPHYA {
13
[2256]14//! Acces to information about resource usage (memory, CPU, ...)
[2101]15
16class ResourceUsage
17{
18public:
[2598]19/*!
20 - RU_Self : Resource usage for the process itself
21 - RU_Children : Resource usage for the child processes
22 - RU_All : resource usage for the process itself and its child processes
23*/
[2487]24 enum RU_ProcGrp {RU_Self=0, RU_Children=1, RU_All=2};
[2598]25
[2487]26 ResourceUsage(RU_ProcGrp pg=RU_Self);
[2101]27 ~ResourceUsage();
28
29 int Update();
30
[2256]31 // Process Id
32 //! Returns the process id.
33 inline uint_8 getProcessId() { return cur_pid; }
34
[2101]35 // Memory usage in kilo-bytes
36 // NOTE: getDataSize() getStackSize() retournent des valeurs bizarres
[2212]37 //! Returns the current memory (Resident) size (in kilo-bytes)
[2101]38 inline uint_8 getMemorySize() { return cur_rss; }
[2212]39 //! Returns the maximum allowed memory size: Min( \c MaxResidentSize , \c MaxDataSize ))
[2101]40 inline uint_8 getMaxMemorySize()
[2108]41 { return((getMaxResidentSize()<getMaxDataSize()) ?
42 getMaxResidentSize() :getMaxDataSize() ); }
[2212]43 //! Returns the increase in memory usage since the previous call to \b Update()
[2101]44 inline uint_8 getDeltaMemorySize() { return delta_rss; }
45
[2212]46 //! Returns the maximum allowd data segment size (in kilo-bytes)
[2108]47 inline uint_8 getMaxDataSize() { return((max_datasz>0)?max_datasz:1024); }
[2212]48 //! Returns the current data segment size (in kilo-bytes)
[2101]49 inline uint_8 getDataSize() { return cur_datasz; }
[2212]50 //! Returns the maximum allowed resident size (in kilo-bytes)
[2108]51 inline uint_8 getMaxResidentSize() { return((max_rss>0)?max_rss:1024); }
[2212]52 //! Returns the current resident memory size (in kilo-bytes)
[2101]53 inline uint_8 getResidentSize() { return cur_rss; }
[2212]54 //! Returns the maximum allowed stack size (in kilo-bytes)
[2101]55 inline uint_8 getMaxStackSize() { return max_stack; }
[2212]56 //! Returns the current stack size (in kilo-bytes)
[2101]57 inline uint_8 getStackSize() { return cur_stack; }
58
59
60 // Time in milli-second
[2212]61 //! Returns the total CPU time used (in milli-second)
[2101]62 inline uint_8 getCPUTime() { return cur_tottm; }
[2212]63 //! Returns the total elapsed time (in milli-second)
[2101]64 inline uint_8 getElapsedTime() { return elapsed_time; }
[2212]65 //! Returns the average load ( CPU time / elapsed time)
[2108]66 inline double getAverageCPULoad()
67 { return ((elapsed_time>1) ? (double)cur_tottm/(double)elapsed_time: 1.);}
[2101]68
[2212]69 //! Returns the CPU time used since the previous call to \b Update() (in milli-second)
[2101]70 inline uint_8 getDeltaCPUTime() { return delta_tottm; }
[2212]71 //! Returns the elapsed time since the previous call to \b Update() (in milli-second)
[2159]72 inline uint_8 getDeltaElapsedTime() { return delta_elapsed_time; }
[2212]73 //! Returns the CPU load since the previous call to \b Update()
[2159]74 inline double getCPULoad()
75 { return ((delta_elapsed_time>1) ? (double)delta_tottm/(double)delta_elapsed_time: 1.);}
[2101]76
77
[2212]78 //! Returns the total CPU time (in milli-second)
[2101]79 inline uint_8 getTotalCPUTime() { return cur_tottm; }
[2212]80 //! Returns the CPU time in user mode (in milli-second)
[2101]81 inline uint_8 getUserCPUTime() { return cur_usrtm; }
[2212]82 //! Returns the CPU time in system mode (in milli-second)
[2101]83 inline uint_8 getSysCPUTime() { return cur_systm; }
84
85
86 void Print(ostream& os, int lp=0, bool upd=true);
[2212]87 //! Alias for the \b Print() method.
[2101]88 inline void print(ostream& os, int lp=0, bool upd=true){ Print(os,lp,upd); }
89
[2255]90 void ReadLinuxMem(); // methode de lecture des infos memoire ss Linux - OPerdereau
91 void ReadLinuxTotMem(); // methode de lecture des infos memoire ss Linux - OPerdereau
92
[2101]93protected:
[2487]94 RU_ProcGrp procgrp; // Process group: self, child, all
[2101]95 uint_8 max_datasz; // Max data segment size (KBytes)
96 uint_8 max_rss; // Max resident size
97 uint_8 max_stack; // Max stack size
98
99 uint_8 cur_datasz; // Current data segment size
100 uint_8 cur_rss; // Current resident size
101 uint_8 cur_stack; // Current stack size
102
103 uint_8 cur_tottm; // Current total CPU-Time - in milli-second
104 uint_8 cur_usrtm; // Current user CPU-Time - in milli-second
105 uint_8 cur_systm; // Current system CPU-Time - in milli-second
106 uint_8 elapsed_time; // Elapsed time - in milli-second
107 uint_8 t0_time; // time T0 in seconds
108
109 // Delta_values : difference since last call to Update()
110 uint_8 delta_rss; // Max resident size
111 uint_8 delta_tottm; // Delta total CPU-Time - in milli-second
112
113 uint_8 delta_elapsed_time; // Elapsed time - in milli-second
[2255]114 uint_8 cur_pid ; // process PID
[2101]115};
116
[2212]117//! Prints the resource usage information on the output stream
[2101]118inline ostream& operator << (ostream& os, ResourceUsage& ru)
119{ ru.Print(os,0,true); return(os); }
120
121} // namespace SOPHYA
122
123#endif
124
Note: See TracBrowser for help on using the repository browser.