The Gaudi Framework  v36r7 (7f57a304)
ProcStats Class Reference

#include </builds/gaudi/Gaudi/GaudiAud/src/ProcStats.h>

Collaboration diagram for ProcStats:

Classes

struct  cleanup
 
class  unique_fd
 

Public Member Functions

bool fetch (procInfo &fill_me)
 
double pageSize () const
 

Static Public Member Functions

static ProcStatsinstance ()
 

Private Member Functions

 ProcStats ()
 

Private Attributes

unique_fd fd
 
double pg_size
 
procInfo curr
 
std::string fname
 
char buf [500]
 
bool valid
 

Static Private Attributes

static ProcStatsinst = 0
 

Friends

struct cleanup
 

Detailed Description

Definition at line 51 of file ProcStats.h.

Constructor & Destructor Documentation

◆ ProcStats()

ProcStats::ProcStats ( )
private

Definition at line 257 of file ProcStats.cpp.

257  : valid( false ) {
258 #if defined( __linux__ ) or defined( __APPLE__ )
259  pg_size = sysconf( _SC_PAGESIZE ); // getpagesize();
260 
261  fname = "/proc/" + std::to_string( getpid() ) + "/stat";
262 
263  fd.open( fname.c_str(), O_RDONLY );
264  if ( !fd ) {
265  cerr << "Failed to open " << fname << endl;
266  return;
267  }
268 #endif // __linux__ or __APPLE__
269  valid = true;
270 }

Member Function Documentation

◆ fetch()

bool ProcStats::fetch ( procInfo fill_me)

Definition at line 272 of file ProcStats.cpp.

272  {
273  if ( valid == false ) return false;
274 
275 #if defined( __linux__ ) or defined( __APPLE__ )
276  double pr_size, pr_rssize;
277  linux_proc pinfo;
278  int cnt;
279 
280  fd.lseek( 0, SEEK_SET );
281 
282  if ( ( cnt = fd.read( buf, sizeof( buf ) ) ) < 0 ) {
283  cout << "LINUX Read of Proc file failed:" << endl;
284  return false;
285  }
286 
287  if ( cnt > 0 ) {
288  buf[std::min( static_cast<std::size_t>( cnt ), sizeof( buf ) - 1 )] = '\0';
289 
290  sscanf( buf,
291  // 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 20 1 2 3 4 5 6 7 8 9
292  // 30 1 2 3 4 5
293  "%d %s %c %d %d %d %d %d %lu %lu %lu %lu %lu %lu %lu %ld %ld %ld %ld %ld %ld %llu %lu %ld %lu %lu %lu %lu "
294  "%lu %lu %lu %lu %lu %lu %lu",
295  &pinfo.pid, pinfo.comm, &pinfo.state, &pinfo.ppid, &pinfo.pgrp, &pinfo.session, &pinfo.tty, &pinfo.tpgid,
296  &pinfo.flags, &pinfo.minflt, &pinfo.cminflt, &pinfo.majflt, &pinfo.cmajflt, &pinfo.utime, &pinfo.stime,
297  &pinfo.cutime, &pinfo.cstime, &pinfo.priority, &pinfo.nice, &pinfo.num_threads, &pinfo.itrealvalue,
298  &pinfo.starttime, &pinfo.vsize, &pinfo.rss, &pinfo.rlim, &pinfo.startcode, &pinfo.endcode,
299  &pinfo.startstack, &pinfo.kstkesp, &pinfo.kstkeip, &pinfo.signal, &pinfo.blocked, &pinfo.sigignore,
300  &pinfo.sigcatch, &pinfo.wchan );
301 
302  // resident set size in pages
303  pr_size = (double)pinfo.vsize;
304  pr_rssize = (double)pinfo.rss;
305 
306  f.vsize = pr_size / ( 1024 * 1024 );
307  f.rss = pr_rssize * pg_size / ( 1024 * 1024 );
308  }
309 
310 #else
311  f.vsize = 0;
312  f.rss = 0;
313 #endif // __linux__ or __APPLE__
314 
315  bool rc = ( curr == f ) ? false : true;
316 
317  curr.rss = f.rss;
318  curr.vsize = f.vsize;
319 
320  return rc;
321 }

◆ instance()

ProcStats * ProcStats::instance ( )
static

Definition at line 249 of file ProcStats.cpp.

249  {
250  static cleanup c;
251  if ( !inst ) inst = new ProcStats;
252  return inst;
253 }

◆ pageSize()

double ProcStats::pageSize ( ) const
inline

Definition at line 56 of file ProcStats.h.

56 { return pg_size; }

Friends And Related Function Documentation

◆ cleanup

friend struct cleanup
friend

Definition at line 66 of file ProcStats.h.

Member Data Documentation

◆ buf

char ProcStats::buf[500]
private

Definition at line 108 of file ProcStats.h.

◆ curr

procInfo ProcStats::curr
private

Definition at line 106 of file ProcStats.h.

◆ fd

unique_fd ProcStats::fd
private

Definition at line 104 of file ProcStats.h.

◆ fname

std::string ProcStats::fname
private

