0393a936daf61ed7321c7a6bd98eb4a0fc8c7b9c
[akaros.git] / user / benchutil / include / measure.h
1 /* Copyright (c) 2013 The Regents of the University of California
2  * Barret Rhoden <brho@cs.berkeley.edu>
3  * See LICENSE for details.
4  *
5  * Userspace functions for various measurements.
6  *
7  * For now, this is built into parlib.  We can pull it out in the future.  Many
8  * of the larger functions are in flux (interfaces, options, etc). */
9
10 /* Basic stats computation and printing.
11  *
12  * All of these expect a 2D collection of samples, where the first array is an
13  * array of arrays of samples.  The first array's members are something like
14  * per-thread samples, where each thread fills in its
15  * data[thread_id][sample_number].  The samples should be ordered in
16  * chronological order.  Ultimately, the sample needs to produce a uint64_t
17  * (e.g. TSC tick). */
18
19 struct sample_stats {
20         int (*get_sample)(void **data, int i, int j, uint64_t *sample);
21         uint64_t                                        avg_time;
22         uint64_t                                        var_time;
23         uint64_t                                        max_time;
24         uint64_t                                        min_time;
25         unsigned int                            lat_50;
26         unsigned int                            lat_75;
27         unsigned int                            lat_90;
28         unsigned int                            lat_99;
29         uint64_t                                        total_samples;
30 };
31
32 /* Computes basic stats and prints histograms, stats returned via *stats */
33 void compute_stats(void **data, int nr_i, int nr_j, struct sample_stats *stats);
34
35 /* Prints the throughput of events in **data */
36 void print_throughput(void **data, unsigned int nr_steps, uint64_t interval,
37                       unsigned int nr_print_steps, uint64_t start_time,
38                       int nr_i, int nr_j,
39                       int (*get_sample)(void **data, int i, int j,
40                                         uint64_t *sample));