| /* Copyright (c) 2013 The Regents of the University of California |
| * Barret Rhoden <brho@cs.berkeley.edu> |
| * See LICENSE for details. |
| * |
| * Userspace functions for various measurements. |
| * |
| * For now, this is built into parlib. We can pull it out in the future. Many |
| * of the larger functions are in flux (interfaces, options, etc). */ |
| |
| /* Basic stats computation and printing. |
| * |
| * All of these expect a 2D collection of samples, where the first array is an |
| * array of arrays of samples. The first array's members are something like |
| * per-thread samples, where each thread fills in its |
| * data[thread_id][sample_number]. The samples should be ordered in |
| * chronological order. Ultimately, the sample needs to produce a uint64_t |
| * (e.g. TSC tick). */ |
| |
| #pragma once |
| |
| #include <stdint.h> |
| |
| __BEGIN_DECLS |
| |
| struct sample_stats { |
| int (*get_sample)(void **data, int i, int j, uint64_t *sample); |
| uint64_t avg_time; |
| uint64_t var_time; |
| uint64_t max_time; |
| uint64_t min_time; |
| unsigned int lat_50; |
| unsigned int lat_75; |
| unsigned int lat_90; |
| unsigned int lat_99; |
| uint64_t total_samples; |
| }; |
| |
| /* Computes basic stats and prints histograms, stats returned via *stats */ |
| void compute_stats(void **data, int nr_i, int nr_j, struct sample_stats *stats); |
| |
| /* Prints the throughput of events in **data */ |
| void print_throughput(void **data, unsigned int nr_steps, uint64_t interval, |
| unsigned int nr_print_steps, uint64_t start_time, |
| int nr_i, int nr_j, |
| int (*get_sample)(void **data, int i, int j, |
| uint64_t *sample)); |
| |
| __END_DECLS |