Take the 2-minute tour ×
Server Fault is a question and answer site for system and network administrators. It's 100% free, no registration required.

I've been reading a lot on RAID controllers/setups and one thing that comes up a lot is how hardware controllers without cache offer the same performance as software RAID. Is this really the case?

I always thought that hardware RAID cards would offer better performance even without cache. I mean, you have dedicated hardware to perform the tasks. If that is the case what is the benefit of getting a RAID card that has no cache, something like a LSI 9341-4i that isn't exactly cheap.

Also if a performance gain is only possible with cache, is there a cache configuration that writes to disk right away but keeps data in cache for reading operations making a BBU not a priority?

share|improve this question
    
Something that I have noticed that favors HW raid: In my experience, if you're running SW raid and the system does anything other than a clean shutdown you'll fault the array and have to rebuild. HW raid doesn't fault if it wasn't writing when the system went down. –  Loren Pechtel Apr 25 at 22:15

4 Answers 4

up vote 31 down vote accepted

In short: if using a low-end RAID card (without cache), do yourself a favor and switch to software RAID. If using a mid-to-high-end card (with BBU or NVRAM), then hardware is often (but not always! see below) a good choice.

Long answer: when computing power was limited, hardware RAID cards had the significantly advantage to offload parity/syndrome calculation for RAID schemes involving them (RAID 3/4/5, RAID6, ecc).

However, with the ever increasing CPU performance, this advantage basically disappeared: even my laptop's ancient CPU (Core i5 M 520, Westmere generation) have XOR performance of over 4 GB/s and RAID-6 syndrome performance over 3 GB/s over a single execution core.

The advantage that hardware RAID maintains today is the presence of a power-loss protected DRAM cache, in the form of BBU or NVRAM. This protected cache give very low latency for random write access (and reads that hit) and basically transform random writes into sequential writes. A RAID controller without such a cache is near useless. Moreover, some low-end RAID controllers do not only came without a cache, but forcibly disable the disk's private DRAM cache, leading to slower performance than without RAID card at all. An example are DELL's PERC H200 and H300 cards: if newer firmware has not changed that, they totally disable the disk's private cache (and it can not be re-enabled while the disks are connected to the RAID controller). Do a favor yourself and do not, ever, never buy such controllers. While even higher-end controller often disable disk's private cache, they at least have they own protected cache - making HDD's (but not SSD's!) private cache somewhat redundant.

This is not the end, though. Even capable controllers (the one with BBU or NVRAM cache) can give inconsistent results when used with SSD, basically because SSD really need a fast private cache for efficient FLASH page programming/erasing. And while some (most?) controller let you re-enable disk's private cache (eg: PERC H700/710/710P let the user re-enable it), if that private cache is not write-protected you risks to lose data in case of power loss. The exact behavior really is controller and firmware dependent (eg: on a DELL S6/i with 256 MB WB cache and enabled disk's cache, I had no losses during multiple, planned power loss testing), giving uncertainty and much concerns.

Open source software RAIDs, in the other hand, are much more controllable beasts - their software is not enclosed inside a proprietary firmware, and have well-defined metadata patterns and behaviors. Software RAID make the (right) assumption that disk's private DRAM cache is not protected, but at the same time it is critical for acceptable performance - so they typically do not disable it, rather they use ATA FLUSH / FUA commands to be certain that critical data land on stable storage. As they often run from the SATA ports attached to the chipset SB, their bandwidth is very good and driver support is excellent.

However, if used with mechanical HDDs, synchronized, random write access pattern (eg: databases, virtual machines) will greatly suffer compared to an hardware RAID controller with WB cache. On the other hand, when used with SSDs, they often excel and give results even higher than what achievable with hardware RAID cards.

Also consider that software RAIDs are not all created equals. Windows software RAID has a bad reputation, performance wise, and even Storage Space seems not too different. Linux MD Raid is exceptionally fast and versatile, but Linux I/O stack is composed of multiple independent pieces that you need to carefully understand to extract maximum performance. ZFS ZRAID is extremely advanced, but if not configured correctly it will give you very poor IOPs. Moreover, it need a fast ZIL device for synchronous write handling.

Bottom line:

  1. if your workloads is not synchronized random write sensitive, you don't need a RAID card
  2. if you need a RAID card, do not buy a RAID controller without WB cache
  3. if you plan to use SSD, software RAID is preferred. My best choice is Linux MD Raid. If you need ZFS advanced features, go with ZRAID but carefully think about your vdev setup!
  4. if you, even using SSD, really need an hardware RAID card, use SSDs with write-protected caches (Micron M500/550/600 have partial protection - not really sufficient but better than nothing - white Intel DC and S series have full power loss protection)
  5. if you need RAID6 and you will use normal, mechanical HDDs, consider to buy a fast RAID card with 512 MB (or more) WB cache. RAID6 has high write performance penaly, and a properly-sized WB cache can at least provide a fast intermediate storage for small synchronous writes (eg: filesystem journal).
  6. if you need RAID6 with HDDs but you can't / don't want to buy an hardware RAID cards, carefully think about your software RAID setup. For example, a possible solution with Linux MD Raid is to use two arrays: a small RAID10 array for journal writes / DB logs, and a RAID6 array for raw storage (as fileserver). On the other hand, software RAID5/6 with SSDs is very fast, so you probably don't need a RAID card for an all-SSDs setup.
share|improve this answer
    
Many thanks for the great explanations, I had no idea RAID cards disabled the cache on the HDDs. This isn't the type of server that warrents the near $800+ investment so I'll be reading up on Software RAID setups a bit more and probably go with that. –  ItsJustMe Apr 24 at 14:18
    
@ItsJustMe: some applications also disable disk write caching, if the drive supports Force Unit Access. Microsoft Active Directory, Exchange come to mind. –  Greg Askew Apr 24 at 17:11
1  
The OP is talking about a hypervisor. RAID5 should be out of the question, and write cache is going to be a must. –  ewwhite Apr 24 at 19:02
    
I wish I could upvote more than once. As a sysadmin, I'd always assumed hardware RAID would outperform software RAID, though I've tried to avoid the H300 cards after hearing some other people's horror stories with them. This will definitely give me good food for thought and help better inform future purchase decisions. Thanks! –  user24313 Apr 24 at 20:35
    
Some RAID cards allow SSDs to be used as fast caches (latest DELL PERCs come to my mind), for software RAID and other cards doesn't allow this, there's always Linux bcache. –  bayindirh Apr 25 at 23:02

You'll want a battery or flash-backed cache solution for any hardware controller you purchase. Most regret not doing so.

But to answer your question, most controllers have configurable cache ratios... so 100% read cache and 0 % write cache negates the need for BBU protection. Your write performance will just suck.

I can't address your software RAID question because it depends. Linux MD RAID is different than Windows Software RAID, which is different than something like ZFS. Solutions like ZFS can perform better than hardware because they leverage the server's RAM and CPU resources.

share|improve this answer
    
By "write performance will just suck" you mean that'll be about the same as Software RAID or Hardware RAID without cache? Or is there a penalty to write performance beyond that if the card is dedicating the cache to reading? –  ItsJustMe Apr 24 at 11:26
    
It depends on what you're doing. If you don't have a write intensive application, then the performance hit may not be a problem. –  ewwhite Apr 24 at 11:34
    
It's a Proxmox HOST with Windows VMs used for mail and web hosting. There's no much database usage but the e-mail service does probably have lots of write activity. Currently I'm just debating if having a Read only cache card is worth it over Software RAID. –  ItsJustMe Apr 24 at 11:37
    
Use a Flash-backed RAID controller for virtualization. –  ewwhite Apr 24 at 11:38
1  
We ran a cyrus mail server with about 4000 accounts on it using software RAID. Active accounts hitting it any day was more like 300 to 600. Performance was noticeably worse than our primary cyrus mail server with hardware RAID and a BBU. The BBU and RAID controller cache gives data assurance, but it also gives performance. This is because once the data arrives at the controller, it can tell the OS the write is complete. Otherwise it would have to wait for the hard drive to signal the write is complete. This saves significant clock cycles. Moved to hardware RAID and solved. –  labradort May 14 at 17:56

