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

Re: performance analyse RAID1



Paulo Aires <p.aires@ai-t.eu> wrote:

> echo 3 > /proc/sys/vm/drop_caches
> time dd if=/dev/sdc of=/dev/zero bs=10M count=1000
> 10485760000 Bytes (10 GB) kopiert, 81,4056 s, 129 MB/s

> echo 3 > /proc/sys/vm/drop_caches
> root@lkvs105a:~# time dd if=/dev/md3 of=/dev/zero bs=10M count=1000
> 10485760000 Bytes (10 GB) kopiert, 86,5653 s, 121 MB/s

> und bin etwas erstaunt darüber das auch bei einem RAID1 die
> Geschwindigkeit identich ist. Für mein verständnis müsste der
> lesezugriff auf ein RAID1 device etwas schneller sein als der
> lesezugrif auf nur einer Platte da ja auf zwei platten Zeitgleich
> gelesen wird.

Der Kernel behandelt den Zugriff unterschiedlich, wenn du direkt auf das
Block-Device zugreifst oder wenn du auf Dateien im Dateisystem
zugreifst.

Ich habe hier zwei Dateien mi 5GB Nullen angelegt und lese diese mit
zwei Prozessen parallel ein:

root@skuld:/home# echo 3 > /proc/sys/vm/drop_caches; dd if=test1.nul of=/dev/null bs=10M & dd if=test2.nul of=/dev/null bs=10M & time wait

Wie zu erwarten erreiche ich dabei im Gesamt die doppelte
Geschwindigkeit der Einzel-Platten.

500+0 records in
500+0 records out
5242880000 bytes (5,2 GB) copied, 75,7633 s, 69,2 MB/s
500+0 records in
500+0 records out
5242880000 bytes (5,2 GB) copied, 90,6854 s, 57,8 MB/s

(Der Unterschied ergibt sich daraus, dass das Dateisystem /home in einem
LVM liegt, das zwei RAID1 als Unterbau hat und eine der beiden Dateien
liegt halb auf dem zweiten RAID1, welches geringfügig schnellere Platten
hat.)

Jetzt lese ich mir nur _einem_ Prozess eine einzelne Datei ein:

root@skuld:/home# echo 3 > /proc/sys/vm/drop_caches; dd if=test2.nul of=/dev/null bs=10M

Das Tool "dstat -d -D md1,sde,sdf,md2,sdc,sdd 10" zeigt hier schön, wie
jeweils beide Platten benutzt werden. Man sieht auch schön den Wechsel
von md2 auf md1 mittem im Lesevorgang:

--dsk/md1-----dsk/sde-----dsk/sdf-----dsk/md2-----dsk/sdc-----dsk/sdd--
 read  writ: read  writ: read  writ: read  writ: read  writ: read  writ
2749k  552k:2729k  552k:1214k  552k:1584k 1049k: 797k 1050k: 796k 1050k
   0     0 :   0     0 :   0     0 :   0     0 :   0     0 :   0     0 
  74k    0 :7373B    0 :  66k    0 :  66k 3277B:  33k 4096B:  33k 4096B
   0     0 :   0     0 :   0     0 :8602B 1229B: 410B 2048B:8192B 2048B
   0     0 :   0     0 :   0     0 :   0  7782B:   0  8602B:   0  8602B
   0     0 :   0     0 :   0     0 :3384k  410B:1504k 1229B:1916k 1229B
2276k    0 :1280k    0 : 995k    0 :  29M  819B:  15M 2458B:  14M 2458B
   0     0 :   0     0 :   0     0 :  51M    0 :  26M    0 :  25M    0 
   0     0 :   0     0 :   0     0 :  55M 3277B:  24M 4096B:  32M 4096B
   0     0 :   0     0 :   0     0 :  56M    0 :  30M    0 :  26M    0 
   0     0 :   0     0 :   0     0 :  56M 7782B:  24M 8602B:  32M 8602B
   0     0 :   0     0 :   0     0 :  59M    0 :  23M    0 :  35M    0 
  77M    0 :  34M    0 :  43M    0 :  18M  819B:7156k 1638B:  11M 1638B
  99M    0 :  55M    0 :  43M    0 :5734B    0 :9830B    0 :9830B    0 
   0     0 :   0     0 :   0     0 :   0  3072B:   0  4096B: 512B 4096B

Lese ich dagegen direkt /dev/md1, so erhalte ich nach kurzer Zeit auch
nur Lesezugriffe auf eine Platte:

--dsk/md1-----dsk/sde-----dsk/sdf-----dsk/md2-----dsk/sdc-----dsk/sdd--
 read  writ: read  writ: read  writ: read  writ: read  writ: read  writ
  43M    0 :  43M    0 :   0     0 : 819B 3277B:  13k 4096B:  32k 4096B
 118M    0 :  99M    0 :  19M    0 : 204k   14k: 145k   16k: 108k   16k
 122M    0 : 122M    0 :   0     0 :   0     0 :   0     0 :   0     0 
 123M    0 : 119M    0 :3813k    0 :  28k  819B:  27k 1638B:  21k 1638B
  98M    0 :  98M    0 : 609k    0 :  10k    0 :  15k    0 : 410B    0 

Wie man sieht, parallelisiert der Kernel (hier 3.0) die Zugriff schon,
aber nur, wenn diese durch den VFS-Layer laufen. Greift man direkt auf
das Block-Device zu, wird der Zugriff eines Prozesses auch nur von einer
Platte bedient.

> [-- text/html, encoding quoted-printable, charset: ISO-8859-15, 88 lines --]

Hmpf, bitte abstellen.

S°

-- 
Sigmentation fault. Core dumped.


Reply to: