Optimal Blockgröße bei RAID

rMarkus

Chuck The Plant
Hallo,

mir ist aufgefallen, dass bei einem 3Ware-Controller die Stripe-Size von 64K ist (default) .
Bei UFS ist die Blocksize heute 16K als Standard.

Ist es hier wichtig, dass man bei bei beiden die Größe identisch hält?
Die man-Page von FreeBSD empfiehlt eine Änderung der UFS-Blocksize nicht wirklich:
Code:
     -b block-size
             The block size of the file system, in bytes.  It must be a power
             of 2.  The default size is 16384 bytes, and the smallest allow-
             able size is 4096 bytes.  The optimal block:fragment ratio is
             8:1.  Other ratios are possible, but are not recommended, and may
             produce poor results.

Was mache ich?

Online kann man das sicher nicht ändern.
 
Zuletzt bearbeitet:
ja, ist ein newfs argument. wenn du blocksize änderst, änder auch die fragmentsize entsprechend (wie in der manpage 8:1)
 
Vielen Dank für die Antwort.

Soll ich a) denn die UFS-Blocksize auf 64K (natürlich im VErhältnis 8:1) erhöhen oder b) die Stripe-Size im RAID-Controller von 64K auf die 16K des UFS runterdrehen?

Oder soll ich c) das so lassen?
 
Ich würde die Blocksize von UFS nicht auf 64k erhöhen. Dies ist die minimale Grösse die eine Datei belegt. Werden vor allem grosse Dateien gespeichert, ist es vielleicht noch erträglich. Bei vielen kleinen Dateien ist aber der Platzverlust dann erheblich und z.T. raten einige die Blocksize sogar auf 8k zu reduzieren.
Zum Einfluss der blocksize auf die Performance kann ich dir nichts sagen.

Daher rate ich dir dringend von Variante a) ab.

Ich würde auf Variante c) tippen, weil sich 3ware wohl auch so seine Gedanken gemacht hat.

mousaka

EDIT: und hier ein Link zur Grösse der Stripe-Size von 3ware
 
Es gibt eigentlich keinen triftigen Grund die Blocksize zu ändern, so lange das zugrunde liegende Medium nicht exotisch ist. Kurze Erklärung: Die "Blocksize" ist die kleinste Größe, die das Dateisystem auf einmal handhabt. Ein Block kann zwar zur besseren Ausbeute des Speicherplatzes in mehrere "Frags" unterteilt werden, aber ein Block wird immer auf einen Schlag gelesen. Das Gleiche gilt für dein Medium. Auch da ist ein Block wieder die kleinste Größe, die gelesen werden kann. Bis hierhin gilt also:
- Standard-Blocksize von UFS2: 16k
- Blocksize deines Arrays: 64k
Bei jedem Lesevorgang werden nun also 64k gelesen, selbst wenn UFS2 nur 16k anfordert. Klingt blöd und langsam. Nun ist es aber so, dass einzelnes Lesen immer wehtut. Daher liest FreeBSD automagisch nicht einen Block, sondern mehrere. Dies ist das an anderer Stelle schon zu genüge diskutierte Sysctl "vfs.read_max". In Standardeinstellung 8, in -CURRENT gerade drastisch erhöht worden. Das bedeutet, es werden immer Minimum 8 Array-Blöcke gelesen:
- Standard-Blocksize von UFS2: 16k
- Blocksize deines Arrays: 64k
- Tatsächlich gelesene Datenmenge: 64 * 8 = 512k = 32 UFS2-Blöcke
Du könntest ein wenig mit dem Wert spielen, aber große Änderungen wirst du nicht sehen. RAID-Controller besitzen normalerweise intern noch eine komplexe Cache-Logik - sofern man eine BBU hat - die das ganze doch stark relativiert.

Was schon eher einen Performance-Einfluss hat, ist das Aliasing. Bei 64k Blocksize es schwer da was grundlegendes falsch zu machen, gerade da gpart vom Array die Blockgröße bekommt und es automagisch richtig machen sollte, dennoch. Man sollte darauf achten, dass die Partitionen so auf dem Array liegen, dass jeweils 4 der 16k UFS2-Blöcke mit einem 64k Array-Block beginnen und enden. Sind sie zueinander versetzt, zwingt man das Array mehr Blöcke zu lesen als notwendig und Daten dann wegzuwerfen. Das kann Leistung kosten. Ist übrigens das gleiche Problem, was man auch mit den neuen 4k Platten hat.

Last but no least hat man ein Tool geschrieben - als man die Sache mit den 4k Platten auseinanderzupfen musste - um die Auswirkungen der Blocksize und der Ausrichtung der physischen zu den logischen Blöcken zu messen: http://svn.freebsd.org/viewvc/base/user/des/phybs/ Die Anwendung ist einfach (Bitte nur auf leeren Platten / Dateisystemen / Arrays nutzen, es gehen alle Daten verloren):
Code:
% svn co http://svn.freebsd.org/base/user/des/phybs
% cd phybs 
% make 
% ./phybs -w /dev/adN
Nachdem das Ding nach langer Zeit durchgelaufen ist - es kann mehrere Stunden dauern - gibt es eine schöne Auflistung verschiedener logischer Blockgrößen und ihrer Verschiebung zur physischen Blockgröße aus. Für jede Kombination wird eine Geschwindigkeit angegeben. Man kann sich dann dort die optimale aussuchen. :)
 
Zuletzt bearbeitet:
Vielen Dank mousaka und Y für die guten Antworten.

Bei Blockgrößenunterschiede habe ich folgende Bedenken:

Beim Schreiben eines 4K-Blocks auf einem 64K-Stripe-Array muss der RAID-Controller erst 64K von den Platten lesen, die 4K austauschen und dann 64K wieder schreiben.

Das würde zumindest gelten, wenn der Controller nicht weniger als 64K schreiben könnte.
(Es ist übrigens ein 3Ware 9650 ohne BBU.)



Beim Lesen ist das Problem nicht ganz so schlimm, da er dann ja nur die 64K lesen muss, die aber wahrscheinlich später wieder benötgt werden und dann schon im Cache liegen.
 
So, endlich habe ich es geschafft den guten Vorschlag von Yamagi auszuprobieren:

Code:
opteron# ./phybs -w /dev/da0
   count    size  offset    step        msec     tps    kBps

  131072    1024       0    4096     1051623     124     124
  131072    1024     512    4096     1093492     119     119

   65536    2048       0    8192      546853     119     239
   65536    2048     512    8192      548899     119     238
   65536    2048    1024    8192      549073     119     238

   32768    4096       0   16384      273057     120     480
   32768    4096     512   16384      275577     118     475
   32768    4096    1024   16384      275836     118     475
   32768    4096    2048   16384      275078     119     476

   16384    8192       0   32768      138169     118     948
   16384    8192     512   32768      138567     118     945
   16384    8192    1024   32768      139229     117     941
   16384    8192    2048   32768      139484     117     939
   16384    8192    4096   32768      138838     118     944

Allerdings ist das nur ein Raid-1-Array ...

Ich probiere weiter.
 
Soweit ich das einschätze, spielt die Blockgröße bei RAID-1 keine Rolle.

Die folgenden Tests habe ich auf einem RAID-0 ausgeführt:


Code:
opteron# ./phybs -w -h 524288 /dev/da0
   count    size  offset    step        msec     tps    kBps

  131072    1024       0    4096      525655     249     249
  131072    1024     512    4096      546222     239     239

   65536    2048       0    8192      273817     239     478
   65536    2048     512    8192      274620     238     477
   65536    2048    1024    8192      274603     238     477

   32768    4096       0   16384      137604     238     952
   32768    4096     512   16384      137939     237     950
   32768    4096    1024   16384      137997     237     949
   32768    4096    2048   16384      137555     238     952

   16384    8192       0   32768       69233     236    1893
   16384    8192     512   32768       69506     235    1885
   16384    8192    1024   32768       69623     235    1882
   16384    8192    2048   32768       69515     235    1885
   16384    8192    4096   32768       69365     236    1889

    8192   16384       0   65536       25333     323    5173
    8192   16384     512   65536        5398    1517   24279
    8192   16384    1024   65536        5471    1497   23953
    8192   16384    2048   65536        5479    1494   23918
    8192   16384    4096   65536        5392    1519   24305
    8192   16384    8192   65536        5467    1498   23973

    4096   32768       0  131072        4888     837   26814
    4096   32768     512  131072        4862     842   26953
    4096   32768    1024  131072        4839     846   27084
    4096   32768    2048  131072        4810     851   27247
    4096   32768    4096  131072        4883     838   26837
    4096   32768    8192  131072        4804     852   27279
    4096   32768   16384  131072        4856     843   26987

    2048   65536       0  262144        3146     650   41660
    2048   65536     512  262144        3885     527   33735
    2048   65536    1024  262144        3895     525   33649
    2048   65536    2048  262144        4061     504   32275
    2048   65536    4096  262144        4119     497   31819
    2048   65536    8192  262144        4164     491   31470
    2048   65536   16384  262144        4097     499   31988
    2048   65536   32768  262144        4135     495   31696

    1024  131072       0  524288        7411     138   17685
    1024  131072     512  524288       12068      84   10860
    1024  131072    1024  524288       12175      84   10765
    1024  131072    2048  524288       12187      84   10754
    1024  131072    4096  524288       12143      84   10793
    1024  131072    8192  524288       12109      84   10824
    1024  131072   16384  524288       12203      83   10740
    1024  131072   32768  524288       12119      84   10815
    1024  131072   65536  524288       12109      84   10823

     512  262144       0 1048576       13141      38    9973
     512  262144     512 1048576       15733      32    8330
     512  262144    1024 1048576       15816      32    8286
     512  262144    2048 1048576       15858      32    8265
     512  262144    4096 1048576       15907      32    8239
     512  262144    8192 1048576       15985      32    8199
     512  262144   16384 1048576       15329      33    8550
     512  262144   32768 1048576       15797      32    8296
     512  262144   65536 1048576       14242      35    9203
     512  262144  131072 1048576       10670      47   12284

     256  524288       0 2097152        7818      32   16764
     256  524288     512 2097152        8130      31   16120
     256  524288    1024 2097152        9383      27   13968
     256  524288    2048 2097152       10159      25   12901
     256  524288    4096 2097152        8846      28   14816
     256  524288    8192 2097152        9910      25   13225
     256  524288   16384 2097152        9024      28   14523
     256  524288   32768 2097152        9646      26   13587
     256  524288   65536 2097152        8226      31   15932
     256  524288  131072 2097152       10141      25   12924
     256  524288  262144 2097152        4095      62   32005

