From: Rusty Russell <rusty@rustcorp.com.au>
To: Paolo Bonzini <pbonzini@redhat.com>,
virtualization <virtualization@lists.linux-foundation.org>
Cc: linux-scsi <linux-scsi@redhat.com>,
LKML <linux-kernel@vger.kernel.org>,
Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>,
"Michael S. Tsirkin" <mst@redhat.com>
Subject: Re: [PATCH] Add virtio-scsi to the virtio spec
Date: Thu, 01 Dec 2011 13:44:37 +1030 [thread overview]
Message-ID: <87sjl5rnj6.fsf@rustcorp.com.au> (raw)
In-Reply-To: <1322661042-28191-1-git-send-email-pbonzini@redhat.com>
On Wed, 30 Nov 2011 14:50:41 +0100, Paolo Bonzini <pbonzini@redhat.com> wrote:
> Hi all,
>
> here is the specification for a virtio-based SCSI host (controller, HBA,
> you name it). The virtio SCSI host is the basis of an alternative
> storage stack for KVM. This stack would overcome several limitations of
> the current solution, virtio-blk:
OK, I like the idea, but I'd prefer to see the spec only cover things
which are implemented and tested, otherwise the risk of a flaw in the
spec is really high in my experience.
Comments below:
> num_queues is the total number of virtqueues exposed by the
> device. The driver is free to use only one request queue, or
> it can use more to achieve better performance.
s/total number of virtqueues/total number of request virtqueues/ ?
> max_channel, max_target and max_lun can be used by the driver
> as hints for scanning the logical units on the host. In the
> current version of the spec, they will always be respectively
> 0, 255 and 16383.
s/hints for scanning/hints to constrain scanning/ ? (I assume). But why
mention the current values? That doesn't help someone implementing a
driver or a device. If you want to, you could mention that as an
implementation detail of your current implmentation, but it seems out of
place in the spec.
> If the driver uses the eventq, it should then place at least a
> buffer in the eventq.
s/at least a/at least one/
> The driver queues requests to an arbitrary request queue, and they are
> used by the device on that same queue. In this version of the spec,
> if a driver uses more than one queue it is the responsibility of the
> driver to ensure strict request ordering; commands placed on different
> queue will be consumed with no order constraints.
Suggest simplification of second sentence:
It is the responsibility of the driver to ensure strict request
ordering; commands placed on different queues will be consumed with no
order constraints.
> The lun field addresses a target and logical unit in the
> virtio-scsi device's SCSI domain. In this version of the spec,
> the only supported format for the LUN field is: first byte set to
> 1, second byte set to target, third and fourth byte representing
> a single level LUN structure, followed by four zero bytes. With
> this representation, a virtio-scsi device can serve up to 256
> targets and 16384 LUNs per target.
You keep saying "In this version of the spec". I would delete that
phrase everywhere.
> Task_attr, prio and crn should be left to zero: command priority
> is explicitly not supported by this version of the device;
> task_attr defines the task attribute as in the table above, but
> all task attributes may be mapped to SIMPLE by the device; crn
> may also be provided by clients, but is generally expected to be
> 0. The maximum CRN value defined by the protocol is 255, since
> CRN is stored in an 8-bit integer.
Be braver in your language please. It helps poor implementers who are
already confused by learning SCSI and virtio:
Task_attr, and prio must be zero.[1] task_attr defines the task
attribute as in the table above, but all task attributes may be mapped
to SIMPLE by the device; crn may also be provided by clients, but is
generally expected to be 0.
[1] Future extensions may use these fields.
Is it useful for a driver to specify ordered (or other) modes, knowing
it could be reduced to SIMPLE without it being aware? Or should we use
feature bits to indicate what the device supports?
> Note that since ACA is not supported by this version of the
> spec, VIRTIO_SCSI_T_TMF_CLEAR_ACA is always a no-operation.
I think if you don't support ACA in the spec, don't define this. How
will a driver author use this information?
> struct virtio_scsi_ctrl_an {
> u32 type;
> u8 lun[8];
> u32 event_requested;
> u32 event_actual;
> u8 response;
> }
With all these structures, you might want a comment indicating the
read-only and write-only (from the device POV) parts of the struct, eg:
struct virtio_scsi_ctrl_an {
// Read-only part
u32 type;
u8 lun[8];
u32 event_requested;
// Write-only part
u32 event_actual;
u8 response;
}
But basically, though I know nothing about SCSI, I like both the content
and style of this addition!
Thanks,
Rusty.
WARNING: multiple messages have this Message-ID (diff)
From: Rusty Russell <rusty@rustcorp.com.au>
To: Paolo Bonzini <pbonzini@redhat.com>,
virtualization <virtualization@lists.linux-foundation.org>
Cc: LKML <linux-kernel@vger.kernel.org>,
"Michael S. Tsirkin" <mst@redhat.com>,
Stefan Hajnoczi <stefanha@linux.vnet.ibm.com>,
linux-scsi <linux-scsi@redhat.com>
Subject: Re: [PATCH] Add virtio-scsi to the virtio spec
Date: Thu, 01 Dec 2011 13:44:37 +1030 [thread overview]
Message-ID: <87sjl5rnj6.fsf@rustcorp.com.au> (raw)
In-Reply-To: <1322661042-28191-1-git-send-email-pbonzini@redhat.com>
On Wed, 30 Nov 2011 14:50:41 +0100, Paolo Bonzini <pbonzini@redhat.com> wrote:
> Hi all,
>
> here is the specification for a virtio-based SCSI host (controller, HBA,
> you name it). The virtio SCSI host is the basis of an alternative
> storage stack for KVM. This stack would overcome several limitations of
> the current solution, virtio-blk:
OK, I like the idea, but I'd prefer to see the spec only cover things
which are implemented and tested, otherwise the risk of a flaw in the
spec is really high in my experience.
Comments below:
> num_queues is the total number of virtqueues exposed by the
> device. The driver is free to use only one request queue, or
> it can use more to achieve better performance.
s/total number of virtqueues/total number of request virtqueues/ ?
> max_channel, max_target and max_lun can be used by the driver
> as hints for scanning the logical units on the host. In the
> current version of the spec, they will always be respectively
> 0, 255 and 16383.
s/hints for scanning/hints to constrain scanning/ ? (I assume). But why
mention the current values? That doesn't help someone implementing a
driver or a device. If you want to, you could mention that as an
implementation detail of your current implmentation, but it seems out of
place in the spec.
> If the driver uses the eventq, it should then place at least a
> buffer in the eventq.
s/at least a/at least one/
> The driver queues requests to an arbitrary request queue, and they are
> used by the device on that same queue. In this version of the spec,
> if a driver uses more than one queue it is the responsibility of the
> driver to ensure strict request ordering; commands placed on different
> queue will be consumed with no order constraints.
Suggest simplification of second sentence:
It is the responsibility of the driver to ensure strict request
ordering; commands placed on different queues will be consumed with no
order constraints.
> The lun field addresses a target and logical unit in the
> virtio-scsi device's SCSI domain. In this version of the spec,
> the only supported format for the LUN field is: first byte set to
> 1, second byte set to target, third and fourth byte representing
> a single level LUN structure, followed by four zero bytes. With
> this representation, a virtio-scsi device can serve up to 256
> targets and 16384 LUNs per target.
You keep saying "In this version of the spec". I would delete that
phrase everywhere.
> Task_attr, prio and crn should be left to zero: command priority
> is explicitly not supported by this version of the device;
> task_attr defines the task attribute as in the table above, but
> all task attributes may be mapped to SIMPLE by the device; crn
> may also be provided by clients, but is generally expected to be
> 0. The maximum CRN value defined by the protocol is 255, since
> CRN is stored in an 8-bit integer.
Be braver in your language please. It helps poor implementers who are
already confused by learning SCSI and virtio:
Task_attr, and prio must be zero.[1] task_attr defines the task
attribute as in the table above, but all task attributes may be mapped
to SIMPLE by the device; crn may also be provided by clients, but is
generally expected to be 0.
[1] Future extensions may use these fields.
Is it useful for a driver to specify ordered (or other) modes, knowing
it could be reduced to SIMPLE without it being aware? Or should we use
feature bits to indicate what the device supports?
> Note that since ACA is not supported by this version of the
> spec, VIRTIO_SCSI_T_TMF_CLEAR_ACA is always a no-operation.
I think if you don't support ACA in the spec, don't define this. How
will a driver author use this information?
> struct virtio_scsi_ctrl_an {
> u32 type;
> u8 lun[8];
> u32 event_requested;
> u32 event_actual;
> u8 response;
> }
With all these structures, you might want a comment indicating the
read-only and write-only (from the device POV) parts of the struct, eg:
struct virtio_scsi_ctrl_an {
// Read-only part
u32 type;
u8 lun[8];
u32 event_requested;
// Write-only part
u32 event_actual;
u8 response;
}
But basically, though I know nothing about SCSI, I like both the content
and style of this addition!
Thanks,
Rusty.
next prev parent reply other threads:[~2011-12-01 3:14 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-11-30 13:50 [PATCH] Add virtio-scsi to the virtio spec Paolo Bonzini
2011-11-30 13:50 ` Paolo Bonzini
2011-11-30 13:50 ` virtio-scsi spec (was Re: [PATCH] Add virtio-scsi to the virtio spec) Paolo Bonzini
2011-11-30 13:50 ` Paolo Bonzini
2011-11-30 14:17 ` Hannes Reinecke
2011-11-30 14:17 ` Hannes Reinecke
2011-11-30 16:36 ` Paolo Bonzini
2011-11-30 16:36 ` Paolo Bonzini
2011-12-01 9:52 ` Hannes Reinecke
2011-12-01 9:52 ` Hannes Reinecke
2011-12-01 8:49 ` Paolo Bonzini
2011-12-01 8:49 ` Paolo Bonzini
2011-12-01 3:14 ` Rusty Russell [this message]
2011-12-01 3:14 ` [PATCH] Add virtio-scsi to the virtio spec Rusty Russell
2011-12-01 8:55 ` Paolo Bonzini
2011-12-01 8:55 ` Paolo Bonzini
2011-12-02 0:51 ` Rusty Russell
2011-12-02 0:51 ` Rusty Russell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87sjl5rnj6.fsf@rustcorp.com.au \
--to=rusty@rustcorp.com.au \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-scsi@redhat.com \
--cc=mst@redhat.com \
--cc=pbonzini@redhat.com \
--cc=stefanha@linux.vnet.ibm.com \
--cc=virtualization@lists.linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.