Skip to contentSkip to conversation

virtio-blk: allow more than one in-flight request

PATCH In review Marcelo Tosatti 3 participants 4 messages Mar 27, 2008

Subsystems (4)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 virtio-blk: allow more than one in-flight request

Allow more than one in-flight request in the virtio ring. This allows the host driver to submit requests in parallel.

drivers/block/virtio_blk.c +4 -1
index 3b1a68d..5bb041f 100644
@@ -30,6 +30,8 @@ struct virtio_blk
 	struct scatterlist sg[VIRTIO_MAX_SG];
 };
 
+#define VIRTIO_BLK_POOL_SIZE 32
+
 struct virtblk_req
 {
 	struct list_head list;
@@ -202,7 +204,8 @@ static int virtblk_probe(struct virtio_device *vdev)
 		goto out_free_vblk;
 	}
 
-	vblk->pool = mempool_create_kmalloc_pool(1,sizeof(struct virtblk_req));
+	vblk->pool = mempool_create_kmalloc_pool(VIRTIO_BLK_POOL_SIZE,
+                        sizeof(struct virtblk_req));
 	if (!vblk->pool) {
 		err = -ENOMEM;
 		goto out_free_vq;

-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace

#1 lore raw

Am Donnerstag, 27. März 2008 schrieb Marcelo Tosatti:

Quoted 3 lines

Allow more than one in-flight request in the virtio ring. This allows the host driver to submit requests in parallel.

[...]

Quoted 4 lines
drivers/block/virtio_blk.c +0 -0
index 3b1a68d..5bb041f 100644

[...]

drivers/block/virtio_blk.c static int virtblk_probe(struct virtio_device *vdev) · line 211

Quoted 10 lines
drivers/block/virtio_blk.c +2 -1
@@ -202,7 +204,8 @@ static int virtblk_probe(struct virtio_device *vdev)
 		goto out_free_vblk;
 	}
 
-	vblk->pool = mempool_create_kmalloc_pool(1,sizeof(struct virtblk_req));
+	vblk->pool = mempool_create_kmalloc_pool(VIRTIO_BLK_POOL_SIZE,
+                        sizeof(struct virtblk_req));
 	if (!vblk->pool) {
 		err = -ENOMEM;
 		goto out_free_vq;

[...]

Huh? I dont understand. You only change the number of pre-allocated pool entries. mempool_alloc should allow several allocations, even with 1 as initialization value. The pre-initialized value is only for oom situations. No?

Christian

-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace

#2 lore raw
Quoted 22 lines · Christian Borntraeger

Am Donnerstag, 27. März 2008 schrieb Marcelo Tosatti:

Quoted 3 lines

Allow more than one in-flight request in the virtio ring. This allows the host driver to submit requests in parallel.

[...]

Quoted 4 lines
drivers/block/virtio_blk.c +0 -0
index 3b1a68d..5bb041f 100644

[...]

Quoted 10 lines
drivers/block/virtio_blk.c +2 -1
@@ -202,7 +204,8 @@ static int virtblk_probe(struct virtio_device *vdev)
 		goto out_free_vblk;
 	}
 
-	vblk->pool = mempool_create_kmalloc_pool(1,sizeof(struct virtblk_req));
+	vblk->pool = mempool_create_kmalloc_pool(VIRTIO_BLK_POOL_SIZE,
+                        sizeof(struct virtblk_req));
 	if (!vblk->pool) {
 		err = -ENOMEM;
 		goto out_free_vq;

[...]

Quoted 4 lines

Huh? I dont understand. You only change the number of pre-allocated pool entries. mempool_alloc should allow several allocations, even with 1 as initialization value. The pre-initialized value is only for oom situations. No?

Thats right, the mempool allocation will fail under memory pressure (since __GFP_NOMEMALLOC is passed from mempool_allocate), but under normal circumstances it will allocate more than one entry.

So ignore the patch. Sorry for the noise.

-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace

#3 lore raw
In reply to Marcelo Tosatti
Quoted 4 lines · On Friday 28 March 2008 03:29:48 Marcelo Tosatti wrote:

Allow more than one in-flight request in the virtio ring. This allows the host driver to submit requests in parallel.

For a moment, I thought this was true and felt very stupid :)

For the record, the mempool_alloc becomes kmalloc with fallback to the pool. We only need one because we can make progress with one request at a time if we have to.

Cheers,
Rusty.

-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace