mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	This new benchmark finds the total time that is taken to open, mmap,
enable, disable, munmap, close an evlist (time taken for new,
create_maps, config, delete is not counted in).
The evlist can be configured as in perf-record using the
-a,-C,-e,-u,--per-thread,-t,-p options.
The events can be duplicated in the evlist to quickly test performance
with many events using the -n options.
Furthermore, also the number of iterations used to calculate the
statistics is customizable.
Examples:
- Open one dummy event system-wide:
  $ sudo ./perf bench internals evlist-open-close
    Number of cpus:       4
    Number of threads:    1
    Number of events:     1 (4 fds)
    Number of iterations: 100
    Average open-close took: 613.870 usec (+- 32.852 usec)
- Open the group '{cs,cycles}' on CPU 0
  $ sudo ./perf bench internals evlist-open-close -e '{cs,cycles}' -C 0
    Number of cpus:       1
    Number of threads:    1
    Number of events:     2 (2 fds)
    Number of iterations: 100
    Average open-close took: 8503.220 usec (+- 252.652 usec)
- Open 10 'cycles' events for user 0, calculate average over 100 runs
  $ sudo ./perf bench internals evlist-open-close -e cycles -n 10 -u 0 -i 100
    Number of cpus:       4
    Number of threads:    328
    Number of events:     10 (13120 fds)
    Number of iterations: 100
    Average open-close took: 180043.140 usec (+- 2295.889 usec)
Committer notes:
Replaced a deprecated bzero() call with designated initialized zeroing.
Added some missing evlist allocation checks, one noted by Riccardo on
the mailing list.
Minor cosmetic changes (sent in private).
Signed-off-by: Riccardo Mancini <rickyman7@gmail.com>
Tested-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Ian Rogers <irogers@google.com>
Cc: Jiri Olsa <jolsa@redhat.com>
Cc: Mark Rutland <mark.rutland@arm.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lore.kernel.org/lkml/20210809201101.277594-1-rickyman7@gmail.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
		
	
			
		
			
				
	
	
		
			74 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
/* SPDX-License-Identifier: GPL-2.0 */
 | 
						|
#ifndef BENCH_H
 | 
						|
#define BENCH_H
 | 
						|
 | 
						|
#include <sys/time.h>
 | 
						|
 | 
						|
extern struct timeval bench__start, bench__end, bench__runtime;
 | 
						|
 | 
						|
/*
 | 
						|
 * 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
 | 
						|
 | 
						|
int bench_numa(int argc, const char **argv);
 | 
						|
int bench_sched_messaging(int argc, const char **argv);
 | 
						|
int bench_sched_pipe(int argc, const char **argv);
 | 
						|
int bench_syscall_basic(int argc, const char **argv);
 | 
						|
int bench_mem_memcpy(int argc, const char **argv);
 | 
						|
int bench_mem_memset(int argc, const char **argv);
 | 
						|
int bench_mem_find_bit(int argc, const char **argv);
 | 
						|
int bench_futex_hash(int argc, const char **argv);
 | 
						|
int bench_futex_wake(int argc, const char **argv);
 | 
						|
int bench_futex_wake_parallel(int argc, const char **argv);
 | 
						|
int bench_futex_requeue(int argc, const char **argv);
 | 
						|
/* pi futexes */
 | 
						|
int bench_futex_lock_pi(int argc, const char **argv);
 | 
						|
int bench_epoll_wait(int argc, const char **argv);
 | 
						|
int bench_epoll_ctl(int argc, const char **argv);
 | 
						|
int bench_synthesize(int argc, const char **argv);
 | 
						|
int bench_kallsyms_parse(int argc, const char **argv);
 | 
						|
int bench_inject_build_id(int argc, const char **argv);
 | 
						|
int bench_evlist_open_close(int argc, const char **argv);
 | 
						|
 | 
						|
#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;
 | 
						|
 | 
						|
#ifndef HAVE_PTHREAD_ATTR_SETAFFINITY_NP
 | 
						|
#include <pthread.h>
 | 
						|
#include <linux/compiler.h>
 | 
						|
static inline int pthread_attr_setaffinity_np(pthread_attr_t *attr __maybe_unused,
 | 
						|
					      size_t cpusetsize __maybe_unused,
 | 
						|
					      cpu_set_t *cpuset __maybe_unused)
 | 
						|
{
 | 
						|
	return 0;
 | 
						|
}
 | 
						|
#endif
 | 
						|
 | 
						|
#endif
 |