From: Daniel Stodden Date: Fri, 10 Apr 2009 03:49:40 +0000 (-0700) Subject: CA-27472: Count/log incoming/outgoing VBD kicks in tapdisk. X-Git-Url: http://xenbits.xensource.com/gitweb?a=commitdiff_plain;h=2e160f2e560bc5ac06d61252e1c9dfab6abc47c3;p=people%2Fdstodden%2Fblktap.git CA-27472: Count/log incoming/outgoing VBD kicks in tapdisk. 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. --- diff --git a/drivers/tapdisk-vbd.c b/drivers/tapdisk-vbd.c index d0b548b..01e547a 100644 --- a/drivers/tapdisk-vbd.c +++ b/drivers/tapdisk-vbd.c @@ -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); diff --git a/drivers/tapdisk-vbd.h b/drivers/tapdisk-vbd.h index ca67f29..28ba1ac 100644 --- a/drivers/tapdisk-vbd.h +++ b/drivers/tapdisk-vbd.h @@ -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; };