2
0
mirror of https://github.com/openvswitch/ovs synced 2025-10-25 15:07:05 +00:00

coverage: Reimplement the "ovs-appctl coverage/show" command.

This commit changes the "ovs-appctl coverage/show" command to show the
the averaged per-second rates for the last few seconds, the last minute
and the last hour, and the total counts of all of the coverage counters.

Signed-off-by: Alex Wang <alexw@nicira.com>
Signed-off-by: Ethan Jackson <ethan@nicira.com>
Acked-by: Ethan Jackson <ethan@nicira.com>
This commit is contained in:
Alex Wang
2013-09-30 18:31:44 -07:00
committed by Ethan Jackson
parent f207388164
commit 98cf638b19
5 changed files with 162 additions and 7 deletions

View File

@@ -30,11 +30,25 @@
#include "ovs-thread.h"
#include "vlog.h"
/* Makes coverage_run run every 5000 ms (5 seconds).
* If this value is redefined, the new value must
* divide 60000 (1 minute). */
#define COVERAGE_RUN_INTERVAL 5000
BUILD_ASSERT_DECL(60000 % COVERAGE_RUN_INTERVAL == 0);
/* Defines the moving average array length. */
#define MIN_AVG_LEN (60000/COVERAGE_RUN_INTERVAL)
#define HR_AVG_LEN 60
/* A coverage counter. */
struct coverage_counter {
const char *const name; /* Textual name. */
unsigned int (*const count)(void); /* Gets, zeros this thread's count. */
unsigned long long int total; /* Total count. */
unsigned long long int last_total;
/* The moving average arrays. */
unsigned int min[MIN_AVG_LEN];
unsigned int hr[HR_AVG_LEN];
};
/* Defines COUNTER. There must be exactly one such definition at file scope
@@ -56,7 +70,7 @@ struct coverage_counter {
} \
extern struct coverage_counter counter_##COUNTER; \
struct coverage_counter counter_##COUNTER \
= { #COUNTER, COUNTER##_count, 0 }; \
= { #COUNTER, COUNTER##_count, 0, 0, {0}, {0} }; \
extern struct coverage_counter *counter_ptr_##COUNTER; \
struct coverage_counter *counter_ptr_##COUNTER \
__attribute__((section("coverage"))) = &counter_##COUNTER
@@ -80,6 +94,7 @@ struct coverage_counter {
void coverage_init(void);
void coverage_log(void);
void coverage_clear(void);
void coverage_run(void);
/* Implementation detail. */
#define COVERAGE_DEFINE__(COUNTER) \