On 26.09.2016 15:51, Paolo Bonzini wrote: > > 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 <[email protected]> >> --- >> >> 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
Block size can be too small to clear the whole disk in one request (i.e. (2**31 * block_size) is too small..) . -- Best regards, Vladimir ------------------------------------------------------------------------------ _______________________________________________ Nbd-general mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/nbd-general
