Cinco pasos antes de evaluar el desempeño de tu aplicación

Cinco pasos antes de evaluar el desempeño de tu aplicación

Con tantos procesadores y bibliotecas modernos para optimizar el procesamiento de tu aplicación, es esencial contar con un paso para el análisis del rendimiento. Sin embargo, esta no es una tarea tan simple como parece y puede traer resultados inconsistentes si no se toman en cuenta algunas acciones.

En este artículo, te daré 5 pasos esenciales antes de analizar el rendimiento de tu aplicación. ¡Espero que te ayuden!

¿Cómo evaluar el desempeño de tu aplicación?

1. Recolectar información de tu sistema

No importa si analizas el rendimiento de aplicaciones o el desarrollo de sitios web. Es extremadamente importante registrar el hardware y el software que se utilizan. No solo el nombre de las herramientas, sino también las versiones e instrucciones de instalación, más aún si se trata de un desarrollo en equipo.

Es importante conocer las especificaciones y configuraciones de hardware que afectan tus resultados, como por ejemplo la cantidad de procesadores, núcleos, subprocesos, tamaño de la memoria, interconexión de red, disponibilidad de tecnologías para aumentar la velocidad de las CPU (Turbo Boost/Turbo Core) y el sistema de archivos utilizado. Por lo general, toda esta información se puede obtener en el sitio web del fabricante de tu procesador.

Los registros sobre el software utilizado son importantes para futuras replicaciones de sus experimentos y también para conocer las versiones utilizadas, en caso de futuras repeticiones.

2. Sanity Check

Después de configurar el entorno experimental, conocer el software y el hardware que usará y tener tu aplicación lista para el análisis, las "mejores prácticas de análisis de rendimiento" recomiendan un Sanity Check.

Esta prueba rápida se usa comúnmente para evaluar si tu aplicación se comporta como se espera después de nuevas adiciones o cambios de desarrollo, pero también se puede usar para el análisis de rendimiento.

Consiste en experimentos rápidos en el entorno de ejecución de destino para validar si la salida de la aplicación ha generado los resultados esperados. De lo contrario, no perderás tiempo haciendo experimentos inconsistentes.

3. Detener procesos ejecutados en background

Un error muy común que puede afectar el rendimiento de tu aplicación es dejar otras ejecutándose en segundo plano. A menudo no nos damos cuenta de que tenemos un programa que se inicia automáticamente con la computadora, como un servidor Apache, Docker o Django. Por lo tanto, verifica siempre que no tengas otras aplicaciones usando tu CPU y memoria cuando ejecutes tu programa. En Linux puedes hacer esto con el comando:

$ htop

Y terminar el proceso con:

$ kill -d PID_ID

En Windows, puedes usar el Administrador de Tareas para finalizar procesos.

4. Verificar Turbo Boost, Turbo Core y Hyperthreading

Turbo Boost (Intel) o Turbo Core (AMD) son una funcionalidad de los procesadores que aumenta automáticamente la frecuencia de la CPU bajo demanda. Esto significa que tu procesador normalmente no funciona con la frecuencia indicada en las especificaciones. Sin embargo, puedes mantener una frecuencia predeterminada si deshabilitas esta función en el BIOS de forma permanente o provisional con el siguiente comando para procesadores Intel en la terminal de Linux:

$ echo 1 > /sys/devices/system/cpu/intel_pstate/no_turbo

Hyperthreading es una característica introducida por Intel en sus procesadores para permitir que varios subprocesos o threads se ejecuten simultáneamente en cada núcleo de tu procesador. De esa manera, puedes hacer más tareas en paralelo. Sin embargo, con esta función habilitada de forma predeterminada, el rendimiento de tu aplicación que usa uno o más colores puede verse afectado. De la misma manera que para Turbo Boost, también puedes desactivar esta función con un comando en Linux:

$ echo 0 > sys/devices/system/cpu/cpuVERSION/online

Queda a tu criterio usar o no estas funciones, pero es importante saber que existen y que pueden incidir en el desempeño de tu programa.

5. Varias ejecuciones de tu programa

Varios factores pueden afectar la ejecución de tu aplicación, especialmente si tienes resultados no deterministas. Incluso la temperatura de tu servidor y la posición de cada rack en tu clúster pueden afectar el rendimiento. Por lo tanto, si realizas varias repeticiones con diferentes parámetros y consideras resultados estadísticos sobre los datos recopilados (media, mediana, desviación estándar, etc.), entonces obtendrás resultados más cercanos a la realidad.

Lo ideal cuando se habla de análisis de rendimiento es utilizar un diseño factorial, es decir, realizar experimentos variando dos o más factores y combinando los mismos, además de repeticiones. Lo ideal es no hacer iteraciones con los mismos parámetros posteriormente, ya que los datos pueden quedarse en la memoria, por ejemplo, y conducir a un resultado sesgado.

Si quieres saber más sobre metodologías para hacer la mejor combinación de experimentos para análisis de desempeño, te recomiendo el famoso libro en el área: Jain, R. “The art of computer systems performance analysis: techniques for experimental design, measurement, simulation, and modeling.” (1991).

Extra

Una forma práctica y portable de crear ambientes listos para la ejecución de tus experimentos, con todo el software en las versiones y configuraciones ideales listas para usar y la replicación es a través de ambientes virtuales o contenedores. Los ejemplos populares son:

  • Conda: un entorno virtual de código abierto y un administrador de paquetes que se ejecuta en Windows, macOS y Linux para programas Python.
  • Renv: herramienta para crear entornos reproducibles, aislados y portátiles para proyectos desarrollados en R.
  • Spack: administrador de paquetes para que puedas instalar software en diferentes versiones para un usuario específico en el sistema para Linux, macOS y supercomputadoras. Puedes usarlo para instalar todos tus programas y dejar guardada esta “receta” para futuros experimentos. También te permite crear fácilmente imágenes de contenedores con Spack Environments.
  • Docker: una de las herramientas más populares para la contenedorización de tu aplicación. Crea imágenes listas para usar con todo el software utilizado en tu aplicación para diferentes sistemas operativos y portátiles a diferentes servidores, lo cual es muy útil si deseas explorar el rendimiento de tu aplicación en diferentes procesadores, por ejemplo.

¡Listo! Ya puedes usar la ciencia de datos y los gráficos para procesar los datos de rendimiento recopilados y presentar los resultados del rendimiento de tus experimentos, sabiendo que están más cerca de los resultados reales. ¿Consideras otros pasos antes de tus revisiones de desempeño? Déjalos en los comentarios de la publicación :)

⚠️
Las opiniones y comentarios emitidos en este artículo son propiedad única de su autor y no necesariamente representan el punto de vista de Revelo.

Revelo Content Network da la bienvenida a todas las razas, etnias, nacionalidades, credos, géneros, orientaciones, puntos de vista e ideologías, siempre y cuando promuevan la diversidad, la equidad, la inclusión y el crecimiento profesional de los profesionales en tecnología.