[Beowulf] Software RAID?

Joe Landman landman at scalableinformatics.com
Mon Nov 26 18:56:24 PST 2007


Ekechi Nwokah wrote:
> Reposting with (hopefully) more readable formatting.

[...]

>> Of course there are a zillion things you didn't mention.  How 
>> many drives did you want to use?  What kind? (SAS? SATA?)  If 
>> you want 16 drives often you get hardware RAID hardware even 
>> if you don't use it.
>> What config did you want? 
>> Raid-0? 1? 5? 6? Filesystem?
>>
> 
> So let's say it's 16. But in theory it could be as high as 192. Using
> multiple JBOD cards that present the drives individually (as separate
> LUNs, for lack of a better term), and use software RAID to do all the
> things that a 3ware/Areca, etc. card would do across the total span of
> drives:

Hmmm... Anyone with a large disk count SW raid want to run a few 
bonnie++ like loads on it and look at the interrupt/csw rates?  Last I 
looked on a RAID0 (2 disk) we were seeing very high interrupt/csw rates. 
  This would quickly swamp any perceived advantages of "infinitely many" 
or "infinitely fast" cores.  Sort of like an Amdahl's law.  Make the 
expensive parallel computing portion take zero time, and you are still 
stuck with the serial time (which you can't do much about).  Worse, it 
is size extensive, so as you increase the number of disks, you have to 
increase the interrupt rate (one controller per drive currently), and 
the base SATA drivers seem to have a problem with lots of CSW.

> 
> RAID 0/1/5/6, etc., hotswap, SAS/SATA capability, etc.
> 
>> Oh, and how do you measure performance?  Bandwidth?  Seeks?
>> Transactions?
>> Transaction size?  Mostly read? write?
>>
> 
> 
> All of the above. We would be max per-drive performance, say 70MB/s
> reads with 100 IOPs on SATA, 120MB/s reads with 300 IOPs on SAS using 4k
> transaction sizes. Hopefully eliminate any queueing bottlenecks on the
> hardware RAID card.

This (queuing bottleneck) hasn't really been an issue in most of the 
workloads we have seen.  Has anyone seen this as an issue on their 
workloads?

> Assume that we are using RDMA as the network transfer protocol so there
> are no network interrupts on the cpus being used to do the XORs, etc.

er .... so your plan is to use something like a network with RDMA to 
attach the disks.  So you are not using SATA controllers.  You are using 
network controllers.  With some sort of offload capability (RDMA without 
it is a little slow).

How does this save money/time again?  You are replacing "expensive" RAID 
controllers with "expensive" Network controller (unless you forgo 
offload, in which case RDMA doesn't make much sense)?

Which network were you planning on using for the disks?  Gigabit?  10 
GbE?  IB?

You sort-of have something like this today, in Coraid's AOE units.  If 
you don't have experience with them, you should ask about what happens 
to the user load under intensive IO operations.  Note:  there is nothing 
wrong with Coraid units, we like them (and in full disclosure, we do 
resell them, and happily connect them with our JackRabbit units).

> Right now, all the hardware cards start to precipitously drop in
> performance under concurrent access, particularly read/write mixes.

Hmmm.... Are there particular workloads you are looking at?  Huge reads 
with a tiny write?  Most of the RAID systems we have seen suffer from 
small block random I/O.  There your RAID system will get in the way (all 
the extra seeks and computations will slow you down relative to single 
disks).  There you want RAID10's.

We have put our units (as well as software RAIDs) through some pretty 
hard tests: single RAID card feeding 4 simultaneous IOzone and bonnie++ 
tests (each test 2x the RAM in the server box) through channel bonded 
quad gigabit.  Apart from uncovering some kernel OOPses due to the 
channel bond driver not liking really heavy loads, we sustained 360-390 
MB/s out of the box, with large numbers of concurrent reads and writes. 
  We simply did not see degradation.  Could you cite some materials I 
can go look at, or help me understand which workloads you are talking about?

> Areca is the best of the bunch, but it's not saying much compared to
> Tier 1 storage ASICs/FPGAs. 

You get what you pay for.


> The idea here is twofold. Eliminate the cost of the hardware RAID and

I think you are going to wind up paying more than that cost in other 
elements, such as networking, JBOD cards (good ones, not the crappy 
driver ones).

> handle concurrent access accesses better. My theory is that 8 cores
> would handle concurrent ARRAY access much better than the chipsets on
> the hardware cards, and that if you did the parity calculations, CRC,
> etc. using SSE instruction set you could acheive a high level of
> parallelism and performance. 

The parity calculations are fairly simple, and last I checked, at MD 
driver startup, it *DOES* check which method makes the parity check 
fastest in the md assemble stage.  In fact, you can see, in the Linux 
kernel source, SSE2, MMX, Altivec implementations of RAID6. 
Specifically, look at raid6sse2.c

/*
  * raid6sse2.c
  *
  * SSE-2 implementation of RAID-6 syndrome functions
  *
  */

You can see the standard calc, the unrolled by 2 calc, etc.

If this is limited by anything (just eyeballing it), it would be a) a 
lack of functional units, b) SSE2 issue rate, c) SSE2 operand width.

Lack of functional units can sort of be handled by more cores.  However, 
this code is assembly (in C) language.  Parallel assembly programming is 
not fun.

Moreover, OS jitter, context switching away from these calculations will 
be *expensive* as you have to restore not just the full normal register 
stack and frame, but all of the SSE2 registers.  You would want to be 
able to dedicate entire cores to this, and isolate interrupt handling to 
other cores.

> I just haven't seen something like that and I was not aware that md
> could acheive anything close to the performance of a hardware RAID card
> across a reasonable number of drives (12+), let alone provide the
> feature set. 

Due to SATA driver CSW/interrupt handling, I would be quite surprised if 
it were able to do this (achieve similar performance).  I would bet 
performance would top out below 8 drives.  My own experience suggests 4 
drives.  After that, you have to start spending money on those SATA 
controllers.  And you will still be plagued by interrupts/CSW.  Which 
will limit your performance.  Your costs will start approaching the 
"expensive" RAID cards.

What we have found is, generally, performance on SATA is very much a 
function of the quality of the driver, the implementation details of the 
controller, how it handles heavy IO (does it swamp the motherboard with 
interrupts?).  I have a SuperMicro 8 core deskside unit with a small 
RAID0 on 3 drives.  When I try to push the RAID0 hard, I swamp the 
motherboard with huge numbers of interrupts/CSW.  Note that this is not 
even doing RAID calculations, simply IO.

You are rate limited by how fast the underlying system can handle IO. 
The real value of any offload processor is how it, not so oddly enough, 
offloads stuff (calculations, interrupts, IO, ...) from the main CPUs. 
Some of the RAID cards for these units do a pretty good job of 
offloading, some are crap (and even with SW raid issues, it is faster 
than the crappy ones).



> 
> -- Ekechi
> 

-- 
Joseph Landman, Ph.D
Founder and CEO
Scalable Informatics LLC,
email: landman at scalableinformatics.com
web  : http://www.scalableinformatics.com
        http://jackrabbit.scalableinformatics.com
phone: +1 734 786 8423
fax  : +1 866 888 3112
cell : +1 734 612 4615



More information about the Beowulf mailing list