Die Stripe-Size ist 256K:
Code:
/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 not initialized.
/c0/u0 Write Cache = on
/c0/u0 Read Cache = Intelligent
/c0/u0 volume(s) = 1
/c0/u0 name =
/c0/u0 serial number = 02326749EB0D210086FB
/c0/u0 Auto Verify Policy = on
/c0/u0 Storsave Policy = protection
/c0/u0 Command Queuing Policy = on

Unit     UnitType  Status         %RCmpl  %V/I/M  Port  Stripe  Size(GB)
------------------------------------------------------------------------
u0       RAID-0    OK             -       -       -     256K    298.002
u0-0     DISK      OK             -       -       p1    -       149.001
u0-1     DISK      OK             -       -       p0    -       149.001
u0/v0    Volume    -              -       -       -     -       298.002

Die Werte sind irgendwie widersprüchlich.
Demnach sollte bei einer Stripe-Size von 256K eine Blocksize von 65K die beste Wahl zu sein.

Was sagt ihr dazu?
 
Zweiter Versuch mit RAID-0 und einer Stripe-Size von 64K:

Code:
opteron# ./phybs -w -h 524288 /dev/da0
   count    size  offset    step        msec     tps    kBps

  131072    1024       0    4096      525588     249     249
  131072    1024     512    4096      546816     239     239

   65536    2048       0    8192      273616     239     479
   65536    2048     512    8192      274553     238     477
   65536    2048    1024    8192      274478     238     477

   32768    4096       0   16384      137397     238     953
   32768    4096     512   16384      137864     237     950
   32768    4096    1024   16384      137930     237     950
   32768    4096    2048   16384      137464     238     953

   16384    8192       0   32768       74035     221    1770
   16384    8192     512   32768       69531     235    1885
   16384    8192    1024   32768       69664     235    1881
   16384    8192    2048   32768       69415     236    1888
   16384    8192    4096   32768       69348     236    1890

    8192   16384       0   65536       20180     405    6494
    8192   16384     512   65536        4735    1729   27677
    8192   16384    1024   65536        4786    1711   27383
    8192   16384    2048   65536        4834    1694   27109
    8192   16384    4096   65536        4919    1665   26641
    8192   16384    8192   65536        4855    1687   26996

    4096   32768       0  131072        5334     767   24571
    4096   32768     512  131072        5441     752   24086
    4096   32768    1024  131072        5381     761   24355
    4096   32768    2048  131072        5213     785   25142
    4096   32768    4096  131072        5197     788   25218
    4096   32768    8192  131072        5178     790   25310
    4096   32768   16384  131072        5291     774   24769

    2048   65536       0  262144        3300     620   39715
    2048   65536     512  262144        3644     561   35963
    2048   65536    1024  262144        4594     445   28525
    2048   65536    2048  262144        3455     592   37932
    2048   65536    4096  262144        4073     502   32173
    2048   65536    8192  262144        3926     521   33378
    2048   65536   16384  262144        3648     561   35925
    2048   65536   32768  262144        3923     522   33411

    1024  131072       0  524288        2915     351   44950
    1024  131072     512  524288        4603     222   28473
    1024  131072    1024  524288        5307     192   24695
    1024  131072    2048  524288        4861     210   26963
    1024  131072    4096  524288        5178     197   25312
    1024  131072    8192  524288        5421     188   24174
    1024  131072   16384  524288        4919     208   26641
    1024  131072   32768  524288        5548     184   23624
    1024  131072   65536  524288        2748     372   47688

     512  262144       0 1048576        5803      88   22585
     512  262144     512 1048576        6285      81   20851
     512  262144    1024 1048576        3864     132   33913
     512  262144    2048 1048576        4124     124   31782
     512  262144    4096 1048576        4122     124   31794
     512  262144    8192 1048576        4116     124   31837
     512  262144   16384 1048576        4125     124   31767
     512  262144   32768 1048576        4109     124   31895
     512  262144   65536 1048576        4083     125   32100
     512  262144  131072 1048576        7672      66   17083

     256  524288       0 2097152        6361      40   20604
     256  524288     512 2097152        8123      31   16135
     256  524288    1024 2097152        6508      39   20139
     256  524288    2048 2097152        5540      46   23655
     256  524288    4096 2097152        6076      42   21571
     256  524288    8192 2097152        6523      39   20091
     256  524288   16384 2097152        5575      45   23507
     256  524288   32768 2097152        6710      38   19533
     256  524288   65536 2097152        6039      42   21702
     256  524288  131072 2097152        6965      36   18817
     256  524288  262144 2097152        7978      32   16427
 
Zurück
Oben