# Wydajność Software RAID-5

## KaszeL

Witam wszystkich serdecznie.

W ramach eksperymentu zbudowałem sobie macierz Software RAID-5. Użyłem do tego 4 dysków WD Caviar Raid Edition, 160GB SATA. Wszystkie podłączone są do kontrolera sil3114. Niestety wydajność przy zapisie pozostawia wiele do życzenia.

Macierz utworzona w następujący sposób:

```
mdadm -Cv /dev/md0 -l5 -n4 -c64 /dev/sd{b,c,d,e}1
```

następnie sformatowana w ten sposób

```
mke2fs -j -m 0 -b 4096 -R stride=16 /dev/md0
```

W efekcie otrzymałem macierz:

```
mdadm --detail --scan

ARRAY /dev/md0 level=raid5 num-devices=4 UUID=40ccaf6f:e125c78a:bfb4a2c5:8854a2b0
```

```
cat /proc/mdstat

Personalities : [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] md0 :

active raid5 sde1[3] sdd1[2] sdc1[1] sdb1[0]

      482503872 blocks level 5, 64k chunk, algorithm 2 [4/4] [UUUU]

      

unused devices: <none>
```

Z moich doświadczeń wynika, ze zapis na urzadzenie /dev/md0 jest wykonywany z prędkością co_najwyżej 17MB/s natomiast odczyt w okolicach 90MBs/ System na którym robie testy do dwa wiecznie nudzące się Opterony 244 oraz 2GB RAM. Co może być powodem takiej beznadziejnej wydajności przy zapisie?

EDIT: Próbowałem także formatować tą macierz jako ext2, bez większych różnic w wydajności. Podczas zapisu jeden z procków wisi na 90% i/o wait. Podejrzewam, że tu jest problem.

Arfrever: Ortografia

----------

## sir KAT

Softwarowy RAID5 nie jest dobrym pomysłem gdyż podczas zapisu wyliczane są sumy kontrolne przez procesor i z tego powodu masz prawdopodobnie spadek prędkości

----------

## KaszeL

Problem w tym, że ja tych procesorów mam dwa. Podczas zapisu oba się w zasadzie nudzą. Tak na prawdę te kody parzystości liczy się bardzo prosto. Dobry kontroler sprzętowy w tej konfiguracji powinien wyciągnąć sporo ponad 100MB/s

----------

## mbar

ta, faktycznie coś jest nie tak, bo u mnie stary pentium 4 z raid5 co prawda na 3 dyskach, ale się nawet nie spocił. jaki masz kernel i jego config? jakie prędkości wyliczania sumy kontrolnej dla raid widać w dmesg?

----------

## KaszeL

Używam kernela 2.6.21-ck2, prędkości wyliczania sum kontrolnych to:

```
raid6: int64x1   1968 MB/s

raid6: int64x2   2527 MB/s

raid6: int64x4   2472 MB/s

raid6: int64x8   1699 MB/s

raid6: sse2x1    1820 MB/s

raid6: sse2x2    3308 MB/s

raid6: sse2x4    3781 MB/s

raid6: using algorithm sse2x4 (3781 MB/s)

md: raid6 personality registered for level 6

md: raid5 personality registered for level 5

md: raid4 personality registered for level 4

raid5: automatically using best checksumming function: generic_sse

   generic_sse:  6996.000 MB/sec

raid5: using function: generic_sse (6996.000 MB/sec)
```

Odnośnie konfigu kernela, to czego konkretnie szukasz?

----------

## mbar

szukam, jakie masz sterowniki sata w kernelu. bios masz w trybie ahci? jaki chipset ma płyta główna?

----------

## KaszeL

Otóż właśnie nie mam w trybie AHCI. Powinienem? sata_sil to jedyny sterownik SATA jaki mam wkompilowany w kernel.

----------

## mbar

no ja też używam ahci, tylko na sata_sil24 (pewnie jakiś nowszy mam kontroler):

