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: