Hardware 3ware RAID10 vs Linux Software RAID10

На левой половине ринга представлен аппаратный контроллер 3ware 9690SA-8I с 448 MB ОЗУ (512 MB по паспорту) и BBU на шее

# modinfo 3w_9xxx
filename:       /lib/modules/2.6.18-128.el5/kernel/drivers/scsi/3w-9xxx.ko
version:        2.26.08.003-2.6.18RH
license:        GPL
description:    3ware 9000 Storage Controller Linux Driver
author:         AMCC
srcversion:     99F90AB8F214BD4984AD826
alias:          pci:v000013C1d00001005sv*sd*bc*sc*i*
alias:          pci:v000013C1d00001004sv*sd*bc*sc*i*
alias:          pci:v000013C1d00001003sv*sd*bc*sc*i*
alias:          pci:v000013C1d00001002sv*sd*bc*sc*i*
depends:        scsi_mod
vermagic:       2.6.18-128.el5 SMP mod_unload gcc-4.1
module_sig:     883f350497747d675ed35fe9471dce112238109c943875d83a1ef6a41b17bbf9b7eda2ab980c5820a0c86fcde4ae7e1ba47773945828dc39b5e97a46d
# tw_cli /c0 show all
/c0 Driver Version = 2.26.08.003-2.6.18RH
/c0 Model = 9690SA-8I
/c0 Available Memory = 448MB
/c0 Firmware Version = FH9X 4.06.00.004
/c0 Bios Version = BE9X 4.05.00.015
/c0 Boot Loader Version = BL9X 3.08.00.001
/c0 Serial Number = L340504A9060151
/c0 PCB Version = Rev 041
/c0 PCHIP Version = 2.00
/c0 ACHIP Version = 1501291E
/c0 Controller Phys = 8
/c0 Connections = 6 of 128
/c0 Drives = 6 of 128
/c0 Units = 6 of 128
/c0 Active Drives = 6 of 128
/c0 Active Units = 6 of 32
/c0 Max Drives Per Unit = 32
/c0 Total Optimal Units = 6
/c0 Not Optimal Units = 0 
/c0 Disk Spinup Policy = 1
/c0 Spinup Stagger Time Policy (sec) = 1
/c0 Auto-Carving Policy = off
/c0 Auto-Carving Size = 2048 GB
/c0 Auto-Rebuild Policy = on
/c0 Controller Bus Type = PCIe
/c0 Controller Bus Width = 8 lanes
/c0 Controller Bus Speed = 2.5 Gbps/lane
#

На правой половине — программная реализация рейда на базе драйвера md(4) из поставки CentOS Linux 5.3 (Linux 2.6.18-128.el5)

# modinfo raid0
filename:       /lib/modules/2.6.18-128.el5/kernel/drivers/md/raid0.ko
alias:          md-level-0
alias:          md-raid0
alias:          md-personality-2
license:        GPL
srcversion:     3974570A623AFD015BF1B44
depends:        
vermagic:       2.6.18-128.el5 SMP mod_unload gcc-4.1
module_sig:     883f350497747dd75ed35fe9471dce112457809f46e4a3e85bad21f9fb9088b27b0573772754ec109e2ef9bc44b4355f4fbec740b378aaa962d427761f
# modinfo raid1
filename:       /lib/modules/2.6.18-128.el5/kernel/drivers/md/raid1.ko
alias:          md-level-1
alias:          md-raid1
alias:          md-personality-3
license:        GPL
srcversion:     6F708B349A9029D2CD37BE1
depends:        
vermagic:       2.6.18-128.el5 SMP mod_unload gcc-4.1
module_sig:     883f350497747dd75ed35fe9471dce11262be0a0831f9ce7ef56f61271c84c43728e1f1182abbc70a0a0fdc8b1e6661cd2a13315ab1cc890955d657c63
# 

Ринг Аппаратная платформа Supermicro 1025W-URB/32 ГБ.
Судья bonnie++ -x 10 -b
Поединок Производительность RAID10

Боец 3ware ловко разместил на своем борту конфигурацию массива в следующей компоновке

# tw_cli /c0/u0 show all
/c0/u0 status = OK
/c0/u0 is not rebuilding, its current state is OK
/c0/u0 is not verifying, its current state is OK
/c0/u0 is initialized.
/c0/u0 Cache State = on       
/c0/u0 volume(s) = 1
/c0/u0 name =                     
/c0/u0 serial number = 3SD0CXBL895F450038EA
/c0/u0 Ignore ECC policy = off      
/c0/u0 Auto Verify Policy = on       
/c0/u0 Storsave Policy = balance    
/c0/u0 Command Queuing Policy = on       

