¿Qué es un benchmark?

Seguimos hoy tratando el análisis de rendimiento de un sistema, tema que comenzamos a discutir ayer. Para medir el rendimiento de un sistema es necesario que esté ejecutando algún tipo de aplicación. Si se quiere cuantificar este rendimiento para una aplicación específica, será con esta aplicación con la que se realizarán las medidas. Se pueden utilizar directamente las aplicaciones reales o realizar algunas modificaciones para hacer más sencillo el proceso de medida, para mejorar la portabilidad,...
Pero puede que se quiera una medida de rendimiento algo más general (ya hemos visto algunos ejemplos, como la comparación de dos sistemas diferentes o la evaluación de la ganancia que se obtiene realizando una determinada mejora). En estos casos se utilizan benchmarks, es decir, programas específicos para ejecutar en sistemas cuyo rendimiento se desea evaluar. Existen diferentes tipos de benchmarks:
  • Benchmarks sintéticos: Aplicaciones artificiales programadas específicamente para realizar medidas de rendimiento. No realizan trabajo útil y deben contener una mezcla de instrucciones que sea representativa del tipo de cargas que se ejecutan en el sistema que se está evaluando.
  • Microbenchmarks (benchmarks de juguete): Son también aplicaciones artificiales pero compuestas tan sólo por unas cuantas líneas de código que permiten evaluar una parte específica del sistema. Requieren que el programador posea un conocimiento en profundidad del funcionamiento de la parte del sistema que se desea evaluar.
  • Núcleos (kernels): También son sólo unas pocas líneas de código que no obtienen resultados útiles, pero muy diferentes que las de los microbenchmarks. Se escoge la parte más representativa de una aplicación real (la que más impacto tiene en su rendimiento) y se utiliza para evaluar el rendimiento del sistema.
  • Conjuntos de benchmarks: Las anteriores alternativas tienen bastantes limitaciones cuando se pretende obtener una información completa y exhaustiva sobre el rendimiento de un sistema. Por este motivo se han creado conjuntos de aplicaciones reales (que sí obtienen resultados útiles) muy concretas, que caracterizan de manera específica los distintos aspectos de funcionamiento de un sistema. Para que su ejecución no se alargue demasiado, las entradas de estas aplicaciones suelen ser conjuntos pequeños de datos.
Si buscáis en Google distintos tipos de benchmarks para evaluar el rendimiento de distintos tipos de sistemas, veréis que tenéis multitud de alternativas. Os dejo un enlace a SPEC, organización que propone estándares para evaluación de rendimiento cuyos benchmarks son probablemente los más conocidos hoy en día en casi todos los campos (ya dedicaremos otra entrada en el futuro a los benchmarks de SPEC).

No hay comentarios: