[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-block] [Qemu-devel] [PATCH] virtio-blk: trace vdev so devices
From: |
Fam Zheng |
Subject: |
Re: [Qemu-block] [Qemu-devel] [PATCH] virtio-blk: trace vdev so devices can be distinguished |
Date: |
Fri, 16 Jun 2017 08:28:58 +0800 |
User-agent: |
Mutt/1.8.0 (2017-02-23) |
On Wed, 06/14 10:29, Stefan Hajnoczi wrote:
> It is hard to analyze trace logs with multiple virtio-blk devices
> because none of the trace events include the VirtIODevice *vdev.
>
> This patch adds vdev so it's clear which device a request is associated
> with.
>
> I considered using VirtIOBlock *s instead but VirtIODevice *vdev is more
> general and may be correlated with generic virtio trace events like
> virtio_set_status.
>
> Signed-off-by: Stefan Hajnoczi <address@hidden>
> ---
> hw/block/virtio-blk.c | 12 +++++++-----
> hw/block/trace-events | 10 +++++-----
> 2 files changed, 12 insertions(+), 10 deletions(-)
>
> diff --git a/hw/block/virtio-blk.c b/hw/block/virtio-blk.c
> index 604d37d..c0bd247 100644
> --- a/hw/block/virtio-blk.c
> +++ b/hw/block/virtio-blk.c
> @@ -50,7 +50,7 @@ static void virtio_blk_req_complete(VirtIOBlockReq *req,
> unsigned char status)
> VirtIOBlock *s = req->dev;
> VirtIODevice *vdev = VIRTIO_DEVICE(s);
>
> - trace_virtio_blk_req_complete(req, status);
> + trace_virtio_blk_req_complete(vdev, req, status);
>
> stb_p(&req->in->status, status);
> virtqueue_push(req->vq, &req->elem, req->in_len);
> @@ -88,12 +88,13 @@ static void virtio_blk_rw_complete(void *opaque, int ret)
> {
> VirtIOBlockReq *next = opaque;
> VirtIOBlock *s = next->dev;
> + VirtIODevice *vdev = VIRTIO_DEVICE(s);
>
> aio_context_acquire(blk_get_aio_context(s->conf.conf.blk));
> while (next) {
> VirtIOBlockReq *req = next;
> next = req->mr_next;
> - trace_virtio_blk_rw_complete(req, ret);
> + trace_virtio_blk_rw_complete(vdev, req, ret);
>
> if (req->qiov.nalloc != -1) {
> /* If nalloc is != 1 req->qiov is a local copy of the original
> @@ -355,7 +356,8 @@ static inline void submit_requests(BlockBackend *blk,
> MultiReqBuffer *mrb,
> mrb->reqs[i - 1]->mr_next = mrb->reqs[i];
> }
>
> - trace_virtio_blk_submit_multireq(mrb, start, num_reqs,
> +
> trace_virtio_blk_submit_multireq(VIRTIO_DEVICE(mrb->reqs[start]->dev),
QOM casting is not strictly necessary because the parameter type is void *, but
it's clearer.
> + mrb, start, num_reqs,
> sector_num << BDRV_SECTOR_BITS,
> qiov->size, is_write);
> block_acct_merge_done(blk_get_stats(blk),
> @@ -526,11 +528,11 @@ static int virtio_blk_handle_request(VirtIOBlockReq
> *req, MultiReqBuffer *mrb)
>
> if (is_write) {
> qemu_iovec_init_external(&req->qiov, iov, out_num);
> - trace_virtio_blk_handle_write(req, req->sector_num,
> + trace_virtio_blk_handle_write(vdev, req, req->sector_num,
> req->qiov.size / BDRV_SECTOR_SIZE);
> } else {
> qemu_iovec_init_external(&req->qiov, in_iov, in_num);
> - trace_virtio_blk_handle_read(req, req->sector_num,
> + trace_virtio_blk_handle_read(vdev, req, req->sector_num,
> req->qiov.size / BDRV_SECTOR_SIZE);
> }
>
> diff --git a/hw/block/trace-events b/hw/block/trace-events
> index 65e83dc..c332c01 100644
> --- a/hw/block/trace-events
> +++ b/hw/block/trace-events
> @@ -1,11 +1,11 @@
> # See docs/tracing.txt for syntax documentation.
>
> # hw/block/virtio-blk.c
> -virtio_blk_req_complete(void *req, int status) "req %p status %d"
> -virtio_blk_rw_complete(void *req, int ret) "req %p ret %d"
> -virtio_blk_handle_write(void *req, uint64_t sector, size_t nsectors) "req %p
> sector %"PRIu64" nsectors %zu"
> -virtio_blk_handle_read(void *req, uint64_t sector, size_t nsectors) "req %p
> sector %"PRIu64" nsectors %zu"
> -virtio_blk_submit_multireq(void *mrb, int start, int num_reqs, uint64_t
> offset, size_t size, bool is_write) "mrb %p start %d num_reqs %d offset
> %"PRIu64" size %zu is_write %d"
> +virtio_blk_req_complete(void *vdev, void *req, int status) "vdev %p req %p
> status %d"
> +virtio_blk_rw_complete(void *vdev, void *req, int ret) "vdev %p req %p ret
> %d"
> +virtio_blk_handle_write(void *vdev, void *req, uint64_t sector, size_t
> nsectors) "vdev %p req %p sector %"PRIu64" nsectors %zu"
> +virtio_blk_handle_read(void *vdev, void *req, uint64_t sector, size_t
> nsectors) "vdev %p req %p sector %"PRIu64" nsectors %zu"
> +virtio_blk_submit_multireq(void *vdev, void *mrb, int start, int num_reqs,
> uint64_t offset, size_t size, bool is_write) "vdev %p mrb %p start %d
> num_reqs %d offset %"PRIu64" size %zu is_write %d"
>
> # hw/block/hd-geometry.c
> hd_geometry_lchs_guess(void *blk, int cyls, int heads, int secs) "blk %p
> LCHS %d %d %d"
> --
> 2.9.4
>
>
Reviewed-by: Fam Zheng <address@hidden>