Benchmark shows small performance improvement on fusion io device. Before: seq-read : io=1,024MB, bw=19,982KB/s, iops=39,964, runt= 52475msec seq-write: io=1,024MB, bw=20,321KB/s, iops=40,641, runt= 51601msec rnd-read : io=1,024MB, bw=15,404KB/s, iops=30,808, runt= 68070msec rnd-write: io=1,024MB, bw=14,776KB/s, iops=29,552, runt= 70963msec After: seq-read : io=1,024MB, bw=20,343KB/s, iops=40,685, runt= 51546msec seq-write: io=1,024MB, bw=20,803KB/s, iops=41,606, runt= 50404msec rnd-read : io=1,024MB, bw=16,221KB/s, iops=32,442, runt= 64642msec rnd-write: io=1,024MB, bw=15,199KB/s, iops=30,397, runt= 68991msec Signed-off-by: Asias He <asias at redhat.com> --- drivers/block/virtio_blk.c | 10 ---------- 1 files changed, 0 insertions(+), 10 deletions(-) diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c index c4a60ba..338da9a 100644 --- a/drivers/block/virtio_blk.c +++ b/drivers/block/virtio_blk.c @@ -29,9 +29,6 @@ struct virtio_blk /* The disk structure for the kernel. */ struct gendisk *disk; - /* Request tracking. */ - struct list_head reqs; - mempool_t *pool; /* Process context for config space updates */ @@ -55,7 +52,6 @@ struct virtio_blk struct virtblk_req { - struct list_head list; struct request *req; struct virtio_blk_outhdr out_hdr; struct virtio_scsi_inhdr in_hdr; @@ -99,7 +95,6 @@ static void blk_done(struct virtqueue *vq) } __blk_end_request_all(vbr->req, error); - list_del(&vbr->list); mempool_free(vbr, vblk->pool); } /* In case queue is stopped waiting for more buffers. */ @@ -184,7 +179,6 @@ static bool do_req(struct request_queue *q, struct virtio_blk *vblk, return false; } - list_add_tail(&vbr->list, &vblk->reqs); return true; } @@ -408,7 +402,6 @@ static int __devinit virtblk_probe(struct virtio_device *vdev) goto out_free_index; } - INIT_LIST_HEAD(&vblk->reqs); spin_lock_init(&vblk->lock); vblk->vdev = vdev; vblk->sg_elems = sg_elems; @@ -571,9 +564,6 @@ static void __devexit virtblk_remove(struct virtio_device *vdev) vblk->config_enable = false; mutex_unlock(&vblk->config_lock); - /* Nothing should be pending. */ - BUG_ON(!list_empty(&vblk->reqs)); - /* Stop all the virtqueues. */ vdev->config->reset(vdev); -- 1.7.7.6
Stefan Hajnoczi
2012-Mar-30 10:14 UTC
[PATCH] virtio_blk: Drop unused request tracking list
On Fri, Mar 30, 2012 at 4:24 AM, Asias He <asias at redhat.com> wrote:> Benchmark shows small performance improvement on fusion io device. > > Before: > ?seq-read : io=1,024MB, bw=19,982KB/s, iops=39,964, runt= 52475msec > ?seq-write: io=1,024MB, bw=20,321KB/s, iops=40,641, runt= 51601msec > ?rnd-read : io=1,024MB, bw=15,404KB/s, iops=30,808, runt= 68070msec > ?rnd-write: io=1,024MB, bw=14,776KB/s, iops=29,552, runt= 70963msec > > After: > ?seq-read : io=1,024MB, bw=20,343KB/s, iops=40,685, runt= 51546msec > ?seq-write: io=1,024MB, bw=20,803KB/s, iops=41,606, runt= 50404msec > ?rnd-read : io=1,024MB, bw=16,221KB/s, iops=32,442, runt= 64642msec > ?rnd-write: io=1,024MB, bw=15,199KB/s, iops=30,397, runt= 68991msec > > Signed-off-by: Asias He <asias at redhat.com> > --- > ?drivers/block/virtio_blk.c | ? 10 ---------- > ?1 files changed, 0 insertions(+), 10 deletions(-)Thanks for providing performance results. It's a bit scary that this unused list has an impact...I'm sure we have worse things elsewhere in the KVM storage code path. Reviewed-by: Stefan Hajnoczi <stefanha at linux.vnet.ibm.com>
Michael S. Tsirkin
2012-Apr-01 10:07 UTC
[PATCH] virtio_blk: Drop unused request tracking list
On Fri, Mar 30, 2012 at 11:24:10AM +0800, Asias He wrote:> Benchmark shows small performance improvement on fusion io device. > > Before: > seq-read : io=1,024MB, bw=19,982KB/s, iops=39,964, runt= 52475msec > seq-write: io=1,024MB, bw=20,321KB/s, iops=40,641, runt= 51601msec > rnd-read : io=1,024MB, bw=15,404KB/s, iops=30,808, runt= 68070msec > rnd-write: io=1,024MB, bw=14,776KB/s, iops=29,552, runt= 70963msec > > After: > seq-read : io=1,024MB, bw=20,343KB/s, iops=40,685, runt= 51546msec > seq-write: io=1,024MB, bw=20,803KB/s, iops=41,606, runt= 50404msec > rnd-read : io=1,024MB, bw=16,221KB/s, iops=32,442, runt= 64642msec > rnd-write: io=1,024MB, bw=15,199KB/s, iops=30,397, runt= 68991msec > > Signed-off-by: Asias He <asias at redhat.com>Thanks, the patch makes sense to me. Acked-by: Michael S. Tsirkin <mst at redhat.com> This is 3.5 material, correct?> --- > drivers/block/virtio_blk.c | 10 ---------- > 1 files changed, 0 insertions(+), 10 deletions(-) > > diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c > index c4a60ba..338da9a 100644 > --- a/drivers/block/virtio_blk.c > +++ b/drivers/block/virtio_blk.c > @@ -29,9 +29,6 @@ struct virtio_blk > /* The disk structure for the kernel. */ > struct gendisk *disk; > > - /* Request tracking. */ > - struct list_head reqs; > - > mempool_t *pool; > > /* Process context for config space updates */ > @@ -55,7 +52,6 @@ struct virtio_blk > > struct virtblk_req > { > - struct list_head list; > struct request *req; > struct virtio_blk_outhdr out_hdr; > struct virtio_scsi_inhdr in_hdr; > @@ -99,7 +95,6 @@ static void blk_done(struct virtqueue *vq) > } > > __blk_end_request_all(vbr->req, error); > - list_del(&vbr->list); > mempool_free(vbr, vblk->pool); > } > /* In case queue is stopped waiting for more buffers. */ > @@ -184,7 +179,6 @@ static bool do_req(struct request_queue *q, struct virtio_blk *vblk, > return false; > } > > - list_add_tail(&vbr->list, &vblk->reqs); > return true; > } > > @@ -408,7 +402,6 @@ static int __devinit virtblk_probe(struct virtio_device *vdev) > goto out_free_index; > } > > - INIT_LIST_HEAD(&vblk->reqs); > spin_lock_init(&vblk->lock); > vblk->vdev = vdev; > vblk->sg_elems = sg_elems; > @@ -571,9 +564,6 @@ static void __devexit virtblk_remove(struct virtio_device *vdev) > vblk->config_enable = false; > mutex_unlock(&vblk->config_lock); > > - /* Nothing should be pending. */ > - BUG_ON(!list_empty(&vblk->reqs)); > - > /* Stop all the virtqueues. */ > vdev->config->reset(vdev); > > -- > 1.7.7.6
On 04/01/2012 06:07 PM, Michael S. Tsirkin wrote:> On Fri, Mar 30, 2012 at 11:24:10AM +0800, Asias He wrote: >> Benchmark shows small performance improvement on fusion io device. >> >> Before: >> seq-read : io=1,024MB, bw=19,982KB/s, iops=39,964, runt= 52475msec >> seq-write: io=1,024MB, bw=20,321KB/s, iops=40,641, runt= 51601msec >> rnd-read : io=1,024MB, bw=15,404KB/s, iops=30,808, runt= 68070msec >> rnd-write: io=1,024MB, bw=14,776KB/s, iops=29,552, runt= 70963msec >> >> After: >> seq-read : io=1,024MB, bw=20,343KB/s, iops=40,685, runt= 51546msec >> seq-write: io=1,024MB, bw=20,803KB/s, iops=41,606, runt= 50404msec >> rnd-read : io=1,024MB, bw=16,221KB/s, iops=32,442, runt= 64642msec >> rnd-write: io=1,024MB, bw=15,199KB/s, iops=30,397, runt= 68991msec >> >> Signed-off-by: Asias He<asias at redhat.com> > > Thanks, the patch makes sense to me. > Acked-by: Michael S. Tsirkin<mst at redhat.com> > > This is 3.5 material, correct?Yes, I think so.> >> --- >> drivers/block/virtio_blk.c | 10 ---------- >> 1 files changed, 0 insertions(+), 10 deletions(-) >> >> diff --git a/drivers/block/virtio_blk.c b/drivers/block/virtio_blk.c >> index c4a60ba..338da9a 100644 >> --- a/drivers/block/virtio_blk.c >> +++ b/drivers/block/virtio_blk.c >> @@ -29,9 +29,6 @@ struct virtio_blk >> /* The disk structure for the kernel. */ >> struct gendisk *disk; >> >> - /* Request tracking. */ >> - struct list_head reqs; >> - >> mempool_t *pool; >> >> /* Process context for config space updates */ >> @@ -55,7 +52,6 @@ struct virtio_blk >> >> struct virtblk_req >> { >> - struct list_head list; >> struct request *req; >> struct virtio_blk_outhdr out_hdr; >> struct virtio_scsi_inhdr in_hdr; >> @@ -99,7 +95,6 @@ static void blk_done(struct virtqueue *vq) >> } >> >> __blk_end_request_all(vbr->req, error); >> - list_del(&vbr->list); >> mempool_free(vbr, vblk->pool); >> } >> /* In case queue is stopped waiting for more buffers. */ >> @@ -184,7 +179,6 @@ static bool do_req(struct request_queue *q, struct virtio_blk *vblk, >> return false; >> } >> >> - list_add_tail(&vbr->list,&vblk->reqs); >> return true; >> } >> >> @@ -408,7 +402,6 @@ static int __devinit virtblk_probe(struct virtio_device *vdev) >> goto out_free_index; >> } >> >> - INIT_LIST_HEAD(&vblk->reqs); >> spin_lock_init(&vblk->lock); >> vblk->vdev = vdev; >> vblk->sg_elems = sg_elems; >> @@ -571,9 +564,6 @@ static void __devexit virtblk_remove(struct virtio_device *vdev) >> vblk->config_enable = false; >> mutex_unlock(&vblk->config_lock); >> >> - /* Nothing should be pending. */ >> - BUG_ON(!list_empty(&vblk->reqs)); >> - >> /* Stop all the virtqueues. */ >> vdev->config->reset(vdev); >> >> -- >> 1.7.7.6 > -- > To unsubscribe from this list: send the line "unsubscribe kvm" in > the body of a message to majordomo at vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html-- Asias
On Fri, 30 Mar 2012 11:24:10 +0800, Asias He <asias at redhat.com> wrote:> Benchmark shows small performance improvement on fusion io device. > > Before: > seq-read : io=1,024MB, bw=19,982KB/s, iops=39,964, runt= 52475msec > seq-write: io=1,024MB, bw=20,321KB/s, iops=40,641, runt= 51601msec > rnd-read : io=1,024MB, bw=15,404KB/s, iops=30,808, runt= 68070msec > rnd-write: io=1,024MB, bw=14,776KB/s, iops=29,552, runt= 70963msec > > After: > seq-read : io=1,024MB, bw=20,343KB/s, iops=40,685, runt= 51546msec > seq-write: io=1,024MB, bw=20,803KB/s, iops=41,606, runt= 50404msec > rnd-read : io=1,024MB, bw=16,221KB/s, iops=32,442, runt= 64642msec > rnd-write: io=1,024MB, bw=15,199KB/s, iops=30,397, runt= 68991msec > > Signed-off-by: Asias He <asias at redhat.com>Thanks. It didn't really need a benchmark to justify this cleanup, but you certainly get points for thoroughness! Applied, Rusty.