modules/up/src/Core/util/rusage.cc
/* [<][>][^][v][top][bottom][index][help] */
FUNCTIONS
This source file includes following functions.
- tv2f
- start
- start
1 // $Id: rusage.cc,v 1.1.1.1 2000/03/10 16:32:20 engin Exp $
2 //
3 // Copyright (c) 1994 by the University of Southern California
4 // All rights reserved.
5 //
6 // Permission to use, copy, modify, and distribute this software and its
7 // documentation in source and binary forms for lawful non-commercial
8 // purposes and without fee is hereby granted, provided that the above
9 // copyright notice appear in all copies and that both the copyright
10 // notice and this permission notice appear in supporting documentation,
11 // and that any documentation, advertising materials, and other materials
12 // related to such distribution and use acknowledge that the software was
13 // developed by the University of Southern California, Information
14 // Sciences Institute. The name of the USC may not be used to endorse or
15 // promote products derived from this software without specific prior
16 // written permission.
17 //
18 // THE UNIVERSITY OF SOUTHERN CALIFORNIA DOES NOT MAKE ANY
19 // REPRESENTATIONS ABOUT THE SUITABILITY OF THIS SOFTWARE FOR ANY
20 // PURPOSE. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
21 // IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
22 // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE,
23 // TITLE, AND NON-INFRINGEMENT.
24 //
25 // IN NO EVENT SHALL USC, OR ANY OTHER CONTRIBUTOR BE LIABLE FOR ANY
26 // SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES, WHETHER IN CONTRACT, TORT,
27 // OR OTHER FORM OF ACTION, ARISING OUT OF OR IN CONNECTION WITH, THE USE
28 // OR PERFORMANCE OF THIS SOFTWARE.
29 //
30 // Questions concerning this software should be directed to
31 // ratoolset@isi.edu.
32 //
33 // Author(s): Cengiz Alaettinoglu <cengiz@ISI.EDU>
34
35 #include "config.h"
36 #include "rusage.hh"
37
38 #if RUSAGE_USES_TIMEVAL && HAVE_TIMEVAL && HAVE_GETTIMEOFDAY
39
40 extern "C" {
41 #include <sys/types.h>
42
43 #if TIME_WITH_SYS_TIME
44 # include <sys/time.h>
45 # include <time.h>
46 #else
47 # if HAVE_SYS_TIME_H
48 # include <sys/time.h>
49 # else
50 # include <time.h>
51 # endif
52 #endif
53
54 #include <sys/resource.h>
55 extern int getrusage(...);
56 extern int getpagesize(...);
57 extern int gettimeofday(...);
58 }
59
60 double tv2f(timeval &tv)
/* [<][>][^][v][top][bottom][index][help] */
61 /* Converts a timeval into a double giving the time in seconds. */
62 {
63 return tv.tv_sec + tv.tv_usec / 1e6;
64 }
65
66 void Rusage::start() {
/* [<][>][^][v][top][bottom][index][help] */
67 struct timeval start_time;
68 struct rusage self;
69
70 gettimeofday(&start_time, NULL);
71 last_rtime = tv2f(start_time);
72
73 getrusage(RUSAGE_SELF, &self);
74 last_utime = tv2f(self.ru_utime);
75 last_stime = tv2f(self.ru_stime);
76 }
77
78 ostream& operator<<(ostream& stream, Rusage& ru) {
79 struct timeval end_time;
80 struct rusage self;
81 double rtime, utime, stime;
82
83 getrusage(RUSAGE_SELF, &self);
84 gettimeofday(&end_time, NULL);
85
86 utime = tv2f(self.ru_utime) - ru.last_utime;
87 stime = tv2f(self.ru_stime) - ru.last_stime;
88 rtime = tv2f(end_time) - ru.last_rtime;
89
90 stream.form(" Resource Usage: \n");
91 stream.form(" times: %1.2fu %1.2fs %1.2fr\n", utime, stime, rtime);
92 stream.form(" i/o: %d %d\n", self.ru_inblock, self.ru_oublock);
93 stream.form(" faults: %d %d\n", self.ru_minflt, self.ru_majflt);
94 stream.form(" swaps: %d\n", self.ru_nswap);
95 stream.form(" max size: %d * %d\n", self.ru_maxrss, getpagesize());
96 stream.form(" ws size: %d\n", self.ru_idrss);
97 stream.form(" signals: %d\n", self.ru_nsignals);
98 stream.form(" vo/nv cs: %d %d\n", self.ru_nvcsw, self.ru_nivcsw);
99
100 return stream;
101 }
102
103 #else // RUSAGE_USES_TIMEVAL && HAVE_TIMEVAL
104
105 void Rusage::start() {
/* [<][>][^][v][top][bottom][index][help] */
106 }
107
108 ostream& operator<<(ostream& stream, Rusage& ru) {
109 stream << "No resource usage is available in this system.\n";
110 return stream;
111 }
112
113 #endif // RUSAGE_USES_TIMEVAL && HAVE_TIMEVAL