```
  │ │                 --- Serial ATA (prod) and Parallel ATA (experimental) drivers                          │ │  

  │ │                 <*>   AHCI SATA support                                                                │ │  

  │ │                 < >   ServerWorks Frodo / Apple K2 SATA support                                        │ │  

  │ │                 <*>   Intel ESB, ICH, PIIX3, PIIX4 PATA/SATA support                                   │ │  

  │ │                 < >   Marvell SATA support (HIGHLY EXPERIMENTAL)                                       │ │  

  │ │                 < >   NVIDIA SATA support                                                              │ │  

  │ │                 < >   Pacific Digital ADMA support                                                     │ │  

  │ │                 < >   Pacific Digital SATA QStor support                                               │ │  

  │ │                 < >   Promise SATA TX2/TX4 support                                                     │ │  

  │ │                 < >   Promise SATA SX4 support                                                         │ │  

  │ │                 < >   Silicon Image SATA support                                                       │ │  

  │ │                 <*>   Silicon Image 3124/3132 SATA support                                             │ │  

  │ │                 < >   SiS 964/965/966/180 SATA support                                                 │ │  

  │ │                 < >   ULi Electronics SATA support                                                     │ │  

  │ │                 < >   VIA SATA support                                                                 │ │  

  │ │                 < >   VITESSE VSC-7174 / INTEL 31244 SATA support                                      │ │  

  │ │                 < >   Initio 162x SATA support (HIGHLY EXPERIMENTAL)                                   │ │  

  │ │                 < >   ALi PATA support (Experimental)                                                  │ │  

  │ │                 < >   AMD/NVidia PATA support                                                          │ │  

  │ │                 < >   ARTOP 6210/6260 PATA support (Experimental)                                      │ │  

  │ │                 < >   ATI PATA support (Experimental)                                                  │ │  

  │ │                 < >   CMD640 PCI PATA support (Very Experimental)                                      │ │  

  │ │                 < >   CMD64x PATA support (Very Experimental)                                          │ │  

  │ │                 < >   CS5510/5520 PATA support                                                         │ │  

  │ │                 < >   CS5530 PATA support (Experimental)                                               │ │  

  │ │                 < >   Cypress CY82C693 PATA support (Very Experimental)                                │ │  

  │ │                 < >   EFAR SLC90E66 support                                                            │ │  

  │ │                 <*>   Generic ATA support                                                              │ │  

  │ │                 < >   HPT 366/368 PATA support (Experimental)                                          │ │  

  │ │                 < >   HPT 370/370A/371/372/374/302 PATA support (Experimental)                         │ │  

  │ │                 < >   HPT 372N/302N PATA support (Very Experimental)                                   │ │  

  │ │                 < >   HPT 343/363 PATA support (Experimental)                                          │ │  

  │ │                 < >   IT8211/2 PATA support                                                            │ │  

  │ │                 < >   IT8213 PATA support (Experimental)                                               │ │  

  │ │                 < >   JMicron PATA support                                                             │ │  

  │ │                 < >   Compaq Triflex PATA support                                                      │ │  

  │ │                 < >   Marvell PATA support via legacy mode                                             │ │  

  │ │                 <*>   Intel PATA MPIIX support                                                         │ │  

  │ │                 < >   Intel PATA old PIIX support                                                      │ │  

  │ │                 < >   NETCELL Revolution RAID support                                                  │ │  

  │ │                 < >   Nat Semi NS87410 PATA support (Experimental)                                     │ │  

  │ │                 < >   OPTI621/6215 PATA support (Very Experimental)                                    │ │  

  │ │                 < >   OPTI FireStar PATA support (Very Experimental)                    
```

obecnie jednak mam tylko raid0, zrezygnowałem z 5

----------

## KaszeL

Spróbuję przekompilować kernel z obsługą AHCI. Chociaż wydaję mi się, że to nie powinno mieć większego wpływu.

----------

## karaluch

Witam, widze ze Panowie maja nieco doswiadczenia z RAID5 to moze i ja sie czegos dowiem :)

Mam 4 dyski SATA 500GB chcialem zrobic softwarowy 2xmirror po 500GB ale zainteresowalem sie RAID5.

Pomysl byl tak:

```
Macierz A

/boot

swap

/tmp

/

Macierz B

/home
```

ale w takim ukladzie trace sporo GB w macierzy A. Idealnym rozwiazaniem bylo by

```
Macierz

/boot

swap

/tmp

/home

/
```

Tak aby miec 1TB i 1TB lustra. RAID1 wiem jak zrobic w fdisku ale RAID5 jeszcze nie robilem wiec nie wiem czy wszystkie dyski podzielic tak samo jak sda1 (czyli /boot /tmp swap /) ale ile w takim razie bedzie rozmiar /home. Zanaczam ze chcialbym aby /home byl jak najwiekszy. I jeszcze jedna sprawa do jakich partycji instaluje sie gruba.

Z gory dziekuje pozdrawiam

----------