Unit     UnitType  Status         %RCmpl  %V/I/M  VPort Stripe  Size(GB)
------------------------------------------------------------------------
u0       RAID-10   OK             -       -       -     64K     405.094  
u0-0     RAID-1    OK             -       -       -     -       -        
u0-0-0   DISK      OK             -       -       p0    -       135.031  
u0-0-1   DISK      OK             -       -       p2    -       135.031  
u0-1     RAID-1    OK             -       -       -     -       -        
u0-1-0   DISK      OK             -       -       p3    -       135.031  
u0-1-1   DISK      OK             -       -       p4    -       135.031  
u0-2     RAID-1    OK             -       -       -     -       -        
u0-2-0   DISK      OK             -       -       p5    -       135.031  
u0-2-1   DISK      OK             -       -       p6    -       135.031  
u0/v0    Volume    -              -       -       -     -       405.094  
#

md(4) немного помешкавшись принял следующую расстановку (физически жесткие диски по прежнему подключены к 3ware контроллеру и экспортируются каждый как Single Drive)

# cat /proc/mdstat
Personalities : [raid1] [raid0] 
md2 : active raid0 md23[2] md22[1] md21[0]
      414283648 blocks 64k chunks
      
md21 : active raid1 sdb2[1] sda2[0]
      131106368 blocks [2/2] [UU]
      
md22 : active raid1 sdd1[1] sdc1[0]
      141588736 blocks [2/2] [UU]
      
md23 : active raid1 sdf1[1] sde1[0]
      141588736 blocks [2/2] [UU]
      
md1 : active raid1 sdb1[1] sda1[0]
      10482304 blocks [2/2] [UU]
      
unused devices: <none>
# 

По окончание единоборства рефери бережно сохранили необработанные результаты, полученные от 3ware и md(4).
Усреднив результаты по нескольким замерам и подведя итог, судьи остались немного в замешательстве боец md(4) превзошел своего соперника 3ware по блочной записи более чем на 126%, по перезаписи на 65%, по блочному чтению на 10%. Однако md(4) проиграл в забеге на количество random seek(ов) (хаотичных перемещений головок дисков) на 37%.
После непродолжительных думок и посиделок составили графическое превосходство бойцов друг над другом.

Разнообразить шоу удалось выступлением 3ware в смежной весовой категории с уменьшенным Stripe Size с 64 KB до 16 KB в 3х поединках (bonnie++ -x 3 -b). С первых строчек поступающие данные от bonnie++ расстроили судей. Боец 3ware в весовой категории Stripe Size = 16 KB проиграл все схватки самому себе в весе Stripe Size = 64 KB, а именно, блочная запись упала практически на 40%, перезапись — 74%, блочное чтение — 15%, random seeks — 45%.

+----------------------+-------------------+----------------+------------------+--------------+
|                   me |         put_block |        rewrite |        get_block |        seeks |
+----------------------+-------------------+----------------+------------------+--------------+
| 3ware 64KB stripe sz |     96356         |   67310        |    310724        |   847        |
| md(4) 64KB stripe sz |    218658 (+126%) |  111368 (+65%) |    344830 (+10%) |   618 (-37%) |
| 3ware 16KB stripe sz |     70323 (-37%)  |   38525 (-74%) |    269569 (-15%) |   582 (-45%) |
+----------------------+-------------------+----------------+------------------+--------------+

Дополнение от 03.08.2009. Чтобы помериться пузом, решили провести аналогичный эксперимент на подвернувшейся под руку FreeBSD-8.0-BETA3. Более ранние версии, к сожалению, наотрез отказывалась устанавливаться через карточку удаленного управления. Дальнейшее сравнение будет не до конца честным, т.к. версия 8.0-BETA3 поставляется с ядром, в котором включены дополнительные проверки.

> dmesg | grep WITNESS
WARNING: WITNESS option enabled, expect reduced performance.
WARNING: WITNESS option enabled, expect reduced performance.
> 

С уверенностью не могу ответить на вопрос имеют ли они влияние на дисковую подсистему. Однако времени на пересборку ядра попросту не было.

Действие разворачивается на той же самой машине и том же самом дисковом контроллере. В портах FreeBSD лежала обновленная версия bonnie++ 1.96. О ее особенностях немного позднее.

Приведем настройки дискового контроллера и созданного RAID10 массива

