Re: [Nbd] [PATCH] proto: add 'shift' extension.
On 26/09/2016 14:46, Vladimir Sementsov-Ogievskiy wrote:
> This extension allows big requests for TRIM and WRITE_ZEROES through
> special 'shift' parameter, which means that offset and length should be
> shifted left by several bits.
>
> This is needed for efficient clearing large regions of the disk (up to
> the whole disk).
>
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@...2319...>
> ---
>
> Here mentioned WRITE_ZEROES command which is only an experemental
> extension for now.
>
> To dicuss:
> NBD_OPT_SHIFT Data. It can be reduced to 8 bits actually... Are some
> reserved bits needed here?
>
> doc/proto.md | 19 ++++++++++++++++++-
> 1 file changed, 18 insertions(+), 1 deletion(-)
>
> diff --git a/doc/proto.md b/doc/proto.md
> index 2de3a6a..6fd1b16 100644
> --- a/doc/proto.md
> +++ b/doc/proto.md
> @@ -682,6 +682,8 @@ The field has the following format:
> experimental `WRITE_ZEROES` [extension](https://github.com/yoe/nbd/blob/extension-write-zeroes/doc/proto.md).
> - bit 7, `NBD_FLAG_SEND_DF`: defined by the experimental `STRUCTURED_REPLY`
> [extension](https://github.com/yoe/nbd/blob/extension-structured-reply/doc/proto.md).
> +- bit 8, `NBD_FLAG_SEND_SHIFT` : exposes support for `NBD_CMD_FLAG_SHIFT` and
> + `NBD_OPT_SHIFT`
>
> Clients SHOULD ignore unknown flags.
>
> @@ -765,6 +767,15 @@ of the newstyle negotiation.
>
> Defined by the experimental `INFO` [extension](https://github.com/yoe/nbd/blob/extension-info/doc/proto.md).
>
> +- `NBD_OPT_SHIFT` (10)
> +
> + Defines shift used to calculate request offset and length if
> + `NBD_CMD_FLAG_SHIFT` is set.
> +
> + Data:
> +
> + - 32 bits, shift (unsigned); Must not be larger than 32.
> +
> #### Option reply types
>
> These values are used in the "reply type" field, sent by the server
> @@ -872,7 +883,13 @@ valid may depend on negotiation during the handshake phase.
> [extension](https://github.com/yoe/nbd/blob/extension-write-zeroes/doc/proto.md).
> - bit 2, `NBD_CMD_FLAG_DF`; defined by the experimental `STRUCTURED_REPLY`
> [extension](https://github.com/yoe/nbd/blob/extension-structured-reply/doc/proto.md).
> -
> +- bit 3, `NBD_CMD_FLAG_SHIFT`; This flag is valid for `NBD_CMD_TRIM` and
> + `NBD_CMD_WRITE_ZEROES`. If this flag is set the server shifts request
> + *length* and *offset* left by N bits, where N is defined by `NBD_OPT_SHIFT`
> + option or is assumed to be 16 bits by default if `NBD_OPT_SHIFT` option is
> + not specified. If after shift `(offset + length)` exceeds disk size, length
> + should be reduced to `(<disk size> - offset)`. However, `(offset + length)`
> + must not exceed disk size by more than `(1 << N) - 1`.
>
> #### Request types
>
>
This is very ad hoc. Can we instead have a block size common to all
commands? Block devices in practice have one, in fact that's why
they're called block devices...
Paolo
Reply to: