[dm-devel] [PATCH 1/2] dm: update max_io_len to support a split_io that is not a power of 2
Brassow Jonathan
jbrassow at redhat.com
Tue May 1 15:42:50 UTC 2012
On Apr 30, 2012, at 1:59 PM, Mike Snitzer wrote:
>>>
>>> I cannot see why we'd need a split_io that is larger than 32 bits -- a
>>> 32bit split_io can support up to 2TB (2**32 * 512b sectors). Even
>>> on a LBD (raid) the stripe size (split_io) will not be so large.
>>
>> But is that enforced in the raid code or not?
>
> No idea, need Jon to weigh in here. I'm hopeful we can impose 32bit
> within dm-raid and coordinate with Neil on getting the appropriate MD
> code (chunk_sectors) to reflect the reality that 32 bit is adequate.
>
>>> But what I think what you're driving at is:
>>
>> (I'm not convinced the proposed patch has been tested on 32-bit+LBD,
>> attempting to divide by a 64-bit number etc.)
>
> Right, it wasn't tested on 32bit. It'll fail to build due to split_io
> being sector_t.
>
>>> is there a benefit/reason to
>>> maintain the old code for some target that won't ever use non power of 2
>>> split_io (e.g. dm-raid at the moment)? I see no point for the duality
>>> in the code but I'm open to the idea if you have a specific reason in
>>> mind -- are you concerned about perf on more obscure/older hardware?
>>
>> EITHER the 32 bit split_io *must* be enforced (after we've convinced
>> ourselves 64 bits will never be required);
>> OR we keep it 64-bit and add some compat code.
>
> Yeap, I'm hopeful we can go with the former.
>
> Jon, what do you think?
split_io is used by dm-raid to split I/O on 'region_size' and 'chunk_size' boundaries. The former is used for bitmap purposes for the write intent log (RAID 1/4/5/6). The later is used by striping targets (RAID 4/5/6). There are some sanity checks. They must be power of 2, region_size must be larger than 'chunk_size', etc. However, I don't see any enforcement on the size of those numbers. There probably should be, given that 'chunk_sectors'/'stripe_sectors' are 32-bit 'int' types. Additionally, 'chunksize' (the name given for 'region_size' in MD) is a 32-bit type on disk and 'unsigned long' in memory - with no checking for size when the in-memory version is stored on disk.
I think these checks should probably be added, but there would be a limitation on the size of arrays imposed, I think. Neil mentioned that the maximum size of a bitmap was (1 << 21) bits. If the max 'region_size' is (1 << 32), then the max size device is (1 << 21) * (1 << 32) * (1 << 9) = 4 EiB. I don't think that's a problem.
brassow
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/dm-devel/attachments/20120501/f995a9b9/attachment.htm>
More information about the dm-devel
mailing list