I/O Messung mit dd und gnuplot
Mit dd lässt sich die Ein-Ausgabeleistung des Speicher-Systems eines PCs sehr gut messen. Um gute Werte zu bekommen muss man die Blockgrösse und das Testdatenvolumen variieren. Am besten macht man das mit zufälliger Variation um den Einfluss von Cache-Leerungen und zeitgesteuerte Prozesse zu minimieren. Auf diese Weise zeichnet sich selbst bei mittel ausgelasteten Systemen eine brauchbare Kurve ab, die nur von mehr oder weniger Abweichungen begleitet ist. Die Rückgaben von dd werden in eine Datei geschrieben, die dann von einem gnuplot-Skript zur Darstellung in ein Diagramm eingetragen wird. Man kann dazu mehrere Durchläufe einfach laufen lassen, die Daten werden aneinandergehängt und von Gnuplot jeweils mit einer eigenen Farbne dargestellt.
#!/usr/bin/gnuplot # PDF='iotest.pdf' # set datafile separator ";" set terminal pdf size 11.6929,8.267 set output PDF #set decimalsign locale "de_DE.UTF-8" set size 0.95,0.95 set origin 0.03,0.03 set grid #linestyle 30, linestyle 31 set grid xtics mxtics ytics mytics set format y "%3.0s %c" set title "IO Leistung bei konstanter Blockgrösse 512 set logscale xy set xlabel "Anzahl Blockübertragungen" set ylabel "IO in byte/s" plot "iotest.ergebnis1" using 1:($4 / $5 ):-2 with points notitle lc var set title "IO Leistung bei steigender Blockgrösse set logscale xy set xlabel "Blockgrösse" set ylabel "IO in byte/s" plot "iotest.ergebnis2" using 3:($4 / $5 ):-2 with points notitle lc var
# getting random number from random.org N=10000 # 1E4 is the limit! Ymin=-10000 Ymax=10000 wget -O random-numbers \ "https://www.random.org/integers/?num=${N}&min=${Ymin}&max=${Ymax}&col=1&base=10&format=plain&rnd=new"
#!/bin/bash # DATEI=/usr/src/iotest # Hier werden Testdaten reingeschrieben ERGEBNIS1=iotest.ergebnis1 ERGEBNIS2=iotest.ergebnis2 MAXCOUNT=1000 #------------------------- LANG=C # Wir brauchen Zufallszahlen, die holen wir schnell von random.org [ -f random-numbers ] || ./get-rnd-numbers.sh # Es ist wichtig die Zugriffe zu randomisieren um nicht regelmässige Muster durch Cache-Management zu bekommen while read COUNT do BS=$((MAXCOUNT * COUNT )) echo "$COUNT $BS" LINE1=$(dd if=/dev/zero of=$DATEI count=${COUNT} bs=512 2>&1 |sed -e "s/ bytes (.*) copied, /;/g" -e "s/ s, .*$//" \ |grep -v 'records') #|cut -d',' -f3-|awk '{ printf "%1s;%2s\n", $1, $3}') LINE2=$(dd if=/dev/zero of=$DATEI count=10 bs=$BS 2>&1 |sed -e "s/ bytes (.*) copied, /;/g" -e "s/ s, .*$//" \ |grep -v 'records') #|cut -d',' -f3-|awk '{ printf "%1s;%2s\n", $1, $3}') echo -e "$COUNT;$COUNT;512;$LINE1" >>"$ERGEBNIS1" echo -e "$COUNT;10;$BS;$LINE2" >>"$ERGEBNIS2" done < random-numbers # Zwei leerzeilen anhängen damit beim nächsten Durchgang angehängte Daten von gnuplot als neuen Block erkannt werden echo >>"$ERGEBNIS1" echo >>"$ERGEBNIS1" echo >>"$ERGEBNIS2" echo >>"$ERGEBNIS2" rm "$DATEI"