0

I'm using an old MacBook Core 2 Duo as a NAS server. I have four external USB 3TB drives (let's call them Drive1 - Drive4) that I want to configure as a RAID array, either RAID 0+1 or RAID 10. The MacBook has two USB 2.0 controllers (let's call them Controller-A and -B). The plan is to have Drive1 and Drive2 attached to ControllerA and Drive3 and Drive4 attached to ControllerB. The way I see it I have two options for configuring the RAID array:

  1. Stripe Drive1 with Drive2 on ControllerA, stripe Drive3 with Drive4 on ControllerB and mirror the drives on ControllerA to the drives on ControllerB (I believe this is called RAID 0+1)
  2. Stripe Drive1 on ControllerA with Drive3 on ControllerB, stripe Drive2 on ControllerA with Drive4 on ControllerB then mirror Drive1 and Drive3 to Drive2 and Drive4 (I believe this is called RAID 10)

My question is which configuration will yield the best throughput?

4
  • Aside from throughput, keep in mind that a stripe of mirrors (RAID 1 + ) offers greater redundancy then a mirror of stripes (RAID 0 + 1). With the former, as long as one drive in each RAID 1 array is still working the array will be active. With the latter, if one drive in each RAID 0 array fails, you've lost the entire array permanently (since the RAID 1 would only see the RAID 0 volumes, as opposed to the individual drives). With four drives, you aren't going to see any significant performance or space difference (as in @ЯрославРахматуллин's last two examples).
    – Bob
    Nov 15, 2012 at 0:55
  • @Bob He might, but they will be marginal. In some very specific cases one may be preferable to the other, but I don't have enough experience to tell. Nov 15, 2012 at 1:00
  • @ЯрославРахматуллин That would likely be implementation dependant, since in theory they should be equal in performance and space (with a 'square' array). Of course, it could be that one way is always more efficient (if only slightly) simply because it's easier to implement. And increased redundancy is always important, especially if this is a part of any critical system. (did anyone ever tell you your name is a pain to ping? :P)
    – Bob
    Nov 15, 2012 at 1:03
  • @Bob They did, but I "ping" all names manually anyway so we're even :D Nov 15, 2012 at 1:06

2 Answers 2

2

Complete rewrite

Basic assumptions

  1. USB2 throughput is limited to about 30-40MB/sec.
  2. Any 3TB harddisk is faster then that.
  3. you actually have two separate USB controllers.

1) Is a known fact. There is some variation based on drivers, USB-to-SATA chips in the external cases etc. But unless you have an exceptionally poor setup you will get about 35MB/sec per USB bus.

2) Harddisk speed varies per model. Put a 3TB model is a modern drive and I expect its slower sequential throughput to be at least 90MB/sec.

3) is based on your own post.

The MacBook has two USB 2.0 controllers (let's call them Controller-A and -B).

If you happen to have two USB connectors which are connected to the same internal USB hub then you effectively have one controller. No matter what combination you use with the drives, you will never exceed the speed of the single controller.

RAID information

The canonical post on RAID levels over on our sister site ServerFault has a good explanation what RAID levels 0 (Stripe), 1 (mirror) and 10 are.

Please read it, the explanation are clear.


They are also not 1:1 applicable for you. All of those assume that speed is limited at the drive. That is, information is fed to and from the drives at a much faster rate than the drive can sustain. Using two drives in a stripe would be twice a fast because you could use the speed of two drives simultaneously.

If you put two drives on the same USB bus then you are still limited to the speed of that bus and you do not gain any speed when doing sequential reading or writing.

What does this mean for me?

If you set up two independent drives on controller A you would get this situation.

Controller-A  --------- [Drive1] ----- [Drive2]

Read and write speed would be about 35MB/sec on each drive. Or half of that if you used both drives at the same time.


If I stripe (RAID 0) the drives then it appears as a single double sized drive.

Controller-A  --------- ([Drive1][Drive2])

Speed is still limited by the USB2 bus. Sequential throughput is still limited to about 35MB/sec. You did not gain speed. You however got the easy of a virtual single 6TB drive rather then two 3TB drives.


Mirroring (RAID 1) the drives usually results in twice the read speed (since the limiting factor would be disc read speed and you can read simultaneously from both of them) and usually no loss in write speed.

Not in this case.

Controller-A  --------- [Drive1] 
                        [Drive2]

Read speed of a single drive will saturate the bus. Twp drives will not double it. The result will still be the same 35MB/sec.

In the case of writing to the mirror it is even worse. You are writing to both drives. You will pass the same data twice though the same limiting USB2 bus. Write speed will be halved!


We can do the same for the disks connected via USB Controller-B and get the same results. Clearly using two disk on the same USB bus will not increase throughput. It may even make things worse.

The alternative is to use two disks on different controllers.

Controller-A  --------- ( [Drive1]  

Controller-B  ---------   [Drive3] )

If you mirror these then you gain twice the read speed. This because reading will happen from both disks and fill both USB2 busses. Read speed will be about 70MB/sec.

Writes will have to go to both drives. You still write twice as much. You have twice as much bandwidth. Nett result is no change.

You will gain the additional redundancy of a mirror. (If one drive fails you still can read all the data).


Now for striping:

Controller-A  --------- ( [Drive1]  

Controller-B  ---------           [Drive3] )

Reads and writes can be done simultaneously from both drives. Read and write speed is doubled. Yay! :)

