1b427b702fe3990d8a001056786ec96615d2323c
[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 #include <ros/common.h>
11
12 /* Basic stats computation and printing.
13  *
14  * All of these expect a 2D collection of samples, where the first array is an
15  * array of arrays of samples.  The first array's members are something like
16  * per-thread samples, where each thread fills in its
17  * data[thread_id][sample_number].  The samples should be ordered in
18  * chronological order.  Ultimately, the sample needs to produce a uint64_t
19  * (e.g. TSC tick). */
20
21 struct sample_stats {
22         int (*get_sample)(void **data, int i, int j, uint64_t *sample);
23         uint64_t                                        avg_time;
24         uint64_t                                        var_time;
25         uint64_t                                        max_time;
26         uint64_t                                        min_time;
27         unsigned int                            lat_50;
28         unsigned int                            lat_75;
29         unsigned int                            lat_90;
30         unsigned int                            lat_99;
31         uint64_t                                        total_samples;
32 };
33
34 /* Computes basic stats and prints histograms, stats returned via *stats */
35 void compute_stats(void **data, int nr_i, int nr_j, struct sample_stats *stats);
36
37 /* Prints the throughput of events in **data */
38 void print_throughput(void **data, unsigned int nr_steps, uint64_t interval,
39                       unsigned int nr_print_steps, uint64_t start_time,
40                       int nr_i, int nr_j,
41                       int (*get_sample)(void **data, int i, int j,
42                                         uint64_t *sample));