Re: SSD & mechanical disc in RAID 1

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, Jan 31, 2010 at 12:21 PM, Aryeh Gregor
<Simetrical+list@xxxxxxxxx> wrote:
> On Fri, Jan 22, 2010 at 11:37 AM, Goswin von Brederlow
> <goswin-v-b@xxxxxx> wrote:
>> I think his initial idea of raid1 is verry good. With write-mostly all
>> reads should come from the fast SSD. I would also add write-behind.
>> That way writes will not wait for the rotating disk and get the full
>> SSD speed as well.
>
> Recently I got an Intel X25-M 80G, and have been trying this out.  I
> figured some people here might be interested in the results.  I've
> mirrored the SSD to a slow 80G partition on an old spinning-rust 160G
> disk, which is set to write-mostly, with write-behind of 16384 (the
> max).  The bitmap is on a separate unmirrored partition on the SSD.
> My root filesystem is on it, ext4 on top of LVM, using 60G out of
> 73.77G allocated to LVM, with a separate 500M-ish mirrored boot
> partition at the start, and a gap in between for storing unmirrored
> things (like all my RAID bitmaps).
>
> I did six runs of bonnie++ overnight:
>
> 1) 128 files, both disks working.
> 2) 1024 files, both disks working.
> 3) 128 files, conventional disk failed and removed.
> 4) 1024 files, conventional disk failed and removed.
> 5) Same as (2).
> 6) Same as (4).  (Note that in this case, the disk ended up being
> failed but not removed, but this should make no difference.)
>
> At the end of this e-mail, I've attached the full script I ran and its
> full output.  These are the bonnie++ numbers for the six tests, best
> viewed in a fixed-width font on a pretty wide screen (126 chars):
>
>         |      Sequential out      |  Sequential in   | Random  |
> |     Sequential create     |       Random create      |
>         |per char| block  |rewrite |per char|  block  | Seeks   |
> | Create |  Read   | Delete | Create |  Read   |Delete |
> monoid,6G,47571,90,55343,30,41390,24,55803,96,233594,54,4923.0,36,
> 128,25973,94,+++++,+++,15910,41,27179,85,+++++,+++,11922,38
> monoid,6G,48358,90,55378,25,41338,25,56883,95,233689,52,4233.0,29,1024,19819,70,64728,
> 75,  848, 4,14928,60,55484, 79,  463, 3
> monoid,6G,48751,90,77485,27,45263,25,55660,94,238757,49,5107.7,33,
> 128,28027,86,+++++,+++,20161,49,29618,88,+++++,+++,14780,43
> monoid,6G,44503,83,73894,29,42975,26,56463,95,237173,53,5052.9,36,1024,18073,73,66151,
> 81, 5348,28,18102,65,60213, 77, 3441,23
> monoid,6G,48580,91,55567,24,40748,22,56803,95,237006,49,4828.2,29,1024,20332,67,73175,
> 80,  783, 4,13615,45,58066, 74,  489, 3
> monoid,6G,48966,92,77517,29,43999,24,56863,94,198557,38,3553.8,16,1024,19273,68,72414,
> 86, 6326,31,16499,60,56438, 75, 2784,15
>
> (Where two numbers are given, the first is KB out per second and the
> second is CPU usage, as far as I can figure.) Note that there was lots
> of memory free here, about 2.5G (-/+ buffers/cache as reported by
> free).  My conclusions:
>
> 1) The file creation tests with only 128 files should just be ignored,
> they look like they're in-memory.  The 1024-file tests look more
> plausible.
>
> 2) All reads perform comparably whether the extra disk is present or
> not, as expected.  There's some variation, but then, I wasn't being
> very scientific.
>
> 3) Tests 3, 4, and 6 (only SSD) are about 35% faster on the sequential
> out rewrite test.  The per-char sequential out test was CPU-bound, and
> everything performed the same.  Everything also performed the same on
> the rewrite test; I'm not sure why.
>
> 4) Sequential file creation is about the same between tests 4 and 6
> (only SSD) and tests 2 and 5 (both disks).  Random file creation gives
> the disk+SSD about a 20% lead.  But both sequential and random
> deletion have an order-of-magnitude difference between the two.  I
> don't know why this might be -- lots of buffering for some operations
> but not others?
>
> Overall, this seems like a very feasible setup, and I'll certainly be
> sticking with it, even though it will obviously slow down some writes.
>  Hope this data will be useful (or at least interesting) to someone.
>
> The script that I ran from the at job follows, with a couple of
> comments added.  I ran it using ionice -c1 to reduce the effects of
> any concurrent operations.
>
>
>
> #!/bin/bash
> cd /tmp
> echo Test 1; echo
> free -m
> bonnie -u 0 -n 128
> echo; echo Test 2; echo
> free -m
> echo
> bonnie -u 0 -n 1024
> echo; echo Test 3; echo
> free -m
> echo
> mdadm --fail /dev/md1 /dev/sda2
> sleep 5
> mdadm --remove /dev/md1 /dev/sda2
> echo
> bonnie -u 0 -n 128
> echo; echo Test 4; echo
> free -m
> echo
> bonnie -u 0 -n 1024
> echo
> free -m
> echo; echo 'Re-adding sda2 and waiting for sync'; echo
> sudo mdadm --add /dev/md1 --write-mostly /dev/sda2
> sleep 1800
> cat /proc/mdstat
> echo; echo Test 5; echo
> free -m
> echo
> bonnie -u 0 -n 1024
> echo
> mdadm --fail /dev/md1 /dev/sda2
> # The second command was run too fast and failed, I forgot the sleep 5
> from above.
> mdadm --remove /dev/md1 /dev/sda2
> echo; echo Test 6; echo
> free -m
> echo
> bonnie -u 0 -n 1024
> echo
> free -m
> echo
> # Also failed, since the device hadn't been removed.
> sudo mdadm --add /dev/md1 --write-mostly /dev/sda2
>
>
>
>
> Output of script:
>
>
>
>
> Test 1
>
>            total       used       free     shared    buffers     cached
> Mem:          3024       2085        938          0        589        973
> -/+ buffers/cache:        522       2501
> Swap:         1023        526        497
> Using uid:0, gid:0.
> Writing with putc()...done
> Writing intelligently...done
> Rewriting...done
> Reading with getc()...done
> Reading intelligently...done
> start 'em...done...done...done...
> Create files in sequential order...done.
> Stat files in sequential order...done.
> Delete files in sequential order...done.
> Create files in random order...done.
> Stat files in random order...done.
> Delete files in random order...done.
> Version 1.03c       ------Sequential Output------ --Sequential Input- --Random-
>                   -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
> Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
> monoid           6G 47571  90 55343  30 41390  24 55803  96 233594  54  4923  36
>                   ------Sequential Create------ --------Random Create--------
>                   -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
>             files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
>               128 25973  94 +++++ +++ 15910  41 27179  85 +++++ +++ 11922  38
> monoid,6G,47571,90,55343,30,41390,24,55803,96,233594,54,4923.0,36,128,25973,94,+++++,+++,15910,41,27179,85,+++++,+++,11922,38
>
> Test 2
>
>            total       used       free     shared    buffers     cached
> Mem:          3024        544       2480          0         51         30
> -/+ buffers/cache:        462       2562
> Swap:         1023        526        497
>
> Using uid:0, gid:0.
> Writing with putc()...done
> Writing intelligently...done
> Rewriting...done
> Reading with getc()...done
> Reading intelligently...done
> start 'em...done...done...done...
> Create files in sequential order...done.
> Stat files in sequential order...done.
> Delete files in sequential order...done.
> Create files in random order...done.
> Stat files in random order...done.
> Delete files in random order...done.
> Version 1.03c       ------Sequential Output------ --Sequential Input- --Random-
>                   -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
> Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
> monoid           6G 48358  90 55378  25 41338  25 56883  95 233689  52  4233  29
>                   ------Sequential Create------ --------Random Create--------
>                   -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
>             files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
>              1024 19819  70 64728  75   848   4 14928  60 55484  79   463   3
> monoid,6G,48358,90,55378,25,41338,25,56883,95,233689,52,4233.0,29,1024,19819,70,64728,75,848,4,14928,60,55484,79,463,3
>
> Test 3
>
>            total       used       free     shared    buffers     cached
> Mem:          3024        788       2235          0        332         50
> -/+ buffers/cache:        405       2619
> Swap:         1023        565        458
>
> mdadm: set /dev/sda2 faulty in /dev/md1
> mdadm: hot removed /dev/sda2
>
> Using uid:0, gid:0.
> Writing with putc()...done
> Writing intelligently...done
> Rewriting...done
> Reading with getc()...done
> Reading intelligently...done
> start 'em...done...done...done...
> Create files in sequential order...done.
> Stat files in sequential order...done.
> Delete files in sequential order...done.
> Create files in random order...done.
> Stat files in random order...done.
> Delete files in random order...done.
> Version 1.03c       ------Sequential Output------ --Sequential Input- --Random-
>                   -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
> Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
> monoid           6G 48751  90 77485  27 45263  25 55660  94 238757  49  5108  33
>                   ------Sequential Create------ --------Random Create--------
>                   -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
>             files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
>               128 28027  86 +++++ +++ 20161  49 29618  88 +++++ +++ 14780  43
> monoid,6G,48751,90,77485,27,45263,25,55660,94,238757,49,5107.7,33,128,28027,86,+++++,+++,20161,49,29618,88,+++++,+++,14780,43
>
> Test 4
>
>            total       used       free     shared    buffers     cached
> Mem:          3024        441       2582          0         48         25
> -/+ buffers/cache:        367       2656
> Swap:         1023        594        429
>
> Using uid:0, gid:0.
> Writing with putc()...done
> Writing intelligently...done
> Rewriting...done
> Reading with getc()...done
> Reading intelligently...done
> start 'em...done...done...done...
> Create files in sequential order...done.
> Stat files in sequential order...done.
> Delete files in sequential order...done.
> Create files in random order...done.
> Stat files in random order...done.
> Delete files in random order...done.
> Version 1.03c       ------Sequential Output------ --Sequential Input- --Random-
>                   -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
> Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
> monoid           6G 44503  83 73894  29 42975  26 56463  95 237173  53  5053  36
>                   ------Sequential Create------ --------Random Create--------
>                   -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
>             files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
>              1024 18073  73 66151  81  5348  28 18102  65 60213  77  3441  23
> monoid,6G,44503,83,73894,29,42975,26,56463,95,237173,53,5052.9,36,1024,18073,73,66151,81,5348,28,18102,65,60213,77,3441,23
>
>            total       used       free     shared    buffers     cached
> Mem:          3024        734       2289          0        329         42
> -/+ buffers/cache:        362       2661
> Swap:         1023        609        414
>
> Re-adding sda2 and waiting for sync
>
> mdadm: re-added /dev/sda2
> Personalities : [raid1] [linear] [multipath] [raid0] [raid6] [raid5]
> [raid4] [raid10]
> md2 : active raid1 sdb1[0] sda1[1](W)
>     521984 blocks [2/2] [UU]
>     bitmap: 0/64 pages [0KB], 4KB chunk, file: /mnt/ssd-junk/boot-bitmap
>
> md3 : active raid10 sdc2[2] sdd2[1]
>     488102656 blocks super 1.2 64K chunks 2 far-copies [2/2] [UU]
>     bitmap: 1/466 pages [4KB], 512KB chunk, file: /mnt/ssd-junk/extra-bitmap
>
> md1 : active raid1 sda2[1](W) sdb2[0]
>     77352896 blocks [2/2] [UU]
>     bitmap: 29/296 pages [116KB], 128KB chunk, file: /mnt/ssd-junk/root-bitmap
>
> unused devices: <none>
>
> Test 5
>
>            total       used       free     shared    buffers     cached
> Mem:          3024       1374       1649          0        357        621
> -/+ buffers/cache:        396       2627
> Swap:         1023        602        421
>
> Using uid:0, gid:0.
> Writing with putc()...done
> Writing intelligently...done
> Rewriting...done
> Reading with getc()...done
> Reading intelligently...done
> start 'em...done...done...done...
> Create files in sequential order...done.
> Stat files in sequential order...done.
> Delete files in sequential order...done.
> Create files in random order...done.
> Stat files in random order...done.
> Delete files in random order...done.
> Version 1.03c       ------Sequential Output------ --Sequential Input- --Random-
>                   -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
> Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
> monoid           6G 48580  91 55567  24 40748  22 56803  95 237006  49  4828  29
>                   ------Sequential Create------ --------Random Create--------
>                   -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
>             files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
>              1024 20332  67 73175  80   783   4 13615  45 58066  74   489   3
> monoid,6G,48580,91,55567,24,40748,22,56803,95,237006,49,4828.2,29,1024,20332,67,73175,80,783,4,13615,45,58066,74,489,3
>
> mdadm: set /dev/sda2 faulty in /dev/md1
> mdadm: hot remove failed for /dev/sda2: Device or resource busy
>
> Test 6
>
>            total       used       free     shared    buffers     cached
> Mem:          3024        720       2303          0        335         40
> -/+ buffers/cache:        345       2678
> Swap:         1023        653        370
>
> Using uid:0, gid:0.
> Writing with putc()...done
> Writing intelligently...done
> Rewriting...done
> Reading with getc()...done
> Reading intelligently...done
> start 'em...done...done...done...
> Create files in sequential order...done.
> Stat files in sequential order...done.
> Delete files in sequential order...done.
> Create files in random order...done.
> Stat files in random order...done.
> Delete files in random order...done.
> Version 1.03c       ------Sequential Output------ --Sequential Input- --Random-
>                   -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
> Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
> monoid           6G 48966  92 77517  29 43999  24 56863  94 198557  38  3554  16
>                   ------Sequential Create------ --------Random Create--------
>                   -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
>             files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
>              1024 19273  68 72414  86  6326  31 16499  60 56438  75  2784  15
> monoid,6G,48966,92,77517,29,43999,24,56863,94,198557,38,3553.8,16,1024,19273,68,72414,86,6326,31,16499,60,56438,75,2784,15
>
>            total       used       free     shared    buffers     cached
> Mem:          3024       2174        849          0        545       1261
> -/+ buffers/cache:        366       2657
> Swap:         1023        674        349
>
> mdadm: Cannot open /dev/sda2: Device or resource busy
>

Thanks for providing this information, its quite useful.  I suspect
I'll be trying something like this myself in the near future.

Wil
--
To unsubscribe from this list: send the line "unsubscribe linux-raid" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux RAID Wiki]     [ATA RAID]     [Linux SCSI Target Infrastructure]     [Linux Block]     [Linux IDE]     [Linux SCSI]     [Linux Hams]     [Device Mapper]     [Device Mapper Cryptographics]     [Kernel]     [Linux Admin]     [Linux Net]     [GFS]     [RPM]     [git]     [Yosemite Forum]


  Powered by Linux