On Tue, Nov 29, 2016 at 06:07:56PM +0300, Vladimir Sementsov-Ogievskiy wrote: > 29.11.2016 17:52, Alex Bligh wrote: > > Vladimir, > >> if the bitmap is 010101010101 we will have too many descriptors. > >> For example, 16tb disk, 64k granularity -> 2G of descriptors > >> payload. > > Yep. And the cost of consuming and retrying is quite high. One > > option would be for the client to realise this is a possibility, and > > not request the entire extent map for a 16TB disk, as it might be > > very large! Even if the client worked at e.g. a 64MB level (where > > they'd get a maximum of 1024 extents per reply), this isn't going to > > noticeably increase the round trip timing. One issue here is that to > > determine a 'reasonable' size, the client needs to know the minimum > > length of any extent. > > and with this approach we will in turn have overhead of too many > requests for 00000000 or 11111111 bitmaps.
This is why my proposal suggests the server may abort the sent extents after X extents (sixteen, but that number can certainly change) have been sent. After all, the server will have a better view on what's going to be costly in terms of "number of extents". > > I think the answer is probably a 'maximum number of extents' in the request > > packet. > > > > Of course with statuses in extent, the final extent could be > > represented as 'I don't know, break this bit into a separate > > request' status. > > > > With such predefined status, we can postpone creating extended requests, > have number of extents restricted by server and have sum of extents > lengths be equal to request length. -- < ron> I mean, the main *practical* problem with C++, is there's like a dozen people in the world who think they really understand all of its rules, and pretty much all of them are just lying to themselves too. -- #debian-devel, OFTC, 2016-02-12