Esta web utiliza cookies, puedes ver nuestra política de cookies aquí. Si continuas navegando estás aceptándola

Test rápido NFS


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í.
Autor: kr0m -- 26/07/2014 14:29:48