From: Cyril H. <ch...@su...> - 2011-07-27 16:07:19
|
Hi! > +#define RUSAGE_THREAD 1 Shouldn't this be set in system headers? And even if not, it probably would be on newer systems so better way should be: #ifndef RUSAGE_THREAD #define RUSAGE_THREAD 1 #endif > +static void busyloop(int wait); > +static void setup(void); > +static void cleanup(void); > + > +int main(int argc, char *argv[]) > +{ > + struct rusage usage; > + unsigned long ulast, udelta, slast, sdelta; > + int i, lc; > + char *msg; > + > + msg = parse_opts(argc, argv, NULL, NULL); > + if (msg != NULL) > + tst_brkm(TBROK, NULL, "OPTION PARSING ERROR - %s", msg); > + > + setup(); > + > + for (lc = 0; TEST_LOOPING(lc); lc++) { > + Tst_count = 0; i = 0; > + ulast = 0, slast = 0; > + SAFE_GETRUSAGE(cleanup, RUSAGE_THREAD, &usage); > + tst_resm(TINFO, "utime:%12luus; stime:%12luus", > + usage.ru_utime.tv_usec, usage.ru_stime.tv_usec); > + while (i < RECORD_MAX) { > + SAFE_GETRUSAGE(cleanup, RUSAGE_THREAD, &usage); > + udelta = usage.ru_utime.tv_usec - ulast; > + sdelta = usage.ru_stime.tv_usec - slast; > + if (udelta > 0 || sdelta > 0) { > + i++; > + tst_resm(TINFO, "utime:%12luus; stime:%12luus", > + usage.ru_utime.tv_usec, > + usage.ru_stime.tv_usec); > + if (udelta > 1000+BIAS_MAX) > + tst_brkm(TFAIL, cleanup, > + "utime increased > 1000us:" > + " delta = %luus", udelta); > + if (sdelta > 1000+BIAS_MAX) > + tst_brkm(TFAIL, cleanup, > + "stime increased > 1000us:" > + " delta = %luus", sdelta); > + } > + ulast = usage.ru_utime.tv_usec; > + slast = usage.ru_stime.tv_usec; Hmm, you are actually looping the test for RECORD_MAX and then the whole test in test loop. Is there really need for that redundancy? Shouldn't be running the test with -i 20 sufficient? > + busyloop(100000); > + } > + } > + cleanup(); > + tst_exit(); > +} > + > +static void busyloop(int wait) > +{ > + int i, j = 0; > + > + for (i = 0; i < wait; i++) > + j = j * 3 + 11; The j = j * 3 + 11 line would likely by removed by compiler optimalization. Also if you wan't to create bussy loop that loops for some microseconds you can use posix timers for that. Something like: void sighandler(int sig) { signal_flag = 0; } void bussy_loop(void) { while (signal_flag); } ... timer_create() ... signal_flag = 1; timer_settime(); bussy_loop(); -- Cyril Hrubis ch...@su... |