00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef NO_POSIX
00014
00015 double walltime() {
00016 double mic, time;
00017 double mega = 0.000001;
00018 struct timeval tp;
00019 #if defined(HAVE_NO_TIMEZONE)
00020 struct timezone {
00021 int tz_minuteswest;
00022 int tz_dsttime;
00023 } tzp = {0,0};
00024 #else
00025 struct timezone tzp ={0,0};
00026 #endif
00027 static mdp_int base_sec = 0;
00028 static mdp_int base_usec = 0;
00029
00030 gettimeofday(&tp,&tzp);
00031 if (base_sec == 0) {
00032 base_sec = tp.tv_sec;
00033 base_usec = tp.tv_usec;
00034 }
00035
00036 time = (double) (tp.tv_sec - base_sec);
00037 mic = (double) (tp.tv_usec - base_usec);
00038 time = (time + mic * mega);
00039 return(time);
00040 }
00041
00042 string getname() {
00043 static char tmp[1024];
00044 gethostname(tmp,1024);
00045 return string(tmp);
00046 }
00047
00048 void getcpuusage(double &user, double &total) {
00049 static mdp_int t[4], s[4];
00050 double sum, usage[4];
00051 FILE *fp;
00052 s[0]=t[0];
00053 s[1]=t[1];
00054 s[2]=t[2];
00055 s[3]=t[3];
00056 fp=fopen("/proc/stat", "r");
00057 if(!fp) return;
00058 fscanf(fp, "cpu %li%li%li%li",&t[0],&t[1],&t[2],&t[3]);
00059 fclose(fp);
00060 usage[0]=(t[0]-s[0]);
00061 usage[1]=(t[1]-s[1]);
00062 usage[2]=(t[2]-s[2]);
00063 usage[3]=(t[3]-s[3]);
00064 sum=usage[0]+usage[1]+usage[2]+usage[3];
00065 usage[0]/=sum;
00066 usage[1]/=sum;
00067 usage[2]/=sum;
00068 usage[3]/=sum;
00069 user=100.0*(usage[0]);
00070 total=100.0*(usage[0]+usage[1]+usage[2]);
00071 }
00072 #else
00073
00074 double walltime() {
00075 return (double) clock()/CLOCKS_PER_SEC;
00076 }
00077
00078 string getname() {
00079 return string("localhost");
00080 }
00081
00082 void getcpuusage(double &user, double &total) {
00083 user=total=0;
00084 }
00085
00086 #endif