Date: Mon, 09 Jul 2012 18:58:02 +0000 From: gmiller@FreeBSD.org To: svn-soc-all@FreeBSD.org Subject: socsvn commit: r239193 - in soc2012/gmiller/locking-head: . tools/regression/lib/libthr/lockprof Message-ID: <20120709185803.0A56D106567F@hub.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: gmiller Date: Mon Jul 9 18:58:02 2012 New Revision: 239193 URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=239193 Log: r239216@FreeBSD-dev: root | 2012-07-03 11:16:28 -0500 Add tests for conflict counts and total and maximum wait times for contested locks. Modified: soc2012/gmiller/locking-head/ (props changed) soc2012/gmiller/locking-head/tools/regression/lib/libthr/lockprof/lock-cycle.c Modified: soc2012/gmiller/locking-head/tools/regression/lib/libthr/lockprof/lock-cycle.c ============================================================================== --- soc2012/gmiller/locking-head/tools/regression/lib/libthr/lockprof/lock-cycle.c Mon Jul 9 18:57:52 2012 (r239192) +++ soc2012/gmiller/locking-head/tools/regression/lib/libthr/lockprof/lock-cycle.c Mon Jul 9 18:58:02 2012 (r239193) @@ -52,6 +52,35 @@ pthread_resetstatistics_np(); } +void * +conflict_thread_func(void *v) +{ + v = v; + + pthread_mutex_lock(&mutex); + + sleep(5); + + pthread_mutex_unlock(&mutex); + + return NULL; +} + +void +conflict_test() +{ + pthread_t thread1; + pthread_t thread2; + + pthread_resetstatistics_np(); + + pthread_create(&thread1, NULL, conflict_thread_func, NULL); + pthread_create(&thread2, NULL, conflict_thread_func, NULL); + + pthread_join(thread2, NULL); + pthread_join(thread1, NULL); +} + #define MAX_TESTS (100) int success_count = 0; @@ -173,6 +202,35 @@ check(record_count == 0); } +void +check_stats_conflict(void) +{ + int record_count = 0; + struct pthread_statistics_np stats; + long tm; + + pthread_getstatistics_begin_np(&stats); + while (pthread_getstatistics_next_np(&stats)) { + record_count++; + } + pthread_getstatistics_end_np(&stats); + + check(record_count == 1); + + pthread_getstatistics_begin_np(&stats); + pthread_getstatistics_next_np(&stats); + pthread_getstatistics_end_np(&stats); + + check(stats.contest_count == 1); + + tm = stats.wait_time.tv_sec * 1000000L + + stats.wait_time.tv_nsec / 1000; + check(tm > 0); + + tm = stats.wait_max.tv_sec * 1000000L + stats.wait_max.tv_nsec / 1000; + check(tm > 0); +} + int main(void) { @@ -185,6 +243,9 @@ multi_cycle(); check_stats_multi(); + conflict_test(); + check_stats_conflict(); + show_test_results(); return 0;
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20120709185803.0A56D106567F>