Archivo de la etiqueta: diskspd

DiskSpd, el sucesor de SQLIO

A la hora de medir el rendimiento de una unidad de almacenamiento, una de las herramientas más útiles y fiables (en entornos Windows) era SQLIO. A pesar de lo que su nombre pueda indicar, esta herramienta no servía para medir la E/S generada por una consulta SQL, sino para obtener medidas de rendimiento de disco. Sin embargo, después de algunos años entre nosotros, se podían apreciar señales de que poco a poco se estaba quedando fuera de su tiempo.

Entra DiskSpd

Finalmente, y tras su última actualización a finales del 2015, SQLIO fue retirado, y reemplazado por una nueva herramienta: DiskSPD. Al igual que su predecesor, se utiliza para obtener métricas de rendimiento de unidades de almacenamiento, pero con un conjunto de utilidades adicionales que lo convierten en algo mucho más útil. Además, y para los aficionados al Software Libre, su código fuente está disponible para descarga en GitHub, con una licencia MIT.

Ahora bien, entre todas las funciones, hay una característica particularmente interesante para los que desarrollamos scripts PowerShell: DiskSPD puede volcar la salida en formato XML. Esto es importante, porque facilita enormemente el procesado masivo de datos obtenidos mediante la ejecución de tests de diskspd.

Dentro de la carpeta de GitHub, hay un conjunto de scripts denominados VMFleet, que permite hacer operaciones y tests de forma masiva en máquinas virtuales, pero para aquellas personas menos ambiciosas que se conforman con testear el rendimiento de una única unidad, acompaño el artículo con un par de pequeños scripts para ejecutar baterías de tests. Obviamente, se pueden personalizar los parámetros de DiskSpd para simular lo más fielmente posible la carga de trabajo del servidor destino, pero como ejemplo ilustrativo basta.

El primero, lanza n ejecuciones de diskspd, bajo un cierto set de parámetros y recopila la salida en una serie de archivos XML en una carpeta especificada. Con $iteraciones podemos especificar el número de repeticiones del experimento, que se guarda en la carpeta especificada con $tag (que además personaliza el nombre del fichero xml generado). El parámetro $threads se usa para especificar cuántos hilos de trabajo deseamos lanzar simultáneamente, con lo que podemos poner, por ejemplo, un hilo por core del sistema.

El segundo script toma los XML de dicha carpeta, y calcula la velocidad media (en MB/s) de rendimiento del disco en base a los datos recopilados. Teniendo en cuenta que el rendimiento de un sistema puede variar a lo largo del tiempo por múltiples circunstancias, lo más realista es realizar varios experimentos idénticos, y promediarlos.

Process-SpeedData se encarga de promediar la velocidad de lectura/escritura y mostrar en pantalla el resultado, a partir de los archivos XML generados por el script anterior, para ello simplemente se le pasa como parámetro la carpeta que se desea escanear, y el script leerá y promediará la información de todos los XML que encuentre en la misma.

Resumiendo…

Aunque SQLio nos ha acompañado durante años y sigue siendo igual de funcional que antes, ahora disponemos de una herramienta igual de potente, más flexible y que además es Open Source. La capacidad de generar la salida en formato XML aquí es una característica diferenciadora que permite incorporar muy fácilmente la salida de información en scripts PowerShell que procesen los datos de rendimiento generados (latencia de acceso, velocidades medias, etc).