Definition at line 107 of file ProcStats.h.

◆ inst

ProcStats * ProcStats::inst = 0
staticprivate

Definition at line 111 of file ProcStats.h.

◆ pg_size

double ProcStats::pg_size
private

Definition at line 105 of file ProcStats.h.

◆ valid

bool ProcStats::valid
private

Definition at line 109 of file ProcStats.h.


The documentation for this class was generated from the following files:
linux_proc::blocked
unsigned long blocked
Definition: ProcessDescriptor.cpp:300
linux_proc::vsize
unsigned long vsize
Definition: ProcessDescriptor.cpp:291
linux_proc::rss
long rss
Definition: ProcessDescriptor.cpp:292
ProcStats::inst
static ProcStats * inst
Definition: ProcStats.h:111
linux_proc::endcode
unsigned long endcode
Definition: ProcessDescriptor.cpp:295
linux_proc::comm
char comm[400]
Definition: ProcessDescriptor.cpp:270
linux_proc::starttime
unsigned long long starttime
Definition: ProcessDescriptor.cpp:290
linux_proc::tty
int tty
Definition: ProcessDescriptor.cpp:275
linux_proc::startcode
unsigned long startcode
Definition: ProcessDescriptor.cpp:294
linux_proc::itrealvalue
long itrealvalue
Definition: ProcessDescriptor.cpp:289
ProcStats::pg_size
double pg_size
Definition: ProcStats.h:105
linux_proc::wchan
unsigned long wchan
Definition: ProcessDescriptor.cpp:303
std::sscanf
T sscanf(T... args)
gaudirun.c
c
Definition: gaudirun.py:525
linux_proc::ppid
int ppid
Definition: ProcessDescriptor.cpp:272
linux_proc::tpgid
int tpgid
Definition: ProcessDescriptor.cpp:276
linux_proc::priority
long priority
Definition: ProcessDescriptor.cpp:286
procInfo::vsize
double vsize
Definition: ProcStats.h:47
linux_proc::majflt
unsigned long majflt
Definition: ProcessDescriptor.cpp:280
linux_proc::flags
unsigned long flags
Definition: ProcessDescriptor.cpp:277
linux_proc::stime
unsigned long stime
Definition: ProcessDescriptor.cpp:283
linux_proc::num_threads
long num_threads
Definition: ProcessDescriptor.cpp:288
ProcStats::curr
procInfo curr
Definition: ProcStats.h:106
linux_proc::rlim
unsigned long rlim
Definition: ProcessDescriptor.cpp:293
std::string::c_str
T c_str(T... args)
linux_proc::startstack
unsigned long startstack
Definition: ProcessDescriptor.cpp:296
linux_proc
Definition: ProcessDescriptor.cpp:268
ProcStats::unique_fd::open
unique_fd & open(Args &&... args)
Definition: ProcStats.h:85
std::to_string
T to_string(T... args)
ProcStats::fname
std::string fname
Definition: ProcStats.h:107
ProcStats::cleanup
friend struct cleanup
Definition: ProcStats.h:66
ProcStats::fd
unique_fd fd
Definition: ProcStats.h:104
linux_proc::cminflt
unsigned long cminflt
Definition: ProcessDescriptor.cpp:279
linux_proc::signal
unsigned long signal
Definition: ProcessDescriptor.cpp:299
linux_proc::minflt
unsigned long minflt
Definition: ProcessDescriptor.cpp:278
linux_proc::pgrp
int pgrp
Definition: ProcessDescriptor.cpp:273
linux_proc::kstkesp
unsigned long kstkesp
Definition: ProcessDescriptor.cpp:297
linux_proc::sigcatch
unsigned long sigcatch
Definition: ProcessDescriptor.cpp:302
linux_proc::pid
int pid
Definition: ProcessDescriptor.cpp:269
std::min
T min(T... args)
ProcStats::ProcStats
ProcStats()
Definition: ProcStats.cpp:257
std::endl
T endl(T... args)
linux_proc::state
char state
Definition: ProcessDescriptor.cpp:271
linux_proc::sigignore
unsigned long sigignore
Definition: ProcessDescriptor.cpp:301
ProcStats::buf
char buf[500]
Definition: ProcStats.h:108
ProcStats::valid
bool valid
Definition: ProcStats.h:109
linux_proc::session
int session
Definition: ProcessDescriptor.cpp:274
procInfo::rss
double rss
Definition: ProcStats.h:48
std::size_t
linux_proc::cmajflt
unsigned long cmajflt
Definition: ProcessDescriptor.cpp:281
linux_proc::kstkeip
unsigned long kstkeip
Definition: ProcessDescriptor.cpp:298
linux_proc::utime
unsigned long utime
Definition: ProcessDescriptor.cpp:282
IOTest.rc
rc
Definition: IOTest.py:117
linux_proc::nice
long nice
Definition: ProcessDescriptor.cpp:287
linux_proc::cstime
long cstime
Definition: ProcessDescriptor.cpp:285
linux_proc::cutime
long cutime
Definition: ProcessDescriptor.cpp:284