* [PATCH/RFC] virtio_blk: check for hardsector size from host
@ 2008-05-27 9:04 Christian Borntraeger
2008-05-29 8:04 ` Rusty Russell
2008-05-29 8:04 ` Rusty Russell
0 siblings, 2 replies; 21+ messages in thread
From: Christian Borntraeger @ 2008-05-27 9:04 UTC (permalink / raw)
To: Rusty Russell; +Cc: Jens Axboe, virtualization, kvm
Rusty, Jens,
I need your opinion on the following patch. It seems to work, but I would like
to get some feedback if this patch is the right approach:
---
Currently virtio_blk assumes a 512 byte hard sector size. This can cause
trouble / performance issues if the backing has a different block size
(like a file on an ext3 file system formatted with 4k block size or a dasd
device).
Lets add a feature flag that tells the guest to use a different hard sector
size than 512 byte. The host can use stat->st_blksize to determine the right
hard sector size for a specific backing.
Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com>
---
drivers/block/virtio_blk.c | 10 +++++++++-
include/linux/virtio_blk.h | 3 +++
2 files changed, 12 insertions(+), 1 deletion(-)
Index: kvm/drivers/block/virtio_blk.c
===================================================================
--- kvm.orig/drivers/block/virtio_blk.c
+++ kvm/drivers/block/virtio_blk.c
@@ -196,6 +196,7 @@ static int virtblk_probe(struct virtio_d
int err;
u64 cap;
u32 v;
+ u64 blk_size;
if (index_to_minor(index) >= 1 << MINORBITS)
return -ENOSPC;
@@ -290,6 +291,13 @@ static int virtblk_probe(struct virtio_d
if (!err)
blk_queue_max_hw_segments(vblk->disk->queue, v);
+ /* Host can optionally specify the block size of the device */
+ err = virtio_config_val(vdev, VIRTIO_BLK_F_BLK_SIZE,
+ offsetof(struct virtio_blk_config, blk_size),
+ &blk_size);
+ if (!err)
+ blk_queue_hardsect_size(vblk->disk->queue, blk_size);
+
add_disk(vblk->disk);
return 0;
@@ -329,7 +337,7 @@ static struct virtio_device_id id_table[
static unsigned int features[] = {
VIRTIO_BLK_F_BARRIER, VIRTIO_BLK_F_SEG_MAX, VIRTIO_BLK_F_SIZE_MAX,
- VIRTIO_BLK_F_GEOMETRY, VIRTIO_BLK_F_RO,
+ VIRTIO_BLK_F_GEOMETRY, VIRTIO_BLK_F_RO, VIRTIO_BLK_F_BLK_SIZE,
};
static struct virtio_driver virtio_blk = {
Index: kvm/include/linux/virtio_blk.h
===================================================================
--- kvm.orig/include/linux/virtio_blk.h
+++ kvm/include/linux/virtio_blk.h
@@ -11,6 +11,7 @@
#define VIRTIO_BLK_F_SEG_MAX 2 /* Indicates maximum # of segments */
#define VIRTIO_BLK_F_GEOMETRY 4 /* Legacy geometry available */
#define VIRTIO_BLK_F_RO 5 /* Disk is read-only */
+#define VIRTIO_BLK_F_BLK_SIZE 6 /* Block size of disk is available*/
struct virtio_blk_config
{
@@ -26,6 +27,8 @@ struct virtio_blk_config
__u8 heads;
__u8 sectors;
} geometry;
+ /* block size of device (if VIRTIO_BLK_F_BLK_SIZE) */
+ __u64 blk_size;
} __attribute__((packed));
/* These two define direction. */
^ permalink raw reply [flat|nested] 21+ messages in thread* Re: [PATCH/RFC] virtio_blk: check for hardsector size from host 2008-05-27 9:04 [PATCH/RFC] virtio_blk: check for hardsector size from host Christian Borntraeger @ 2008-05-29 8:04 ` Rusty Russell 2008-05-29 8:04 ` Rusty Russell 1 sibling, 0 replies; 21+ messages in thread From: Rusty Russell @ 2008-05-29 8:04 UTC (permalink / raw) To: Christian Borntraeger; +Cc: virtualization, kvm, Jens Axboe On Tuesday 27 May 2008 19:04:59 Christian Borntraeger wrote: > Rusty, Jens, > > I need your opinion on the following patch. It seems to work, but I would > like to get some feedback if this patch is the right approach: Looks like the right approach to me. Don't know about the block side of it... Just that u64 seems like overkill: u32? Cheers, Rusty. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH/RFC] virtio_blk: check for hardsector size from host 2008-05-27 9:04 [PATCH/RFC] virtio_blk: check for hardsector size from host Christian Borntraeger 2008-05-29 8:04 ` Rusty Russell @ 2008-05-29 8:04 ` Rusty Russell 2008-05-29 8:11 ` Christian Borntraeger ` (3 more replies) 1 sibling, 4 replies; 21+ messages in thread From: Rusty Russell @ 2008-05-29 8:04 UTC (permalink / raw) To: Christian Borntraeger; +Cc: Jens Axboe, virtualization, kvm On Tuesday 27 May 2008 19:04:59 Christian Borntraeger wrote: > Rusty, Jens, > > I need your opinion on the following patch. It seems to work, but I would > like to get some feedback if this patch is the right approach: Looks like the right approach to me. Don't know about the block side of it... Just that u64 seems like overkill: u32? Cheers, Rusty. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH/RFC] virtio_blk: check for hardsector size from host 2008-05-29 8:04 ` Rusty Russell @ 2008-05-29 8:11 ` Christian Borntraeger 2008-05-29 8:11 ` Christian Borntraeger ` (2 subsequent siblings) 3 siblings, 0 replies; 21+ messages in thread From: Christian Borntraeger @ 2008-05-29 8:11 UTC (permalink / raw) To: Rusty Russell; +Cc: Jens Axboe, virtualization, kvm Am Donnerstag, 29. Mai 2008 schrieb Rusty Russell: > On Tuesday 27 May 2008 19:04:59 Christian Borntraeger wrote: > > Rusty, Jens, > > > > I need your opinion on the following patch. It seems to work, but I would > > like to get some feedback if this patch is the right approach: > > Looks like the right approach to me. Don't know about the block side of it... > > Just that u64 seems like overkill: u32? I looked at blksize_t, which seems to be long. So I decided to use u64 which should be enough (but still overkill...) on all platforms. While we are at it. Since we dont convert endianess any longer, should I change all the __le{..} definitions to __u{..} in virtio_blk.h ? Christian ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH/RFC] virtio_blk: check for hardsector size from host 2008-05-29 8:04 ` Rusty Russell 2008-05-29 8:11 ` Christian Borntraeger @ 2008-05-29 8:11 ` Christian Borntraeger 2008-05-29 8:12 ` Jens Axboe 2008-05-29 8:12 ` Jens Axboe 3 siblings, 0 replies; 21+ messages in thread From: Christian Borntraeger @ 2008-05-29 8:11 UTC (permalink / raw) To: Rusty Russell; +Cc: virtualization, kvm, Jens Axboe Am Donnerstag, 29. Mai 2008 schrieb Rusty Russell: > On Tuesday 27 May 2008 19:04:59 Christian Borntraeger wrote: > > Rusty, Jens, > > > > I need your opinion on the following patch. It seems to work, but I would > > like to get some feedback if this patch is the right approach: > > Looks like the right approach to me. Don't know about the block side of it... > > Just that u64 seems like overkill: u32? I looked at blksize_t, which seems to be long. So I decided to use u64 which should be enough (but still overkill...) on all platforms. While we are at it. Since we dont convert endianess any longer, should I change all the __le{..} definitions to __u{..} in virtio_blk.h ? Christian ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH/RFC] virtio_blk: check for hardsector size from host 2008-05-29 8:04 ` Rusty Russell 2008-05-29 8:11 ` Christian Borntraeger 2008-05-29 8:11 ` Christian Borntraeger @ 2008-05-29 8:12 ` Jens Axboe 2008-05-29 8:12 ` Jens Axboe 3 siblings, 0 replies; 21+ messages in thread From: Jens Axboe @ 2008-05-29 8:12 UTC (permalink / raw) To: Rusty Russell; +Cc: Christian Borntraeger, kvm, virtualization On Thu, May 29 2008, Rusty Russell wrote: > On Tuesday 27 May 2008 19:04:59 Christian Borntraeger wrote: > > Rusty, Jens, > > > > I need your opinion on the following patch. It seems to work, but I would > > like to get some feedback if this patch is the right approach: > > Looks like the right approach to me. Don't know about the block side > of it... Looks good to me, definitely an improvement for eg loop backed storage. > Just that u64 seems like overkill: u32? Definitely, u32 would be just fine, u64 is way overkill :-) -- Jens Axboe ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH/RFC] virtio_blk: check for hardsector size from host 2008-05-29 8:04 ` Rusty Russell ` (2 preceding siblings ...) 2008-05-29 8:12 ` Jens Axboe @ 2008-05-29 8:12 ` Jens Axboe 2008-05-29 8:13 ` Jens Axboe 2008-05-29 8:13 ` Jens Axboe 3 siblings, 2 replies; 21+ messages in thread From: Jens Axboe @ 2008-05-29 8:12 UTC (permalink / raw) To: Rusty Russell; +Cc: Christian Borntraeger, virtualization, kvm On Thu, May 29 2008, Rusty Russell wrote: > On Tuesday 27 May 2008 19:04:59 Christian Borntraeger wrote: > > Rusty, Jens, > > > > I need your opinion on the following patch. It seems to work, but I would > > like to get some feedback if this patch is the right approach: > > Looks like the right approach to me. Don't know about the block side > of it... Looks good to me, definitely an improvement for eg loop backed storage. > Just that u64 seems like overkill: u32? Definitely, u32 would be just fine, u64 is way overkill :-) -- Jens Axboe ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH/RFC] virtio_blk: check for hardsector size from host 2008-05-29 8:12 ` Jens Axboe @ 2008-05-29 8:13 ` Jens Axboe 2008-05-29 8:13 ` Jens Axboe 1 sibling, 0 replies; 21+ messages in thread From: Jens Axboe @ 2008-05-29 8:13 UTC (permalink / raw) To: Rusty Russell; +Cc: Christian Borntraeger, kvm, virtualization On Thu, May 29 2008, Jens Axboe wrote: > On Thu, May 29 2008, Rusty Russell wrote: > > On Tuesday 27 May 2008 19:04:59 Christian Borntraeger wrote: > > > Rusty, Jens, > > > > > > I need your opinion on the following patch. It seems to work, but I would > > > like to get some feedback if this patch is the right approach: > > > > Looks like the right approach to me. Don't know about the block side > > of it... > > Looks good to me, definitely an improvement for eg loop backed > storage. > > > Just that u64 seems like overkill: u32? > > Definitely, u32 would be just fine, u64 is way overkill :-) Even u16 would work, the block layer doesn't use more than an unsigned short for storing hardware sector size anyway. -- Jens Axboe ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH/RFC] virtio_blk: check for hardsector size from host 2008-05-29 8:12 ` Jens Axboe 2008-05-29 8:13 ` Jens Axboe @ 2008-05-29 8:13 ` Jens Axboe 2008-05-29 8:27 ` Christian Borntraeger 2008-05-29 8:27 ` Christian Borntraeger 1 sibling, 2 replies; 21+ messages in thread From: Jens Axboe @ 2008-05-29 8:13 UTC (permalink / raw) To: Rusty Russell; +Cc: Christian Borntraeger, virtualization, kvm On Thu, May 29 2008, Jens Axboe wrote: > On Thu, May 29 2008, Rusty Russell wrote: > > On Tuesday 27 May 2008 19:04:59 Christian Borntraeger wrote: > > > Rusty, Jens, > > > > > > I need your opinion on the following patch. It seems to work, but I would > > > like to get some feedback if this patch is the right approach: > > > > Looks like the right approach to me. Don't know about the block side > > of it... > > Looks good to me, definitely an improvement for eg loop backed > storage. > > > Just that u64 seems like overkill: u32? > > Definitely, u32 would be just fine, u64 is way overkill :-) Even u16 would work, the block layer doesn't use more than an unsigned short for storing hardware sector size anyway. -- Jens Axboe ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH/RFC] virtio_blk: check for hardsector size from host 2008-05-29 8:13 ` Jens Axboe @ 2008-05-29 8:27 ` Christian Borntraeger 2008-05-29 8:30 ` Jens Axboe 2008-05-29 8:30 ` [PATCH/RFC] " Jens Axboe 2008-05-29 8:27 ` Christian Borntraeger 1 sibling, 2 replies; 21+ messages in thread From: Christian Borntraeger @ 2008-05-29 8:27 UTC (permalink / raw) To: Jens Axboe; +Cc: Rusty Russell, virtualization, kvm Am Donnerstag, 29. Mai 2008 schrieb Jens Axboe: > > > Just that u64 seems like overkill: u32? > > > > Definitely, u32 would be just fine, u64 is way overkill :-) > > Even u16 would work, the block layer doesn't use more than an unsigned > short for storing hardware sector size anyway. Thanks, good to know. Do you think, that could change in the future? The virtio definition is going to be a public interface, so if there is a chance that u16 is not enough in the future I would respin the patch with u32, otherwise u16. Christian ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH/RFC] virtio_blk: check for hardsector size from host 2008-05-29 8:27 ` Christian Borntraeger @ 2008-05-29 8:30 ` Jens Axboe 2008-05-29 9:08 ` [PATCH] virtio_config: fix len calculation of config elements Christian Borntraeger ` (3 more replies) 2008-05-29 8:30 ` [PATCH/RFC] " Jens Axboe 1 sibling, 4 replies; 21+ messages in thread From: Jens Axboe @ 2008-05-29 8:30 UTC (permalink / raw) To: Christian Borntraeger; +Cc: Rusty Russell, virtualization, kvm On Thu, May 29 2008, Christian Borntraeger wrote: > Am Donnerstag, 29. Mai 2008 schrieb Jens Axboe: > > > > Just that u64 seems like overkill: u32? > > > > > > Definitely, u32 would be just fine, u64 is way overkill :-) > > > > Even u16 would work, the block layer doesn't use more than an unsigned > > short for storing hardware sector size anyway. > > Thanks, good to know. Do you think, that could change in the future? > The virtio definition is going to be a public interface, so if there > is a chance that u16 is not enough in the future I would respin the > patch with u32, otherwise u16. I'd say go with the u32, it's the safest option for an exported interface. -- Jens Axboe ^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH] virtio_config: fix len calculation of config elements 2008-05-29 8:30 ` Jens Axboe @ 2008-05-29 9:08 ` Christian Borntraeger 2008-05-29 9:08 ` Christian Borntraeger ` (2 subsequent siblings) 3 siblings, 0 replies; 21+ messages in thread From: Christian Borntraeger @ 2008-05-29 9:08 UTC (permalink / raw) To: Rusty Russell; +Cc: kvm, virtualization Rusty, This patch is a prereq for the virtio_blk blocksize patch, please apply it first. Adding an u32 value to the virtio_blk_config unconvered a small bug the config space defintions: v is a pointer, to we have to use sizeof(*v) instead of sizeof(v). Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com> --- include/linux/virtio_config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) Index: kvm/include/linux/virtio_config.h =================================================================== --- kvm.orig/include/linux/virtio_config.h +++ kvm/include/linux/virtio_config.h @@ -99,7 +99,7 @@ static inline bool virtio_has_feature(co * The return value is -ENOENT if the feature doesn't exist. Otherwise * the config value is copied into whatever is pointed to by v. */ #define virtio_config_val(vdev, fbit, offset, v) \ - virtio_config_buf((vdev), (fbit), (offset), (v), sizeof(v)) + virtio_config_buf((vdev), (fbit), (offset), (v), sizeof(*v)) static inline int virtio_config_buf(struct virtio_device *vdev, unsigned int fbit, ^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH] virtio_config: fix len calculation of config elements 2008-05-29 8:30 ` Jens Axboe 2008-05-29 9:08 ` [PATCH] virtio_config: fix len calculation of config elements Christian Borntraeger @ 2008-05-29 9:08 ` Christian Borntraeger 2008-05-30 3:18 ` Rusty Russell 2008-05-30 3:18 ` Rusty Russell 2008-05-29 9:08 ` [PATCH v2] virtio_blk: check for hardsector size from host Christian Borntraeger 2008-05-29 9:08 ` Christian Borntraeger 3 siblings, 2 replies; 21+ messages in thread From: Christian Borntraeger @ 2008-05-29 9:08 UTC (permalink / raw) To: Rusty Russell; +Cc: virtualization, kvm Rusty, This patch is a prereq for the virtio_blk blocksize patch, please apply it first. Adding an u32 value to the virtio_blk_config unconvered a small bug the config space defintions: v is a pointer, to we have to use sizeof(*v) instead of sizeof(v). Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com> --- include/linux/virtio_config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) Index: kvm/include/linux/virtio_config.h =================================================================== --- kvm.orig/include/linux/virtio_config.h +++ kvm/include/linux/virtio_config.h @@ -99,7 +99,7 @@ static inline bool virtio_has_feature(co * The return value is -ENOENT if the feature doesn't exist. Otherwise * the config value is copied into whatever is pointed to by v. */ #define virtio_config_val(vdev, fbit, offset, v) \ - virtio_config_buf((vdev), (fbit), (offset), (v), sizeof(v)) + virtio_config_buf((vdev), (fbit), (offset), (v), sizeof(*v)) static inline int virtio_config_buf(struct virtio_device *vdev, unsigned int fbit, ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH] virtio_config: fix len calculation of config elements 2008-05-29 9:08 ` Christian Borntraeger @ 2008-05-30 3:18 ` Rusty Russell 2008-05-30 3:18 ` Rusty Russell 1 sibling, 0 replies; 21+ messages in thread From: Rusty Russell @ 2008-05-30 3:18 UTC (permalink / raw) To: Christian Borntraeger; +Cc: kvm, virtualization On Thursday 29 May 2008 19:08:01 Christian Borntraeger wrote: > v is a pointer, to we have to use sizeof(*v) instead of sizeof(v). How embarassing. Applied, thanks. Rusty. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH] virtio_config: fix len calculation of config elements 2008-05-29 9:08 ` Christian Borntraeger 2008-05-30 3:18 ` Rusty Russell @ 2008-05-30 3:18 ` Rusty Russell 1 sibling, 0 replies; 21+ messages in thread From: Rusty Russell @ 2008-05-30 3:18 UTC (permalink / raw) To: Christian Borntraeger; +Cc: virtualization, kvm On Thursday 29 May 2008 19:08:01 Christian Borntraeger wrote: > v is a pointer, to we have to use sizeof(*v) instead of sizeof(v). How embarassing. Applied, thanks. Rusty. ^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH v2] virtio_blk: check for hardsector size from host 2008-05-29 8:30 ` Jens Axboe 2008-05-29 9:08 ` [PATCH] virtio_config: fix len calculation of config elements Christian Borntraeger 2008-05-29 9:08 ` Christian Borntraeger @ 2008-05-29 9:08 ` Christian Borntraeger 2008-05-30 3:41 ` Rusty Russell 2008-05-30 3:41 ` Rusty Russell 2008-05-29 9:08 ` Christian Borntraeger 3 siblings, 2 replies; 21+ messages in thread From: Christian Borntraeger @ 2008-05-29 9:08 UTC (permalink / raw) To: Jens Axboe; +Cc: Rusty Russell, virtualization, kvm Currently virtio_blk assumes a 512 byte hard sector size. This can cause trouble / performance issues if the backing has a different block size (like a file on an ext3 file system formatted with 4k block size or a dasd). Lets add a feature flag that tells the guest to use a different hard sector size than 512 byte. Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com> --- drivers/block/virtio_blk.c | 10 +++++++++- include/linux/virtio_blk.h | 3 +++ 2 files changed, 12 insertions(+), 1 deletion(-) Index: kvm/drivers/block/virtio_blk.c =================================================================== --- kvm.orig/drivers/block/virtio_blk.c +++ kvm/drivers/block/virtio_blk.c @@ -196,6 +196,7 @@ static int virtblk_probe(struct virtio_d int err; u64 cap; u32 v; + u32 blk_size; if (index_to_minor(index) >= 1 << MINORBITS) return -ENOSPC; @@ -290,6 +291,13 @@ static int virtblk_probe(struct virtio_d if (!err) blk_queue_max_hw_segments(vblk->disk->queue, v); + /* Host can optionally specify the block size of the device */ + err = virtio_config_val(vdev, VIRTIO_BLK_F_BLK_SIZE, + offsetof(struct virtio_blk_config, blk_size), + &blk_size); + if (!err) + blk_queue_hardsect_size(vblk->disk->queue, blk_size); + add_disk(vblk->disk); return 0; @@ -329,7 +337,7 @@ static struct virtio_device_id id_table[ static unsigned int features[] = { VIRTIO_BLK_F_BARRIER, VIRTIO_BLK_F_SEG_MAX, VIRTIO_BLK_F_SIZE_MAX, - VIRTIO_BLK_F_GEOMETRY, VIRTIO_BLK_F_RO, + VIRTIO_BLK_F_GEOMETRY, VIRTIO_BLK_F_RO, VIRTIO_BLK_F_BLK_SIZE, }; static struct virtio_driver virtio_blk = { Index: kvm/include/linux/virtio_blk.h =================================================================== --- kvm.orig/include/linux/virtio_blk.h +++ kvm/include/linux/virtio_blk.h @@ -11,6 +11,7 @@ #define VIRTIO_BLK_F_SEG_MAX 2 /* Indicates maximum # of segments */ #define VIRTIO_BLK_F_GEOMETRY 4 /* Legacy geometry available */ #define VIRTIO_BLK_F_RO 5 /* Disk is read-only */ +#define VIRTIO_BLK_F_BLK_SIZE 6 /* Block size of disk is available*/ struct virtio_blk_config { @@ -26,6 +27,8 @@ struct virtio_blk_config __u8 heads; __u8 sectors; } geometry; + /* block size of device (if VIRTIO_BLK_F_BLK_SIZE) */ + __u32 blk_size; } __attribute__((packed)); /* These two define direction. */ ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH v2] virtio_blk: check for hardsector size from host 2008-05-29 9:08 ` [PATCH v2] virtio_blk: check for hardsector size from host Christian Borntraeger @ 2008-05-30 3:41 ` Rusty Russell 2008-05-30 3:41 ` Rusty Russell 1 sibling, 0 replies; 21+ messages in thread From: Rusty Russell @ 2008-05-30 3:41 UTC (permalink / raw) To: Christian Borntraeger; +Cc: Jens Axboe, virtualization, kvm On Thursday 29 May 2008 19:08:26 Christian Borntraeger wrote: > Currently virtio_blk assumes a 512 byte hard sector size. This can cause > trouble / performance issues if the backing has a different block size > (like a file on an ext3 file system formatted with 4k block size or a > dasd). > > Lets add a feature flag that tells the guest to use a different hard sector > size than 512 byte. > > Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com> Thanks. I've queued this for next kernel (the other two will go striaght-away). Cheers, Rusty. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH v2] virtio_blk: check for hardsector size from host 2008-05-29 9:08 ` [PATCH v2] virtio_blk: check for hardsector size from host Christian Borntraeger 2008-05-30 3:41 ` Rusty Russell @ 2008-05-30 3:41 ` Rusty Russell 1 sibling, 0 replies; 21+ messages in thread From: Rusty Russell @ 2008-05-30 3:41 UTC (permalink / raw) To: Christian Borntraeger; +Cc: virtualization, kvm, Jens Axboe On Thursday 29 May 2008 19:08:26 Christian Borntraeger wrote: > Currently virtio_blk assumes a 512 byte hard sector size. This can cause > trouble / performance issues if the backing has a different block size > (like a file on an ext3 file system formatted with 4k block size or a > dasd). > > Lets add a feature flag that tells the guest to use a different hard sector > size than 512 byte. > > Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com> Thanks. I've queued this for next kernel (the other two will go striaght-away). Cheers, Rusty. ^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH v2] virtio_blk: check for hardsector size from host 2008-05-29 8:30 ` Jens Axboe ` (2 preceding siblings ...) 2008-05-29 9:08 ` [PATCH v2] virtio_blk: check for hardsector size from host Christian Borntraeger @ 2008-05-29 9:08 ` Christian Borntraeger 3 siblings, 0 replies; 21+ messages in thread From: Christian Borntraeger @ 2008-05-29 9:08 UTC (permalink / raw) To: Jens Axboe; +Cc: kvm, virtualization Currently virtio_blk assumes a 512 byte hard sector size. This can cause trouble / performance issues if the backing has a different block size (like a file on an ext3 file system formatted with 4k block size or a dasd). Lets add a feature flag that tells the guest to use a different hard sector size than 512 byte. Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com> --- drivers/block/virtio_blk.c | 10 +++++++++- include/linux/virtio_blk.h | 3 +++ 2 files changed, 12 insertions(+), 1 deletion(-) Index: kvm/drivers/block/virtio_blk.c =================================================================== --- kvm.orig/drivers/block/virtio_blk.c +++ kvm/drivers/block/virtio_blk.c @@ -196,6 +196,7 @@ static int virtblk_probe(struct virtio_d int err; u64 cap; u32 v; + u32 blk_size; if (index_to_minor(index) >= 1 << MINORBITS) return -ENOSPC; @@ -290,6 +291,13 @@ static int virtblk_probe(struct virtio_d if (!err) blk_queue_max_hw_segments(vblk->disk->queue, v); + /* Host can optionally specify the block size of the device */ + err = virtio_config_val(vdev, VIRTIO_BLK_F_BLK_SIZE, + offsetof(struct virtio_blk_config, blk_size), + &blk_size); + if (!err) + blk_queue_hardsect_size(vblk->disk->queue, blk_size); + add_disk(vblk->disk); return 0; @@ -329,7 +337,7 @@ static struct virtio_device_id id_table[ static unsigned int features[] = { VIRTIO_BLK_F_BARRIER, VIRTIO_BLK_F_SEG_MAX, VIRTIO_BLK_F_SIZE_MAX, - VIRTIO_BLK_F_GEOMETRY, VIRTIO_BLK_F_RO, + VIRTIO_BLK_F_GEOMETRY, VIRTIO_BLK_F_RO, VIRTIO_BLK_F_BLK_SIZE, }; static struct virtio_driver virtio_blk = { Index: kvm/include/linux/virtio_blk.h =================================================================== --- kvm.orig/include/linux/virtio_blk.h +++ kvm/include/linux/virtio_blk.h @@ -11,6 +11,7 @@ #define VIRTIO_BLK_F_SEG_MAX 2 /* Indicates maximum # of segments */ #define VIRTIO_BLK_F_GEOMETRY 4 /* Legacy geometry available */ #define VIRTIO_BLK_F_RO 5 /* Disk is read-only */ +#define VIRTIO_BLK_F_BLK_SIZE 6 /* Block size of disk is available*/ struct virtio_blk_config { @@ -26,6 +27,8 @@ struct virtio_blk_config __u8 heads; __u8 sectors; } geometry; + /* block size of device (if VIRTIO_BLK_F_BLK_SIZE) */ + __u32 blk_size; } __attribute__((packed)); /* These two define direction. */ ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH/RFC] virtio_blk: check for hardsector size from host 2008-05-29 8:27 ` Christian Borntraeger 2008-05-29 8:30 ` Jens Axboe @ 2008-05-29 8:30 ` Jens Axboe 1 sibling, 0 replies; 21+ messages in thread From: Jens Axboe @ 2008-05-29 8:30 UTC (permalink / raw) To: Christian Borntraeger; +Cc: kvm, virtualization On Thu, May 29 2008, Christian Borntraeger wrote: > Am Donnerstag, 29. Mai 2008 schrieb Jens Axboe: > > > > Just that u64 seems like overkill: u32? > > > > > > Definitely, u32 would be just fine, u64 is way overkill :-) > > > > Even u16 would work, the block layer doesn't use more than an unsigned > > short for storing hardware sector size anyway. > > Thanks, good to know. Do you think, that could change in the future? > The virtio definition is going to be a public interface, so if there > is a chance that u16 is not enough in the future I would respin the > patch with u32, otherwise u16. I'd say go with the u32, it's the safest option for an exported interface. -- Jens Axboe ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH/RFC] virtio_blk: check for hardsector size from host 2008-05-29 8:13 ` Jens Axboe 2008-05-29 8:27 ` Christian Borntraeger @ 2008-05-29 8:27 ` Christian Borntraeger 1 sibling, 0 replies; 21+ messages in thread From: Christian Borntraeger @ 2008-05-29 8:27 UTC (permalink / raw) To: Jens Axboe; +Cc: kvm, virtualization Am Donnerstag, 29. Mai 2008 schrieb Jens Axboe: > > > Just that u64 seems like overkill: u32? > > > > Definitely, u32 would be just fine, u64 is way overkill :-) > > Even u16 would work, the block layer doesn't use more than an unsigned > short for storing hardware sector size anyway. Thanks, good to know. Do you think, that could change in the future? The virtio definition is going to be a public interface, so if there is a chance that u16 is not enough in the future I would respin the patch with u32, otherwise u16. Christian ^ permalink raw reply [flat|nested] 21+ messages in thread
end of thread, other threads:[~2008-05-30 3:42 UTC | newest] Thread overview: 21+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2008-05-27 9:04 [PATCH/RFC] virtio_blk: check for hardsector size from host Christian Borntraeger 2008-05-29 8:04 ` Rusty Russell 2008-05-29 8:04 ` Rusty Russell 2008-05-29 8:11 ` Christian Borntraeger 2008-05-29 8:11 ` Christian Borntraeger 2008-05-29 8:12 ` Jens Axboe 2008-05-29 8:12 ` Jens Axboe 2008-05-29 8:13 ` Jens Axboe 2008-05-29 8:13 ` Jens Axboe 2008-05-29 8:27 ` Christian Borntraeger 2008-05-29 8:30 ` Jens Axboe 2008-05-29 9:08 ` [PATCH] virtio_config: fix len calculation of config elements Christian Borntraeger 2008-05-29 9:08 ` Christian Borntraeger 2008-05-30 3:18 ` Rusty Russell 2008-05-30 3:18 ` Rusty Russell 2008-05-29 9:08 ` [PATCH v2] virtio_blk: check for hardsector size from host Christian Borntraeger 2008-05-30 3:41 ` Rusty Russell 2008-05-30 3:41 ` Rusty Russell 2008-05-29 9:08 ` Christian Borntraeger 2008-05-29 8:30 ` [PATCH/RFC] " Jens Axboe 2008-05-29 8:27 ` Christian Borntraeger
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.