Fixed plug/unplug logic in btt
authorAlan D. Brunelle <alan.brunelle@hp.com>
Mon, 6 Apr 2009 11:30:16 +0000 (07:30 -0400)
committerAlan D. Brunelle <alan.brunelle@hp.com>
Mon, 6 Apr 2009 11:30:16 +0000 (07:30 -0400)
Was not accounting for unplugged time due to timeout unplugs.

btt/devs.c
btt/globals.h
btt/output.c

index ff55aa74e488fc4d189f26f1fe6ae36cc790b8b3..3578633149c4a55c180c0e35c5d895a7e067b132 100644 (file)
@@ -234,10 +234,16 @@ void dip_plug(__u32 dev, double cur_time)
 {
        struct d_info *dip = __dip_find(dev);
 
-       if (!dip || dip->is_plugged) return;
+       if (dip && !dip->is_plugged) {
+               dip->is_plugged = 1;
+               dip->last_plug = cur_time;
+       }
+}
 
-       dip->is_plugged = 1;
-       dip->last_plug = cur_time;
+static inline void unplug(struct d_info *dip, double cur_time)
+{
+       dip->is_plugged = 0;
+       dip->plugged_time += (cur_time - dip->last_plug);
 }
 
 void dip_unplug(__u32 dev, double cur_time, __u64 nios_up)
@@ -246,9 +252,8 @@ void dip_unplug(__u32 dev, double cur_time, __u64 nios_up)
 
        if (dip && dip->is_plugged) {
                dip->nplugs++;
-               dip->plugged_time += (cur_time - dip->last_plug);
-               dip->is_plugged = 0;
                dip->nios_up += nios_up;
+               unplug(dip, cur_time);
        }
 }
 
@@ -257,10 +262,9 @@ void dip_unplug_tm(__u32 dev, double cur_time, __u64 nios_up)
        struct d_info *dip = __dip_find(dev);
 
        if (dip && dip->is_plugged) {
-               dip->plugged_time += (cur_time - dip->last_plug);
-               dip->n_timer_unplugs++;
                dip->nios_upt += nios_up;
                dip->nplugs_t++;
+               unplug(dip, cur_time);
        }
 }
 
index c6c8c993dc4c735bd3cfbbea483ce8e365aea18b..d05d9966138141e3b9ca10a9de06e1c91c9778e1 100644 (file)
@@ -143,7 +143,7 @@ struct d_info {
        __u32 device;
 
        int pre_culling;
-       int is_plugged, nplugs, nplugs_t, n_timer_unplugs;
+       int is_plugged, nplugs, nplugs_t;
        __u64 nios_up, nios_upt;
        double start_time, last_plug, plugged_time, end_time;
 };
index 4e9b36025372d48043e6e3ec4cea0561b4cc470d..8693de7eb78a42cb955101bdfcd1390d3738ba67 100644 (file)
@@ -513,7 +513,7 @@ void output_pip_avg(FILE *ofp, char *hdr, ai_pip_t (*func)(struct p_info *))
 
 int n_plugs;
 struct plug_info {
-       long n_plugs, n_timer_unplugs;
+       long n_plugs, n_unplugs_t;
        double t_percent;
 } plug_info;
 
@@ -523,25 +523,26 @@ void __dip_output_plug(struct d_info *dip, void *arg)
        FILE *ofp = arg;
        double delta, pct;
 
-       if (dip->nplugs > 0) {
-               if (dip->is_plugged) dip_unplug(dip->device, dip->end_time, 0);
+       if (dip->is_plugged)
+               dip_unplug(dip->device, dip->end_time, 0);
+       if ((dip->nplugs + dip->nplugs_t) > 0) {
                delta = dip->end_time - dip->start_time;
-               pct = 100.0 * ((dip->plugged_time / delta) / delta);
+               pct = 100.0 * (dip->plugged_time / delta);
 
                fprintf(ofp, "%10s | %10d(%10d) | %13.9lf%%\n",
                        make_dev_hdr(dev_info, 15, dip, 1),
-                       dip->nplugs, dip->n_timer_unplugs, pct);
+                       dip->nplugs, dip->nplugs_t, pct);
 
                if (easy_parse_avgs) {
                        fprintf(xavgs_ofp,
                                "PLG %s %d %d %.9lf\n",
                                make_dev_hdr(dev_info, 15, dip, 0),
-                               dip->nplugs, dip->n_timer_unplugs, pct);
+                               dip->nplugs, dip->nplugs_t, pct);
                }
 
                n_plugs++;
                plug_info.n_plugs += dip->nplugs;
-               plug_info.n_timer_unplugs += dip->n_timer_unplugs;
+               plug_info.n_unplugs_t += dip->nplugs_t;
                plug_info.t_percent += pct;
        }
 }
@@ -552,7 +553,7 @@ void __dip_output_plug_all(FILE *ofp, struct plug_info *p)
        fprintf(ofp, "%10s | %10s %10s  | %s\n",
                "Overall", "# Plugs", "# Timer Us", "% Time Q Plugged");
        fprintf(ofp, "%10s | %10ld(%10ld) | %13.9lf%%\n", "Average",
-               p->n_plugs / n_plugs, p->n_timer_unplugs / n_plugs,
+               p->n_plugs / n_plugs, p->n_unplugs_t / n_plugs,
                p->t_percent / n_plugs);
 
 }