Esta pagina se ve mejor con JavaScript habilitado

Test rápido NFS

 ·  🎃 kr0m

Hay ocasiones en las que necesitamos conocer de forma rápida el rendimiento que puede sacar un directorio importado por NFS o queremos comparar dos servidores NFS.

En este artículo publico un script basado en dd que escribe ficheros de un tamañao aleatorio y guarda los resultados de velocidad en un fichero que mas tarde representaremos mediante gnuplot.

Lo que haremos será generar 10k ficheros con tamaños comprendidos entre 1-4Mb, conociendo los bytes enviados en cierto tiempo podremos calcular la velocidad de transferencia y con los datos obtenidos generar gráficas.

El script en cuestión es el siguiente:

#! /bin/bash
clear

echo -e " "
echo -e "---------------------------------------------------------------"
echo -e "| Script NFS test, generates random sized files between 1-4Mb |"
echo -e "---------------------------------------------------------------"
echo -e " "

echo -e "-- Introduzca la ruta del directorio compartido por NFS:"
read RUTA
echo -e " "

echo -e "-- Introduzca nombre identificativo del servidor NFS:"
read NAME
echo -e " "

echo -e "-- Creando directorio de prueba"
rm -rf $RUTA/nfs_test 2>/dev/null
mkdir $RUTA/nfs_test 2>/dev/null

i=0

> /tmp/nfs_$NAME'.dat'

while [ $i -lt 10000 ]
do
    #echo -e "i: $i"
    RAND=$[RANDOM%4+1]
    echo -e " "

    echo -e "++ Generando fichero $i con tamanyo $RAND"
    WBYTES_SECONDS=$(dd if=/dev/zero of=$RUTA/nfs_test/$i bs=1M count=$RAND 2>&1|grep bytes|awk -F " "           '{print$1":"$6}')
    #echo -e "WBYTES_SECONDS: $WBYTES_SECONDS"
    WBYTES=$(echo $WBYTES_SECONDS|awk -F ":" '{print$1}')
    #echo -e "WBYTES: $WBYTES"
    WSEC=$(echo $WBYTES_SECONDS|awk -F ":" '{print$2}')
    #echo -e "WSECONDS: $WSEC"
    WMBps=$(echo "scale=10;$WBYTES/$WSEC/1024/1024" | bc)

    echo -e "++ Leyendo fichero $i"
    RBYTES_SECONDS=$(dd if=$RUTA/nfs_test/$i of=/dev/zero 2>&1|grep bytes|awk -F " " '{print$1":"$6}')
    #echo -e "RBYTES_SECONDS: $RBYTES_SECONDS"
    RBYTES=$(echo $RBYTES_SECONDS|awk -F ":" '{print$1}')
    #echo -e "RBYTES: $RBYTES"
    RSEC=$(echo $RBYTES_SECONDS|awk -F ":" '{print$2}')
    #echo -e "RSECONDS: $RSEC"
    RMBps=$(echo "scale=10;$RBYTES/$RSEC/1024/1024" | bc)

    echo -e "$RMBps $WMBps" >> /tmp/nfs_$NAME'.dat'

    echo -e "-- R-Speed: $RMBps MB/s"
    echo -e "-- W-Speed: $WMBps MB/s"

    echo -e "++ Borrando fichero"
    rm $RUTA/nfs_test/$i
    i=$(( $i + 1 ))
done

echo -e "-- Eliminando directorio de prueba"
rm -rf $RUTA/nfs_test 2>/dev/null

Si queremos comparar dos servidores NFS podemos plotear la salida de los ficheros para ver la diferencia de forma gráfica:

vi /etc/portage/package.use/gnuplot

sci-visualization/gnuplot X cairo gd qt4 readline wxwidgets -aqua bitmap -doc -examples -ggi -latex -lua plotutils svga -thin-splines

emerge -av sci-visualization/gnuplot

gnuplot
gnuplot> set terminal png
gnuplot> set output “nfs_read.png”
gnuplot> plot “nfs_server1.dat” using 1 w lines title ‘R NFS1 MB/s’, “nfs_server2.dat” using 1 w lines title ‘R NFS2 MB/s’

gnuplot> set terminal png
gnuplot> set output “nfs_write.png”
gnuplot> plot “nfs_server1.dat” using 2 w lines title ‘W NFS1 MB/s’, “nfs_server2.dat” using 2 w lines title ‘W NFS2 MB/s’

gnuplot> set terminal png
gnuplot> set output “nfs1.png”
gnuplot> plot “nfs_server1.dat” using 1 w lines title ‘R NFS1 MB/s’, “nfs_server1.dat” using 2 w lines title ‘W NFS1 MB/s’

gnuplot> set terminal png
gnuplot> set output “nfs2.png”
gnuplot> plot “nfs_server2.dat” using 1 w lines title ‘R NFS2 MB/s’, “nfs_server2.dat” using 2 w lines title ‘W NFS2 MB/s’

Con estas gráficas podremos ver el rendimiento tanto de lectura como escritura para un servidor en concreto y comparar tanto lecturas como escrituras en los dos servidores, algunas de las gráficas generadas son como esta:


Si te ha gustado el artículo puedes invitarme a un RedBull aquí