## Bialy

 *KaszeL wrote:*   

> Spróbuję przekompilować kernel z obsługą AHCI. Chociaż wydaję mi się, że to nie powinno mieć większego wpływu.

 

Tryb AHCI na chipsetach intelowskich wlancza NCQ i kilka innych przyspieszajacych opcji.

PS. AHCI musisz wlaczyc tez w BIOS'ie.

----------

## lsdudi

 *karaluch wrote:*   

> Witam, widze ze Panowie maja nieco doswiadczenia z RAID5 to moze i ja sie czegos dowiem 
> 
> Tak aby miec 1TB i 1TB lustra. RAID1 wiem jak zrobic w fdisku ale RAID5 jeszcze nie robilem wiec nie wiem czy wszystkie dyski podzielic tak samo jak sda1 (czyli /boot /tmp swap /) ale ile w takim razie bedzie rozmiar /home. Zanaczam ze chcialbym aby /home byl jak najwiekszy. I jeszcze jedna sprawa do jakich partycji instaluje sie gruba.
> 
> Z gory dziekuje pozdrawiam

 

Raid 5 na całych dyskach. Na tym LVM i nie przejmujesz sie ile ci bedzie potrzebne miejsca na partycji X bo sobie spokojnie mozesz ją w locie rozszerzyć.

Pozdrawiam

----------

## karaluch

To w takim razie jak jest procedura?

Raid-1 robilem zgodnie z how-to: http://www.gentoo.org/doc/pl/gentoo-x86+raid+lvm2-quickinstall.xml i tam tworzylo sie identyczne partycje na obydwu dyskach, aby nastepnie spiac te dyski w mirror przy pomocy polecen:

```
lmknod /dev/md1 b 9 1

mknod /dev/md3 b 9 3

mknod /dev/md4 b 9 4

mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sda1 /dev/sdb1

mdadm --create /dev/md3 --level=1 --raid-devices=2 /dev/sda3 /dev/sdb3

mdadm --create /dev/md4 --level=1 --raid-devices=2 /dev/sda4 /dev/sdb4
```

Moze mi ktos to nieco rozjasnic. Napisaliscie ze Raid-5 robi sie na calych dyskach, a wiec partycje robi sie pozniej, czyli jak rozumiem, nalezy zrobic cos w stylu:

```
mknod /dev/md1 b 9 1

mdadm --create /dev/md1 --level=5 --raid-devices=4 /dev/sda1 /dev/sdb1 /dev/sdc1 /dev/sdd1
```

gdzie na wszystkich dyskach jest jedna wielka partycja. Wszystko ok, z tym ze nie wiem jak zrobic partycje na raid-5 bez uzywania lvm.

----------

## lsdudi

 *karaluch wrote:*   

> 
> 
> Moze mi ktos to nieco rozjasnic. Napisaliscie ze Raid-5 robi sie na calych dyskach.

 

Niekoniecznie. Raid wymaga takich samych "kawałków" dysków. Nic nie stoi na przeszkodzie aby Raid zrobić tylko na części dysku. Nie robi sie tego często bo raid robiony jest głównie na serwerach a tam jeden dysk w ta czy w tamtą nie robi różnicy ,a pad czegos takiego jest kosztowny. Ba mozesz zrobić nawet raid na jedny dysku posługując się samymi partycjami. Jednak nie wiedzę sensu takiego rozwiazania gdyż praktycznie nic nie zysksz. 

 *karaluch wrote:*   

> 
> 
> Wszystko ok, z tym ze nie wiem jak zrobic partycje na raid-5 bez uzywania lvm.

 

Jeśli nie uzywasz lvm to bedziesz miał tylko jedna "partycje" całą macierz raid 5.

----------

## karaluch

 *lsdudi wrote:*   

> Jeśli nie uzywasz lvm to bedziesz miał tylko jedna "partycje" całą macierz raid 5.

 

To w takim razie co z bootem i swapem? Widze ze kolega posiada juz jakies doswiadczenie z Raid-5 warto sie tym zajmowac przy 4 dyskach czy pozostac przy klasycznym Raid-1.

----------

## lsdudi

/boot nie moze byc na partycji raidowej (lvm-owej też) gdyz systemu nie uruchomisz musi byc na osobnej fizycznej partycji. No chyba że masz inny system bootowania.

Co do swapa możesz uzyć pliku zamiast partycji. Kiedyś było napewno to mniej wydajne ale słyszłem że teraz wydajność tego rozwiązania jest taka sama jak raw partycji chociaż głowy za to nie dam.

