]> xenbits.xensource.com Git - people/dstodden/blktap.git/commitdiff
CA-27472: Count/log incoming/outgoing VBD kicks in tapdisk.
authorDaniel Stodden <daniel.stodden@citrix.com>
Fri, 10 Apr 2009 03:49:40 +0000 (20:49 -0700)
committerDaniel Stodden <daniel.stodden@citrix.com>
Fri, 10 Apr 2009 03:49:40 +0000 (20:49 -0700)
The notification count helps debugging some interesting VBD
problems. One is that that dom0 plugs have a problem with batching
requests issued through the frontend device (xvd). Looks like there is
no batching at all.

drivers/tapdisk-vbd.c
drivers/tapdisk-vbd.h

index d0b548b5d8a862f9ef14ea58c9f21f8fe7a55663..01e547a9217308754adfbb674257af9498fc5d10 100644 (file)
@@ -859,10 +859,11 @@ tapdisk_vbd_shutdown(td_vbd_t *vbd)
                vbd->name, vbd->state, new, pending, failed, completed);
        DPRINTF("last activity: %010ld.%06ld, errors: 0x%04"PRIx64", "
                "retries: 0x%04"PRIx64", received: 0x%08"PRIx64", "
-               "returned: 0x%08"PRIx64", kicked: 0x%08"PRIx64"\n",
+               "returned: 0x%08"PRIx64", kicked: 0x%08"PRIx64", "
+               "kicks in: 0x%08"PRIx64", out: 0x%08"PRIu64"\n",
                vbd->ts.tv_sec, vbd->ts.tv_usec,
                vbd->errors, vbd->retries, vbd->received, vbd->returned,
-               vbd->kicked);
+               vbd->kicked, vbd->kicks_in, vbd->kicks_out);
        DPRINTF("failure cnt: %d ttl min: %.3f max: %.3f avg: %.3f stdev: %.3f\n",
                vbd->failure_ttl.k,
                TD_STATS_MIN(&vbd->failure_ttl), TD_STATS_MAX(&vbd->failure_ttl),
@@ -923,10 +924,12 @@ tapdisk_vbd_debug(td_vbd_t *vbd)
        DBG(TLOG_WARN, "%s: state: 0x%08x, new: 0x%02x, pending: 0x%02x, "
            "failed: 0x%02x, completed: 0x%02x, last activity: %010ld.%06ld, "
            "errors: 0x%04llx, retries: 0x%04llx, received: 0x%08llx, "
-           "returned: 0x%08llx, kicked: 0x%08llx\n",
+           "returned: 0x%08llx, kicked: 0x%08llx, "
+           "kicks in: 0x%08"PRIx64", out: 0x%08"PRIx64"\n",
            vbd->name, vbd->state, new, pending, failed, completed,
            vbd->ts.tv_sec, vbd->ts.tv_usec, vbd->errors, vbd->retries,
-           vbd->received, vbd->returned, vbd->kicked);
+           vbd->received, vbd->returned, vbd->kicked,
+           vbd->kicks_in, vbd->kicks_out);
 
        tapdisk_vbd_for_each_image(vbd, image, tmp)
                td_debug(image);
@@ -1141,6 +1144,7 @@ tapdisk_vbd_kick(td_vbd_t *vbd)
        if (!n)
                return 0;
 
+       vbd->kicks_out++;
        vbd->kicked += n;
        RING_PUSH_RESPONSES(&ring->fe_ring);
        ioctl(ring->fd, BLKTAP_IOCTL_KICK_FE, 0);
@@ -1803,6 +1807,7 @@ tapdisk_vbd_ring_event(event_id_t id, char mode, void *private)
 
        vbd = (td_vbd_t *)private;
 
+       vbd->kicks_in++;
        tapdisk_vbd_pull_ring_requests(vbd);
        tapdisk_vbd_issue_requests(vbd);
 
index ca67f29ca3be0a1a7bcce4e05aa4018d3aada759..28ba1ac2b347c87ff1656b05fe1f063af69c5632 100644 (file)
@@ -122,6 +122,9 @@ struct td_vbd_handle {
        uint64_t                    retries;
        uint64_t                    errors;
 
+       uint64_t                    kicks_in;
+       uint64_t                    kicks_out;
+
        struct dispersion           failure_ttl;
 };