Chwilę temu, w komentarzu pod postem „Kontroler RAID a MySQL” jeden z czytelników pisał o testach RAID10 w konfiguracji 4 i 6 dysków SAS i pytał się o moje wrażenia. W tamtym momencie nie miałem możliwości wykonania odpowiednich testów i przedstawienia danych, ostatnio jednak okazja się pojawiła. Oto co się okazało.

Testy zostały wykonane na serwerze opartym o platformę Intel, kontroler to SRCSASJV działający w trybie WriteBack. Tym razem nie testowałem wydajności MySQL, tylko i wyłącznie wydajność dysków. Testowany był losowy zapis.

Skrypt testowy zapożyczyłem z Benchmark Wiki na stronie Percony, po kilku przeróbkach wyglądał następująco:

#!/bin/sh

set -u
set -x
set -e

loop='1 2 3 4 5 6 7 8 9'

CURD=`pwd`



for sizei in 20; do
size=${sizei}G

cd /mnt
sysbench --test=fileio --file-num=64 --file-total-size=$size prepare

sysbench --test=fileio --file-total-size=$size --file-test-mode=rndwr  --max-time=600 --max-requests=100000000 --num-threads=16 --init-rng=on  --file-num=64 --file-extra-flags=d
for i in ${loop} ; do
for mode in rndwr; do
for blksize in 16384 ; do
for threads in 8 16 32 64; do
echo "====== testing $blksize in $threads threads"
echo PARAMS $size $mode $threads $blksize > $CURD/sysbench-size-$size-mode-$mode-threads-$threads-blksz-$blksize
sysbench --test=fileio --file-total-size=$size --file-test-mode=$mode\
--max-time=120 --max-requests=100000000 --num-threads=$threads --init-rng=on \
--file-num=64 --file-extra-flags=direct --file-fsync-freq=0 --file-block-size=$blksize run \
| tee -a $CURD/sysbench-size-$size-mode-$mode-threads-$threads-blksz-$blksize-test${i} 2>&1
done
done
done
done

sysbench --test=fileio --file-total-size=$size cleanup

cd $CURD
done

Teraz wyniki. Najpierw – RAID10 na 4 dyskach SAS.

Read 0b  Written 1.7811Gb  Total transferred 1.7811Gb  (15.199Mb/sec)
972.71 Requests/sec executed
Read 0b  Written 1.7811Gb  Total transferred 1.7811Gb  (15.197Mb/sec)
972.59 Requests/sec executed
Read 0b  Written 1.7761Gb  Total transferred 1.7761Gb  (15.155Mb/sec)
969.92 Requests/sec executed
Read 0b  Written 1.767Gb  Total transferred 1.767Gb  (15.077Mb/sec)
964.92 Requests/sec executed
Read 0b  Written 1.77Gb  Total transferred 1.77Gb  (15.103Mb/sec)
966.61 Requests/sec executed
Read 0b  Written 1.7731Gb  Total transferred 1.7731Gb  (15.13Mb/sec)
968.34 Requests/sec executed
Read 0b  Written 1.7773Gb  Total transferred 1.7773Gb  (15.166Mb/sec)
970.60 Requests/sec executed
Read 0b  Written 1.7748Gb  Total transferred 1.7748Gb  (15.001Mb/sec)
960.08 Requests/sec executed
Read 0b  Written 1.7815Gb  Total transferred 1.7815Gb  (15.202Mb/sec)
972.90 Requests/sec executed

Jak widać, taka konfiguracja (4 dyski SAS SEAGATE ST373455SS) jest w stanie osiągnąć transfer ok. 15,1 MB/s i ok. 970 IOPS.

Teraz RAID10 na 6 dyskach:

Read 0b  Written 2.6635Gb  Total transferred 2.6635Gb  (22.728Mb/sec)
1454.59 Requests/sec executed
Read 0b  Written 2.6653Gb  Total transferred 2.6653Gb  (22.743Mb/sec)
1455.55 Requests/sec executed
Read 0b  Written 2.6534Gb  Total transferred 2.6534Gb  (22.641Mb/sec)
1449.05 Requests/sec executed
Read 0b  Written 2.6595Gb  Total transferred 2.6595Gb  (22.694Mb/sec)
1452.40 Requests/sec executed
Read 0b  Written 2.6563Gb  Total transferred 2.6563Gb  (22.666Mb/sec)
1450.65 Requests/sec executed
Read 0b  Written 2.6515Gb  Total transferred 2.6515Gb  (22.58Mb/sec)
1445.11 Requests/sec executed
Read 0b  Written 2.6745Gb  Total transferred 2.6745Gb  (22.821Mb/sec)
1460.52 Requests/sec executed
Read 0b  Written 2.6475Gb  Total transferred 2.6475Gb  (22.591Mb/sec)
1445.80 Requests/sec executed
Read 0b  Written 2.6668Gb  Total transferred 2.6668Gb  (22.756Mb/sec)
1456.37 Requests/sec executed

Transfer ok. 22,6MB/s i ok. 1450 IOPS. Jak prosto wyliczyć, wydajność wzrosła równo o 50% – zgadza się to z wzrostem ilości dysków. Zgadzałoby się to też z grubsza z moimi doświadczeniami z wydajnością serwerów produkcyjnych. Może ilość par dysków jest nieparzysta, ale w efekcie nie powoduje to żadnych negatywnych skutków.