The RAID-controller you have your eye one is a cheap one and is basically a fakeraid. It even depends on your mainboard to provide some functions like memory and not a lot of mainboards have support for it which results in that you can't load the driver.

About HW vs SW-RAID itself. I'm not using HW-RAID anymore unless it is a box with an EMC logo on it for example. For everything else I just switched back to SW-RAID many moons again for a few very simple reasons.

  1. You need additional hardware and need to match them. You also need to match the firmware and keep that in sync. A lot of disks will not work correctly and you will spikes in your IO-latency for no clear reason.

  2. Additional hardware is expensive so you can use that additional $1000 (decent controller with two/three disks) for a small solution better. Invest it in more disks and standard controllers, ECC memory, faster CPU. And an on-site spare disk maybe if you plan to run it for a longer than the warranty period or don't want to pay the express fees for overnight shipping.

  3. Upgrading is a pain as you need to keep track of OS-patches and firmware for both disk and controller. It may result in a situation where upgrading/updating isn't possible anymore.

  4. On disk formats. Enough vendors use some in-house layout to store data that is tied to a revision of your hardware and firmware combination. This may result in a situation where a replacement part makes it for you impossible to access your data.

  5. It is an SPOF and a bottleneck. Having only one controller behind only one PCI-bridge doesn't gives you the performance and redundancy you really need. With this also comes to no migration path exists to migrate data to another diskset outside the controllers reach.

Most of these point have been taken care of with newer generations of SW-RAID software or solutions like ZFS and BtrFS. Keep in mind that in the end you want to protect your data and not fast accessible, but redundant garbage.

share|improve this answer
2  
I disagree. Many people are happy with Dell, HP, IBM and higher-end LSI RAID controllers. But honestly, most modern quality servers already have onboard RAID solutions, so the idea of shopping for an individual controller is a bit dated. Software RAID solutions also need to account for low-latency write workloads. ZFS has a ZIL, but many other software RAID implementations are lacking on that front. –  ewwhite Apr 24 at 12:30

Most of the writers here are just ignorant of "write hole". This is the basis which allows for crying out for battey backup units of hardware RAIDs vs. absense of a such for software RAIDs. Well, for e. g., Linux software RAID implementation either supports bitmaps of write operations or does full "parity" re-calculation in case of not-clean shutdown. ZFS always strives to full-stripes-writes to avoid this inconsistency or postponing it's re-checking. So, as a summary, smart-enough software RAID nowadays is often good enough to be used instead of "who knows what's inside" so-called "hardware RAID".

As to the cache part of the question, it really doesn't matter so much, cause OS itself write cache can be much more bigger than "hardware" adapter has.

share|improve this answer
    
This is another reason to avoid hardware RAID cards without a proper protected WB cache. A note on Linux MD Raid: it is not totally immune from write hole. As it has not power loss protection, in the event of a sudden power loss data will eventually be lost (think to in-transit data and/or partial writes). Sure this will happen even in single-disk scenario, but the parity nature or RAID5/6 amplify this. In the worst scenario, crical filesystem metadata can be corrupted, however modern filesystems are resilient enough to recover quite nicely. Some data can be lost, though. –  shodanshok Apr 24 at 21:51
    
@shodanshok, you're totally wrong. Think –  poige Apr 25 at 9:16
    
I'm wrong on what, precisely? Linux mdraid remains somewhat vulnerable to write-hole. Please read the linux-raid mailing list for further details. –  shodanshok Apr 25 at 11:55
    
Write hole in regards of RAIDs with parity means parity mismatch due to incomplete write operations occuring. That's why it uses either bitmap optimized or whole array parity recalc. after unclean shutdowns. –  poige Apr 25 at 14:14
    
raid5faq.com/reliability.aspx : „… What is a RAID5 write hole? RAID5 write hole is a condition of a RAID5 array when some of the parity blocks do not match the corresponding data. Most often a write hole occurs when a power failure happens during the write operation. In this case a controller has time to write data only but not parity. To avoid accumulating write holes, one should use an UPS (Uninterruptible Power Supply) or BBU (Battery Backup Unit). Additionally, periodical array rebuilds correct accumulated inconsistencies. …” –  poige Apr 25 at 14:18

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.