freebsd# tw_cli /c0 show all
/c0 Driver Version = 3.70.05.001
/c0 Model = 9690SA-8I
/c0 Available Memory = 448MB
/c0 Firmware Version = FH9X 4.06.00.004
/c0 Bios Version = BE9X 4.05.00.015
/c0 Boot Loader Version = BL9X 3.08.00.001
/c0 Serial Number = L340504A9060151
/c0 PCB Version = Rev 041
/c0 PCHIP Version = 2.00
/c0 ACHIP Version = 1501291E
/c0 Controller Phys = 8
/c0 Connections = 6 of 128
/c0 Drives = 6 of 128
/c0 Units = 1 of 128
/c0 Active Drives = 6 of 128
/c0 Active Units = 1 of 32
/c0 Max Drives Per Unit = 32
/c0 Total Optimal Units = 1
/c0 Not Optimal Units = 0 
/c0 Disk Spinup Policy = 1
/c0 Spinup Stagger Time Policy (sec) = 1
/c0 Auto-Carving Policy = off
/c0 Auto-Carving Size = 2048 GB
/c0 Auto-Rebuild Policy = on
/c0 Rebuild Rate = 1
/c0 Verify Rate = 1
/c0 Controller Bus Type = PCIe
/c0 Controller Bus Width = 8 lanes
/c0 Controller Bus Speed = 2.5 Gbps/lane

Unit  UnitType  Status         %RCmpl  %V/I/M  Stripe  Size(GB)  Cache  AVrfy
------------------------------------------------------------------------------
u0    RAID-10   OK             -       -       64K     405.094   ON     ON     

VPort Status         Unit Size      Type  Phy Encl-Slot    Model
------------------------------------------------------------------------------
p0    OK             u0   136.73 GB SAS   0   -            SEAGATE ST9146803SS 
p1    OK             u0   136.73 GB SAS   1   -            SEAGATE ST9146803SS 
p2    OK             u0   136.73 GB SAS   2   -            SEAGATE ST9146803SS 
p4    OK             u0   136.73 GB SAS   4   -            SEAGATE ST9146803SS 
p6    OK             u0   136.73 GB SAS   6   -            SEAGATE ST9146803SS 
p7    OK             u0   136.73 GB SAS   7   -            SEAGATE ST9146803SS 

Name  OnlineState  BBUReady  Status    Volt     Temp     Hours  LastCapTest
---------------------------------------------------------------------------
bbu   On           Yes       OK        OK       OK       0      xx-xxx-xxxx  

freebsd# 

Вместо десяти прогонов bonnie++ получили девять, т.к. за ночь тест не успел завершиться в срок. С этого момента начинается самое интересное. В итоговом CSV файле количество полей в заголовке не совпадает с количеством полей данных, а точнее данные содержат на два поля больше. Сошлись во мнение, что четвертое и пятое поле явно не соответствуют картине происходящего. Значения этих колонок были исключены и мы получили материал для анализа.

Скалькулировав значения, был получен преинтересный результат. Блочное чтение проигрывало блочной записи (чтение: 152327 KB/s, запись: 177383 KB/s). Каких-либо логических объяснений нам не удалось найти. Чтобы оставить возможность будущим поколениям поразмыслить над значениями, свели результаты в единую таблицу

+------------------------------+-------------------+----------------+------------------+--------------+
|                           me |         put_block |        rewrite |        get_block |        seeks |
+------------------------------+-------------------+----------------+------------------+--------------+
|   Linux 3ware 64KB stripe sz |     96356         |   67310        |   310724         |   847        |
|   Linux md(4) 64KB stripe sz |    218658 (+126%) |  111368 (+65%) |   344830 (+10%)  |   618 (-37%) |
|   Linux 3ware 16KB stripe sz |     70323 (-37%)  |   38525 (-74%) |   269569 (-15%)  |   582 (-45%) |
| FreeBSD 3ware 64KB stripe sz |    177383 (+84%)  |  11668 (-476%) |   152337 (-103%) |   541 (-56%) |
+------------------------------+-------------------+----------------+------------------+--------------+

Тестирование SAS RAID-контроллера 3ware 9690SA-8I от Фцентр

7 thoughts on “Hardware 3ware RAID10 vs Linux Software RAID10

  1. А md же поддерживает raid-10 нативно, без 2-х уровней:
    mdadm —create /dev/md0 —bitmap=internal —metadata=1.0 —layout=f2 —level raid10 —raid-devices=4 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1

      • Теоретически может — смотри опцию —laouyt, практически не проверял, был бы рад если бы вы продолжили бы серию тестов.

  2. по-моему чистый выигрыш 3ware — в реальной жизни seek важнее 🙂

    ещё хотелось бы заметить — md пользовался bbu и кешм 3ware. не стоит автоматически распространять результаты теста на вариант md + «тупой» контроллер.

    • Аппаратные решения не дают иногда необходимой гибкости. Например, на md можно построить массив из дисков, в которых только первая половина будет задействована (от внешней стороны блинов до серидины диска). Исключив из использования наиболее тормозную часть диска — внутреннюю.
      + выигрыш в производительности
      — потеря дискового пространства.

Добавить комментарий

Ваш e-mail не будет опубликован.