Ich versuche, die aggregierten Schreibraten beim Schreiben in eine Datei in einem GPFS-Dateisystem im Vergleich zum direkten Schreiben auf eine Festplatte auf einem System mit Red Hat Enterprise Linux Server Version 6.4 (Santiago) zu vergleichen. Für meine Anwendung muss ich die Rohrate messen, dh ohne den Cache zu nutzen. Ich verstehe die Auswirkungen der direkten Option dd
zum Umgehen des Caches nicht. Wenn ich direkt auf ein Blockgerät schreibe, erhalte ich bei der Verwendung eine drastisch niedrigere Rate als oflag=direct
beim Schreiben in eine Datei im GPFS-Dateisystem. Warum passiert das?
Um die Gesamtraten zu messen, erstelle ich p
Prozesse dd
, die gleichzeitig in das Blockgerät oder die Blockdatei schreiben. Ich summiere dann die erhaltenen p
Raten, um die aggregierte Schreibrate zu erhalten.
#!/bin/bash
directdiskrate=~/scratch/rate5
syncdiskrate=~/scratch/rate4
filerate=~/scratch/rate3
numruns=1
numthreads=30
#to disk use both conv=fsync and oflag=direct
writetodiskdirect="dd if=/dev/zero of=/dev/sdac bs=256k count=4096 conv=fsync oflag=direct iflag=fullblock"
for p in $(seq $numthreads)
do
#parses output of dd, rate is on last line, each field separated by ,s
$writetodiskdirect 2>&1|tail -n 1|awk 'BEGIN { FS = "," } ; { print $3 }'|sed -e 's/MB\/s//g'>>$directdiskrate&
done
wait
#to disk use only conv=fsync option
writetodisksync="dd if=/dev/zero of=/dev/sdac bs=256k count=4096 conv=fsync iflag=fullblock"
for p in $(seq $numthreads)
do
#parses output of dd, rate is on last line, each field separated by ,s
$writetodisksync 2>&1|tail -n 1|awk 'BEGIN { FS = "," } ; { print $3 }'|sed -e 's/MB\/s//g'>>$syncdiskrate&
done
wait
#to file use both conv=fsync and oflag=direct
for p in $(seq $numthreads)
do
writetofile="dd if=/dev/zero of=/gpfs1/fileset6/file$p bs=256k count=4096 conv=fsync oflag=direct"
#parses output of dd, rate is on last line, each field separated by ,s
$writetofile 2>&1|tail -n 1|awk 'BEGIN { FS = "," } ; { print $3 }'|sed -e 's/MB\/s//g'>>$filerate&
done
wait
Ergebnisse: Die Schreibrate jedes der 30 Prozesse ist wie folgt:
- Beim Schreiben auf die Festplatte mit der
conv=fsync
Option erhält jeder Prozess eine Schreibrate von ~ 180 MB / s - Beim Schreiben auf die Festplatte mit beiden
conv=fsync
undoflag=direct
erhält jeder Prozess eine Schreibrate von ~ 9 MB / s - Das Schreiben in eine Datei im GPFS-Dateisystem mit beiden
conv=fsync
undoflag=direct
erzielt eine Schreibrate von ~ 80 MB / s