Lines Matching +full:average +full:- +full:samples
1 // SPDX-License-Identifier: GPL-2.0
17 #include <subcmd/parse-options.h>
25 #include "util/build-id.h"
27 #include "util/synthetic-events.h"
34 static unsigned int nr_samples = 100; /* samples per mmap */
59 "Number of iterations used to compute average (default: 100)"),
60 OPT_UINTEGER('m', "nr-mmaps", &nr_mmaps,
62 OPT_UINTEGER('n', "nr-samples", &nr_samples,
70 "perf bench internals inject-build-id <options>",
76 * if it contains a build-id. Stops after collecting 4 times more than
91 dso->name = realpath(fpath, NULL); in add_dso()
92 if (dso->name == NULL) in add_dso()
93 return -1; in add_dso()
95 dso->ino = nr_dsos++; in add_dso()
126 zfree(&dso->name); in release_dso()
134 return 0x400000ULL + dso->ino * 8192ULL; in dso_map_addr()
152 return writen(data->input_pipe[1], &event, event.header.size); in synthesize_attr()
167 event.fork.pid = data->pid; in synthesize_fork()
168 event.fork.tid = data->pid; in synthesize_fork()
170 return writen(data->input_pipe[1], &event, event.header.size); in synthesize_fork()
180 len += roundup(strlen(dso->name) + 1, 8) + bench_id_hdr_size; in synthesize_mmap()
188 event.mmap2.pid = data->pid; in synthesize_mmap()
189 event.mmap2.tid = data->pid; in synthesize_mmap()
191 event.mmap2.ino = dso->ino; in synthesize_mmap()
193 strcpy(event.mmap2.filename, dso->name); in synthesize_mmap()
201 if (writen(data->input_pipe[1], &event, len - bench_id_hdr_size) < 0) in synthesize_mmap()
202 return -1; in synthesize_mmap()
203 /* zero-fill sample id header */ in synthesize_mmap()
206 ts_idx = (bench_id_hdr_size / sizeof(u64)) - 2; in synthesize_mmap()
208 if (writen(data->input_pipe[1], id_hdr_ptr, bench_id_hdr_size) < 0) in synthesize_mmap()
209 return -1; in synthesize_mmap()
214 ts_idx = (len / sizeof(u64)) - 2; in synthesize_mmap()
216 return writen(data->input_pipe[1], &event, len); in synthesize_mmap()
223 .tid = data->pid, in synthesize_sample()
224 .pid = data->pid, in synthesize_sample()
235 return writen(data->input_pipe[1], &event, event.header.size); in synthesize_sample()
245 return writen(data->input_pipe[1], &header, header.size); in synthesize_flush()
255 flag = fcntl(data->output_pipe[0], F_GETFL); in data_reader()
256 fcntl(data->output_pipe[0], F_SETFL, flag | O_NONBLOCK); in data_reader()
260 n = read(data->output_pipe[0], buf, sizeof(buf)); in data_reader()
272 close(data->output_pipe[0]); in data_reader()
283 return -1; in setup_injection()
285 if (pipe(data->input_pipe) < 0) in setup_injection()
286 return -1; in setup_injection()
288 if (pipe(data->output_pipe) < 0) in setup_injection()
289 return -1; in setup_injection()
291 data->pid = fork(); in setup_injection()
292 if (data->pid < 0) in setup_injection()
293 return -1; in setup_injection()
295 if (data->pid == 0) { in setup_injection()
299 close(data->input_pipe[1]); in setup_injection()
300 close(data->output_pipe[0]); in setup_injection()
303 dup2(data->input_pipe[0], STDIN_FILENO); in setup_injection()
304 close(data->input_pipe[0]); in setup_injection()
305 dup2(data->output_pipe[1], STDOUT_FILENO); in setup_injection()
306 close(data->output_pipe[1]); in setup_injection()
323 inject_argv[2] = strdup("-b"); in setup_injection()
325 inject_argv[3] = strdup("--buildid-all"); in setup_injection()
335 pthread_create(&data->th, NULL, data_reader, data); in setup_injection()
338 close(data->input_pipe[0]); in setup_injection()
339 close(data->output_pipe[1]); in setup_injection()
343 return -1; in setup_injection()
356 if (perf_header__write_pipe(data->input_pipe[1]) < 0) in inject_build_id()
357 return -1; in inject_build_id()
360 return -1; in inject_build_id()
363 return -1; in inject_build_id()
370 pr_debug2(" [%d] injecting: %s\n", i+1, dso->name); in inject_build_id()
372 return -1; in inject_build_id()
376 return -1; in inject_build_id()
381 return -1; in inject_build_id()
386 close(data->input_pipe[1]); in inject_build_id()
388 wait4(data->pid, &status, 0, &rusage); in inject_build_id()
391 pr_debug(" Child %d exited with %d\n", data->pid, status); in inject_build_id()
406 pr_debug(" Build-id%s injection benchmark\n", build_id_all ? "-all" : ""); in do_inject_loop()
415 printf(" Build-id injection setup failed\n"); in do_inject_loop()
421 printf(" Build-id injection failed\n"); in do_inject_loop()
431 pthread_join(data->th, NULL); in do_inject_loop()
436 printf(" Average build-id%s injection took: %.3f msec (+- %.3f msec)\n", in do_inject_loop()
437 build_id_all ? "-all" : "", time_average, time_stddev); in do_inject_loop()
442 printf(" Average time per event: %.3f usec (+- %.3f usec)\n", in do_inject_loop()
447 printf(" Average memory usage: %.0f KB (+- %.0f KB)\n", in do_inject_loop()
464 return -1; in do_inject_loops()