Generalnie polecałbym ci na wierzchu RAID zrobic LVM.

Co do pytania o sens. Raid 5 daje ci bezpieczeństwo 1 i szybkość 0 jednak jesli nie masz karty dydykowanej to zapisy będą wolniejsze (wyliczanie sum kontrolnych). Szacuje się że raid 5+ LVM moze spowodować spadek wydajności nawet o 20%.

Więc jeśli masz karty raidową w komputerze (uwaga niektóre tanie karty to tylko imitacje;/) to spokojnie uzyć mozesz 5. Jednak tworząc raid softwareowy musisz sie zastanowić czy nie za bardzo spowolni to twojego komputera. Tutaj  sam musisz się zastanowić. Co do jeszcze mogę ci poradzić. To ze mozesz sobie tak podzielić dysk że tylko część danych wrzucić w Raid. Poczytaj też o Raid 0+1 moze to akurat dla ciebie będzie dobre rozwiazanie.

----------

## karaluch

Teraz z uwagi na "zewnetrzne" problemu pracuje na karcie promise 4xsata 0,1,0+1 ale serwer posiada wbudowany Smart Array E200i z 128mb cache. Wiec w niedalekiej przyszlosci bede rozwazal budowe macierzy w oparciu o ten kontroler. Spotkalem sie z przekonaniem ze sprzetowy kontroler teraz sie nie rozni niczym od softwarowego dla Raid-1. Z twojej wypowiedzi wynika ze dla Raid-5 te roznice moga byc znaczace.

----------

## timor

RAID-0 i RAID-1 niczego nie licza, tylko zapisują/odczytują. Poradzi sobie z obsługą tego każde obecne CPU. RAID-5 oprócz tego dla każdej porcji danych zapisuje sume kontrolną, sumę trzeba policzyć - to nie tak jak pisał kolega lsdudi "Raid 5 daje ci bezpieczeństwo 1 i szybkość 0" - to by było dla RAID0+1  :Wink: 

Arfrever: Ortografia

----------

## lsdudi

 *timor wrote:*   

>  to nie tak jak pisał kolega lsdudi "Raid 5 daje ci bezpieczeństwo 1 i szybkość 0" - to by było dla RAID0+1 
> 
> 

 

szybkość raid 0 -- dane są  stripowane więc odczyt dużych plików jest przyśpieszony  :Smile:  (mówi się nawet o takiej samej wydajności jak przy n-1 dyskach  w raid 0)

bezpieczeństwo - no cóz pad jednego dysku  :Smile: 

Więc stwierdzenie nie jest błędne chociaz jak chcesz  być purystą to mozna powiedzieć ze to sie odnosi tylko do raid 0+1 ew 1+0

@karaluch 

Co do braku różnicy wydajności dla raid 0,1  dla software/hardware to się zgodzę. Ba niekiedy nawet lepiej uzyc softwareowego. Co do software raid 5 to problemy mogą byc przy częstych zapisach. Nie wiem do czego masz wykorzystywać ten serwer ani pod jakim obciażeniem ma on pracować, wiec trudno mi się tu wypowiedzieć czy raid sofware'owy nie bedzie problemem. Ten kontroler sprzetowy wypąsnie wygląda  :Smile:  ja bym się rzucił na niego  :Smile: 

Arfrever: Ortografia

----------

## karaluch

 *Quote:*   

> Ten kontroler sprzetowy wypąsnie wygląda :) ja bym się rzucił na niego

 

Fakt wypasnie wyglada ale problemem jest jego wyjscie 2x SAS (SFF-8484) i aby podlaczyc dyski sata bez koszyka trzeba uzyc specialnego kabelka Adapteca SAS x4 (SFF-8484) to SATA (4) x1 (Part Number: 2167000-R) i czekam na przesylke. Teraz musialem podlaczyc poprzez karte promise 4xsata. Gdy kabelek przyjdzie bede staral sie przeniesc macierz na e200i i wowczas potestuje tez Raid-5 ale poki co wszystko jest softwarowe.

----------

## Raku

 *lsdudi wrote:*   

> /boot nie moze byc na partycji raidowej (lvm-owej też) gdyz systemu nie uruchomisz musi byc na osobnej fizycznej partycji. 

 

lilo sobie radzi z /boot na LVM i md

grub sobie radzi z /boot na urządzeniach md.

tak więc mylisz się  :Wink: 

----------

