[4.0] 2a5ad6f Varnishstat hitrate implementation
Lasse Karstensen
lkarsten at varnish-software.com
Mon Sep 22 16:38:23 CEST 2014
commit 2a5ad6f78667b1c93e9763d7417b7755ff107b36
Author: arianna <arianna.aondio at varnish-software.com>
Date: Fri Aug 8 12:56:55 2014 +0200
Varnishstat hitrate implementation
diff --git a/bin/varnishstat/varnishstat_curses.c b/bin/varnishstat/varnishstat_curses.c
index fd80580..8ce35f1 100644
--- a/bin/varnishstat/varnishstat_curses.c
+++ b/bin/varnishstat/varnishstat_curses.c
@@ -91,6 +91,15 @@ struct pt {
struct ma ma_10, ma_100, ma_1000;
};
+struct hitrate {
+ double lt;
+ uint64_t lhit, lmiss;
+ struct ma hr_10;
+ struct ma hr_100;
+ struct ma hr_1000;
+};
+static struct hitrate hitrate;
+
static VTAILQ_HEAD(, pt) ptlist = VTAILQ_HEAD_INITIALIZER(ptlist);
static int n_ptlist = 0;
static int n_ptarray = 0;
@@ -119,6 +128,19 @@ static double t_sample = 0.;
static double interval = 1.;
static void
+init_hitrate(void)
+{
+ memset(&hitrate, 0, sizeof (struct hitrate));
+ if (VSC_C_main != NULL) {
+ hitrate.lhit = VSC_C_main->cache_hit;
+ hitrate.lmiss = VSC_C_main->cache_miss;
+ }
+ hitrate.hr_10.nmax = 10;
+ hitrate.hr_100.nmax = 100;
+ hitrate.hr_1000.nmax = 1000;
+}
+
+static void
update_ma(struct ma *ma, double val)
{
AN(ma);
@@ -348,10 +370,6 @@ sample_points(void)
{
struct pt *pt;
- t_sample = VTIM_mono();
- sample = 0;
- redraw = 1;
-
VTAILQ_FOREACH(pt, &ptlist, list) {
AN(pt->vpt);
AN(pt->ptr);
@@ -390,6 +408,46 @@ sample_points(void)
}
static void
+sample_hitrate(void)
+{
+ double tv,dt;
+ double hr, mr, ratio;
+ uint64_t hit, miss;
+
+ if (VSC_C_mgt == NULL)
+ return;
+
+ tv = VTIM_mono();
+ dt = tv - hitrate.lt;
+ hitrate.lt= tv;
+
+ hit = VSC_C_main->cache_hit;
+ miss = VSC_C_main->cache_miss;
+ hr = (hit - hitrate.lhit) / dt;
+ mr = (miss - hitrate.lmiss) / dt;
+ hitrate.lhit = hit;
+ hitrate.lmiss = miss;
+
+ if (hr + mr != 0)
+ ratio = hr / (hr + mr);
+ else
+ ratio = 0;
+ update_ma(&hitrate.hr_10, ratio);
+ update_ma(&hitrate.hr_100, ratio);
+ update_ma(&hitrate.hr_1000, ratio);
+}
+
+static void
+sample_data(void)
+{
+ t_sample = VTIM_mono();
+ sample = 0;
+ redraw = 1;
+ sample_points();
+ sample_hitrate();
+}
+
+static void
make_windows(void)
{
int Y, X;
@@ -489,8 +547,18 @@ draw_status(void)
AN(w_status);
werase(w_status);
- if (VSC_C_mgt != NULL)
+
+ if (VSC_C_mgt != NULL) {
up_mgt = VSC_C_mgt->uptime;
+ if( COLS > 70) {
+ mvwprintw(w_status, 0, (getmaxx (w_status) - 37),
+ "Hitrate n: %8u %8u %8u", hitrate.hr_10.n, hitrate.hr_100.n,
+ hitrate.hr_1000.n);
+ mvwprintw(w_status, 1, (getmaxx (w_status) - 37),
+ " avg(n): %8.4f %8.4f %8.4f", hitrate.hr_10.acc,
+ hitrate.hr_100.acc, hitrate.hr_1000.acc);
+ }
+ }
if (VSC_C_main != NULL)
up_chld = VSC_C_main->uptime;
@@ -866,8 +934,10 @@ do_curses(struct VSM_data *vd, int delay)
VSC_C_mgt = VSC_Mgt(vd, &f_mgt);
VSC_C_main = VSC_Main(vd, &f_main);
+ init_hitrate();
while (keep_running) {
if (VSM_Abandoned(vd)) {
+ init_hitrate();
delete_pt_list();
VSM_Close(vd);
VSM_Open(vd);
@@ -881,7 +951,7 @@ do_curses(struct VSM_data *vd, int delay)
if (now - t_sample > interval)
sample = 1;
if (sample)
- sample_points();
+ sample_data();
if (rebuild)
build_pt_array();
if (redraw)
More information about the varnish-commit
mailing list