Forwarding this Patch for more reviews and Acks. Regards-- Subrata
-------- Forwarded Message -------- From: Ankita Garg <[EMAIL PROTECTED]> Reply-To: Ankita Garg <[EMAIL PROTECTED]> To: [email protected] Cc: Sripathi Kodi <[EMAIL PROTECTED]> Subject: [LTP] Fixes to realtime/func/pi_perf testcase Date: Mon, 24 Mar 2008 22:04:19 +0530 Hello, The following patch fixes a minor issue with pi_perf testcase (testcases/realtime/func/). The wait_dat is intended to measure the amount of time it took for the high priority thread to actually obtain the lock from the time it was released by the low priority thread. The patch fixes this computation to measure it more accurately. The PASS/FAIL computation is unaffected. Also, the patch modifies the variable names to make them more intuitive. Testing done: Compile tested and run successfully without error. Signed-off-by: Ankita Garg <[EMAIL PROTECTED]> Acked-by: Sripathi Kodi <[EMAIL PROTECTED]> Index: realtime/func/pi_perf/pi_perf.c =================================================================== --- realtime.orig/func/pi_perf/pi_perf.c 2008-03-04 16:23:14.000000000 +0530 +++ realtime/func/pi_perf/pi_perf.c 2008-03-04 17:13:36.000000000 +0530 @@ -74,9 +74,11 @@ static unsigned int busy_work_time; static int num_busy = -1; -stats_container_t high_dat, low_dat, wait_dat; -stats_container_t wait_hist; -stats_quantiles_t wait_quantiles; +nsec_t low_unlock, high_get_lock; + +stats_container_t lock_wait_dat, low_dat, cpu_delay_dat; +stats_container_t cpu_delay_hist; +stats_quantiles_t cpu_delay_quantiles; void usage(void) { @@ -145,7 +147,8 @@ low_start = rt_gettime(); busy_work_ms(low_work_time); - low_hold = rt_gettime() - low_start; + low_unlock = rt_gettime(); + low_hold = low_unlock - low_start; pthread_mutex_unlock(&lock); @@ -165,13 +168,13 @@ void * high_prio_thread(void *arg) { - nsec_t high_start, high_spent; + nsec_t high_start, high_spent, high_end; unsigned int i; - stats_container_init(&high_dat, iterations); - stats_container_init(&wait_dat, iterations); - stats_container_init(&wait_hist, HIST_BUCKETS); - stats_quantiles_init(&wait_quantiles, log10(iterations)); + stats_container_init(&lock_wait_dat, iterations); + stats_container_init(&cpu_delay_dat, iterations); + stats_container_init(&cpu_delay_hist, HIST_BUCKETS); + stats_quantiles_init(&cpu_delay_quantiles, log10(iterations)); printf("High prio thread started\n"); @@ -183,33 +186,36 @@ high_start = rt_gettime(); pthread_mutex_lock(&lock); - high_spent = rt_gettime() - high_start; + high_end = rt_gettime(); + high_spent = high_end - high_start; + high_get_lock = high_end - low_unlock; busy_work_ms(high_work_time); pthread_mutex_unlock(&lock); - high_dat.records[i].x = i; - high_dat.records[i].y = high_spent / NS_PER_US; - wait_dat.records[i].x = i; - wait_dat.records[i].y = high_dat.records[i].y - low_dat.records[i].y; + lock_wait_dat.records[i].x = i; + lock_wait_dat.records[i].y = high_spent / NS_PER_US; + cpu_delay_dat.records[i].x = i; + cpu_delay_dat.records[i].y = high_get_lock / NS_PER_US; /* Wait for all threads to finish this iteration */ pthread_barrier_wait(&bar2); } - stats_hist(&wait_hist, &wait_dat); + stats_hist(&cpu_delay_hist, &cpu_delay_dat); stats_container_save("samples", "pi_perf Latency Scatter Plot", - "Iteration", "Latency (us)", &wait_dat, "points"); + "Iteration", "Latency (us)", &cpu_delay_dat, "points"); stats_container_save("hist", "pi_perf Latency Histogram", - "Latency (us)", "Samples", &wait_hist, "steps"); + "Latency (us)", "Samples", &cpu_delay_hist, "steps"); - printf("Min wait time = %ld us\n", stats_min(&wait_dat)); - printf("Max wait time = %ld us\n", stats_max(&wait_dat)); - printf("Average wait time = %4.2f us\n", stats_avg(&wait_dat)); - printf("Standard Deviation = %4.2f us\n", stats_stddev(&wait_dat)); + printf("Time taken for high prio thread to get the lock once released by low prio thread\n"); + printf("Min wait time = %ld us\n", stats_min(&cpu_delay_dat)); + printf("Max wait time = %ld us\n", stats_max(&cpu_delay_dat)); + printf("Average wait time = %4.2f us\n", stats_avg(&cpu_delay_dat)); + printf("Standard Deviation = %4.2f us\n", stats_stddev(&cpu_delay_dat)); printf("Quantiles:\n"); - stats_quantiles_calc(&wait_dat, &wait_quantiles); - stats_quantiles_print(&wait_quantiles); + stats_quantiles_calc(&cpu_delay_dat, &cpu_delay_quantiles); + stats_quantiles_print(&cpu_delay_quantiles); return NULL; } @@ -253,12 +259,12 @@ join_threads(); printf("Low prio lock held time (min) = %ld us\n", stats_min(&low_dat)); - printf("High prio lock wait time (max) = %ld us\n", stats_max(&high_dat)); + printf("High prio lock wait time (max) = %ld us\n", stats_max(&lock_wait_dat)); printf("Criteria: High prio lock wait time < " "(Low prio lock held time + %d us)\n", THRESHOLD); ret = 0; - if (stats_max(&high_dat) > stats_min(&low_dat) + THRESHOLD) + if (stats_max(&lock_wait_dat) > stats_min(&low_dat) + THRESHOLD) ret = 1; printf("Result: %s\n", ret ? "FAIL" : "PASS"); ------------------------------------------------------------------------- This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2008. http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/ _______________________________________________ Ltp-list mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/ltp-list
