Skip to contentSkip to conversation

chunk size must be power of two?

DISCUSSION James Braid 2 participants 3 messages Dec 6, 2006 – Dec 7, 2006 MD RAID

lore
Share & tools
lore
#0 lore raw

Is there any reason the chunk size has to be a power of two?

We're trying to use md devices to stripe over hardware RAID5 arrays, so to align the I/O correctly, I want to set the chunk size to (n - 1) * stripe_size for the underlying array. Which is impossible to do because mdadm (and the kernel) insist on the chunk size being a power of two.

I haven't tried just removing the kernel checks yet ... is there a reason why md is limited to power of two chunk sizes?

Failing that, does anyone know of anything else I can use to stripe block devices together which doesn't have the power of two limitation? device-mapper/LVM seems to have the same problem...

#1 lore raw
Quoted 1 line · On Wednesday December 6, [email protected] wrote:

Is there any reason the chunk size has to be a power of two?

It makes division a lot easier and faster.

Quoted 6 lines

We're trying to use md devices to stripe over hardware RAID5 arrays, so to align the I/O correctly, I want to set the chunk size to (n - 1) * stripe_size for the underlying array. Which is impossible to do because mdadm (and the kernel) insist on the chunk size being a power of two.

Surely you want to set chunk_size to 1 * stripe_size for the underlying array ... or maybe 1/(n-1) * stripe_size. But certainly not (n-1) * stripe_size. That wouldn't make any sense at all.

Quoted 3 lines

I haven't tried just removing the kernel checks yet ... is there a reason why md is limited to power of two chunk sizes?

You would need to check all the div and mod operations based on chunk size and make sure they don't implicitly assume it is a power of 2.

What exactly is the geometry of the array you wan to access with md??

NeilBrown

Quoted 8 lines

Failing that, does anyone know of anything else I can use to stripe block devices together which doesn't have the power of two limitation? device-mapper/LVM seems to have the same problem...
-
To unsubscribe from this list: send the line "unsubscribe linux-raid" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

#2 lore raw
Quoted 4 lines · Neil Brown
Quoted 1 line · On Wednesday December 6, [email protected] wrote:

Is there any reason the chunk size has to be a power of two?

It makes division a lot easier and faster.

Thanks for the reply.

Quoted 9 lines
Quoted 5 lines

We're trying to use md devices to stripe over hardware RAID5 arrays, so to align the I/O correctly, I want to set the chunk size to (n - 1) * stripe_size for the underlying array. Which is impossible to do because mdadm (and the kernel) insist on the chunk size being a power of two.

Surely you want to set chunk_size to 1 * stripe_size for the underlying array ... or maybe 1/(n-1) * stripe_size. But certainly not (n-1) * stripe_size. That wouldn't make any sense at all.

I suspect I haven't explained myself very clearly... I'm trying to stripe over multiple separate hardware raid5 luns using md... see below for details.

Quoted 5 lines
Quoted 2 lines

I haven't tried just removing the kernel checks yet ... is there a reason why md is limited to power of two chunk sizes?

You would need to check all the div and mod operations based on chunk size and make sure they don't implicitly assume it is a power of 2.

OK, thanks.

Quoted 1 line

What exactly is the geometry of the array you wan to access with md??

four 7+1 raid5 luns (from multiple controllers etc) with a stripe size of 128K, and I am then striping across all four luns with md.

So I want to set the md chunk_size to 896K so we write a full stripe (7 * 128K) to each lun before moving on to the next.

Testing on other volume managers (IRIX/Linux with xvm) has shown aligning the I/O like this improves performance for our workload (lots of large files with streaming reads and writes), but I can't use xvm for this particular system.

Thanks, James