Commit 2eeec4be authored by Jim Harris's avatar Jim Harris Committed by Daniel Verkamp
Browse files

util: add abstractions for accessing histogram buckets



This simplifies some upcoming changes, where the
buckets will be a dynamically allocated array instead
of a static 2-dimensional array.

Signed-off-by: default avatarJim Harris <james.r.harris@intel.com>
Change-Id: I3854319385937be9f9ace4be7dd22423e24f25e3

Reviewed-on: https://review.gerrithub.io/392706


Reviewed-by: default avatarDaniel Verkamp <daniel.verkamp@intel.com>
Tested-by: default avatarSPDK Automated Test System <sys_sgsw@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
parent 87b8c7db
Loading
Loading
Loading
Loading
+15 −3
Original line number Diff line number Diff line
@@ -91,6 +91,18 @@ struct spdk_histogram_data {

};

static inline void
__spdk_histogram_increment(struct spdk_histogram_data *h, uint32_t range, uint32_t index)
{
	h->bucket[range][index]++;
}

static inline uint64_t
__spdk_histogram_get_count(const struct spdk_histogram_data *h, uint32_t range, uint32_t index)
{
	return h->bucket[range][index];
}

static inline void
spdk_histogram_data_reset(struct spdk_histogram_data *histogram)
{
@@ -136,7 +148,7 @@ spdk_histogram_data_tally(struct spdk_histogram_data *histogram, uint64_t datapo
	uint32_t range = __spdk_histogram_data_get_bucket_range(histogram, datapoint);
	uint32_t index = __spdk_histogram_data_get_bucket_index(histogram, datapoint, range);

	histogram->bucket[range][index]++;
	__spdk_histogram_increment(histogram, range, index);
}

static inline uint64_t
@@ -170,7 +182,7 @@ spdk_histogram_data_iterate(const struct spdk_histogram_data *histogram,

	for (i = 0; i < SPDK_HISTOGRAM_NUM_BUCKET_RANGES(histogram); i++) {
		for (j = 0; j < SPDK_HISTOGRAM_NUM_BUCKETS_PER_RANGE(histogram); j++) {
			total += histogram->bucket[i][j];
			total += __spdk_histogram_get_count(histogram, i, j);
		}
	}

@@ -179,7 +191,7 @@ spdk_histogram_data_iterate(const struct spdk_histogram_data *histogram,

	for (i = 0; i < SPDK_HISTOGRAM_NUM_BUCKET_RANGES(histogram); i++) {
		for (j = 0; j < SPDK_HISTOGRAM_NUM_BUCKETS_PER_RANGE(histogram); j++) {
			count = histogram->bucket[i][j];
			count = __spdk_histogram_get_count(histogram, i, j);
			so_far += count;
			last_bucket = bucket;
			bucket = __spdk_histogram_data_get_bucket_start(histogram, i, j);