However you are now using all the bandwidth on both USB2 busses. Adding any more drives will not increase throughput. No matter if you combine them in RAID10 or RAID01.

So I am limited to 70MB/sec regardless?

Yes.

Best speed possible with this setup is 70MB/sec. using two drives on separate controllers.

You can set up two stripes. As long as you do not use both of them at the same time both of them will yield maximum throughput. If you use both at the same time both will drop to about half speed.

Throughput? Not speed?

I have been very careful to use sequential throughput as much as possible. Not speed.

You can bring a disk down to its knees by doing lots of small IO requests. Drive performance under such extreme situations can drop as low as 5 MB/second (even on 15k RPM 2½ inch SAS drives).

This is not the situation you will get with normal NAS use. Mostly a NAS stores movies, music, photos, documents of a few MB size. In that case the disk will read these at high speed (about 100MB/sec) and then wait 2/3rd of its time until it can push it over the USB bus.

If you access a lot of small files all over the disk (e.g. during a compile job on a heavily fragmented volume) then effective disk speed will be much lower. Should it drop below USB2 bus speed then you will gain the normal advantages of RAIDing the drives.

However this should be extremely rare, and you question was:

My question is which configuration will yield the best throughput?

What would you do?

Two drives in a stripe, one drive per controller, yielding a nice 6TB drive. Use the other drives as off-line backup.

The RAID mantra

RAID is not backup. RAID is not backup. RAID is not backup.

  • If you have a fire, RAID will not save your data.
  • If you there is a theft, RAID will not save your data.
  • If there is a serious power failure, RAID will not save your data.
  • Etc. etc. The only backup if an off-site backup. Lacking that an off-line backup.
3
  • Man, you definitely understood my question. Thanks a ton! You are 100% correct that RAID is not backup and I do not intend to use it as backup. What I do need is a (virtual) 6TB volume. What I don't like is that a two drive RAID 0 array is twice as likely to fail as a single drive all by itself. So, for me, RAID 0 by itself is not desirable. Nov 15, 2012 at 21:13
  • You correctly broke down my question into two parts; throughput and fault tolerance. Now, if I understand your recommendation correctly you are saying two things: 1) despite the fact that RAID 0 is more likely to fail it is still my best option for achieving maximum throughput, 2) the fault tolerance of RAID 1 will kill throughput and I would be better served by backing up the RAID 0 array. Would you agree with my summary of your answer? Nov 15, 2012 at 21:21
  • Correct. You can combat failure in several ways. My preferred method is regular off-line backups. As far as I am concerned RAID is useful in a few cases: 1) Pure performance (e.g. stripe on a gaming PC) 2) Keeping a file server up and running after a disk failure until it is 5 PM and you can fix stuff. 3) Keeping a copy of changed data between backups. In your case I would go for performance and use the other drives for backup.
    – Hennes
    Nov 15, 2012 at 21:23
0

The second option is called 1+0 and is not the same as RAID10 (depends on controller actually). A RAID10 array consists of at least four devices and is less of a headache to maintain.

There would be an arguable performance gain if you had thee or more drives striped and mirrored like so:

1 2 3 : raid 0  \
                 +-- raid 1
4 5 6 : raid 0  /

.. as opposed to

1 2 3 : raid 1 \
                +-- raid 0
4 5 6 : raid 1 /

.. but then again

1 2 : raid 1 \
3 4 : raid 1  +-- raid 0 
5 6 : raid 1  /

Will probably give you about the same throughput.

But since you have exactly four drives, the performance will be roughly equal in both cases. The truth though, about your setup, is that it will be slow anyway because USB2 is a serious bottleneck.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .