 d65817b4e7
			
		
	
	
	d65817b4e7
	
	
	
		
			
			The futex-wake benchmark only measures wakeups done within a single process. While this has value in its own, it does not really generate any hb->lock contention. A new benchmark 'wake-parallel' is added, by extending the futex-wake code such that we can measure parallel waker threads. The program output shows the avg per-thread latency in order to complete its share of wakeups: Run summary [PID 13474]: blocking on 512 threads (at [private] futex 0xa88668), 8 threads waking up 64 at a time. [Run 1]: Avg per-thread latency (waking 64/512 threads) in 0.6230 ms (+-15.31%) [Run 2]: Avg per-thread latency (waking 64/512 threads) in 0.5175 ms (+-29.95%) [Run 3]: Avg per-thread latency (waking 64/512 threads) in 0.7578 ms (+-18.03%) [Run 4]: Avg per-thread latency (waking 64/512 threads) in 0.8944 ms (+-12.54%) [Run 5]: Avg per-thread latency (waking 64/512 threads) in 1.1204 ms (+-23.85%) Avg per-thread latency (waking 64/512 threads) in 0.7826 ms (+-9.91%) Naturally, different combinations of numbers of blocking and waker threads will exhibit different information. Signed-off-by: Davidlohr Bueso <dbueso@suse.de> Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Davidlohr Bueso <dbueso@suse.de> Link: http://lkml.kernel.org/r/1431110280-20231-1-git-send-email-dave@stgolabs.net Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
		
			
				
	
	
		
			50 lines
		
	
	
	
		
			1.6 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
	
		
			1.6 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef BENCH_H
 | |
| #define BENCH_H
 | |
| 
 | |
| /*
 | |
|  * The madvise transparent hugepage constants were added in glibc
 | |
|  * 2.13. For compatibility with older versions of glibc, define these
 | |
|  * tokens if they are not already defined.
 | |
|  *
 | |
|  * PA-RISC uses different madvise values from other architectures and
 | |
|  * needs to be special-cased.
 | |
|  */
 | |
| #ifdef __hppa__
 | |
| # ifndef MADV_HUGEPAGE
 | |
| #  define MADV_HUGEPAGE		67
 | |
| # endif
 | |
| # ifndef MADV_NOHUGEPAGE
 | |
| #  define MADV_NOHUGEPAGE	68
 | |
| # endif
 | |
| #else
 | |
| # ifndef MADV_HUGEPAGE
 | |
| #  define MADV_HUGEPAGE		14
 | |
| # endif
 | |
| # ifndef MADV_NOHUGEPAGE
 | |
| #  define MADV_NOHUGEPAGE	15
 | |
| # endif
 | |
| #endif
 | |
| 
 | |
| extern int bench_numa(int argc, const char **argv, const char *prefix);
 | |
| extern int bench_sched_messaging(int argc, const char **argv, const char *prefix);
 | |
| extern int bench_sched_pipe(int argc, const char **argv, const char *prefix);
 | |
| extern int bench_mem_memcpy(int argc, const char **argv,
 | |
| 			    const char *prefix __maybe_unused);
 | |
| extern int bench_mem_memset(int argc, const char **argv, const char *prefix);
 | |
| extern int bench_futex_hash(int argc, const char **argv, const char *prefix);
 | |
| extern int bench_futex_wake(int argc, const char **argv, const char *prefix);
 | |
| extern int bench_futex_wake_parallel(int argc, const char **argv,
 | |
| 				     const char *prefix);
 | |
| extern int bench_futex_requeue(int argc, const char **argv, const char *prefix);
 | |
| 
 | |
| #define BENCH_FORMAT_DEFAULT_STR	"default"
 | |
| #define BENCH_FORMAT_DEFAULT		0
 | |
| #define BENCH_FORMAT_SIMPLE_STR		"simple"
 | |
| #define BENCH_FORMAT_SIMPLE		1
 | |
| 
 | |
| #define BENCH_FORMAT_UNKNOWN		-1
 | |
| 
 | |
| extern int bench_format;
 | |
| extern unsigned int bench_repeat;
 | |
| 
 | |
| #endif
 |