Performance de Software

Benchmark y Profiling

Ivan Leon

XalapaCode

12/09/2025

IN MEMORIAM

 

Dennis Ritchie

⭐ 09/09/1941 🙏12/10/2011

 

🚀 Creador del Lenguage C

🚀Co-creador del Sistema Operativo

UNIX

Dennis Ritchie recibe la Medalla Nacional de Tecnología de EE. UU. (Dec. 1988)

Software Benchmarking

Práctica que implica evaluar el rendimiento de sistemas y componentes en un conjunto predefinido de condiciones.

Proceso para comprender la eficiencia, la fiabilidad y la escalabilidad de las aplicaciones, en múltiples condiciones.

Optimización de Rendimiento

  • identificar cuellos de botella en el rendimiento y comparar diferentes versiones de software o productos de la competencia

¿Por qué es importante?

Optimización de Rendimiento

CASO: un proveedor de almacenamiento en la nube (AWS, Google, etc.) evalúa su software de sincronización de archivos en varios Sistemas Operativos (SOs).

  • Hallazgos revelan deficiencias en los algoritmos de transferencia de archivos dependiendo del SO, requiriendo optimizaciones específicas de software.

¿Por qué es importante?

Toma de Decisiones Informada

  • mejoras de software, hardware y configuraciones, basadas en datos

¿Por qué es importante?

Toma de Decisiones Informada

CASO: e-commecer evalúa Sistemas de Bases de Datos para determinar cuál ofrece el mejor rendimiento por medio de pruebas de Escrita y Lectura de datos.

  • Resultados indicación la migración a un DBMS de mayor eficiencia (MySQL => Postgresql), mejorando tiempos de entrega de datos para páginas web.

¿Por qué es importante?

Pruebas de Confiabilidad y Estabilidad

  • Evaluación comparativa en condiciones de estrés para evaluar confiabilidad y estabilidad del software, garantizando que sistemas puedan soportar picos de carga sin fallas.

¿Por qué es importante?

Pruebas de Confiabilidad y Estabilidad

CASO: Un sitio de e-commerce se prepara para lanzar ofertas en un evento de "Black Friday".

  • Por medio de testes de stress, son simuladas situaciones de alto tráfico HTTP/HTTPS, revelando o no, problemas de confiabilidad y estabilidad.

¿Por qué es importante?

Para Web Servers:

- Apache Bench (apt-get install apache2-utils)

- wrk (https://github.com/wg/wrk)

 

Para Bases de Datos:

- sysbench (mysql / oracle / postgresql)

- pgbench (postgresql)

 

Para todo:

- Shellscript, Python, Lua

Herramientas (un mundo de)

Software Profiling

Técnica utilizada en el desarrollo de software para medir y analizar el comportamiento de un programa en tiempo de ejecución.

Al perfilar, se puede identificar qué componentes de un software/sistema más recursos consume, como tiempo de CPU, memoria o operaciones de E/S,

por medio de métricas!

Ejecución (CPU)

  • Analizar el tiempo empleado en diversas funciones y el flujo de ejecución general de la aplicación.

Tecnicas y Niveles de Profiling

Memoria

  • Analizar los patrones de uso de memoria de una aplicación e identificar fugas de memoria, asignaciones excesivas y gestión ineficiente de memoria.

Tecnicas y Niveles de Profiling

Threads

  • Analizar el comportamiento de los hilos, identificar problemas de sincronización y detectar cuellos de botella de rendimiento que surgen de las interacciones de los hilos.

Tecnicas y Niveles de Profiling

  • Python: cProfile
  • Nodejs: opción "--prof" (built-in)
  • C: gprof
  • C++, C, Rust: ORBIT (Google Archive)
  • Java: JProfiler, YourKit

Herramientas de Profiling

Profiling Continuo

Profiling Continuo

PY SPY

https://github.com/benfred/py-spy

Ivan Leon

Software Engineer

 

 

Organizador

 

 

@ivanleoncz

 

 

GRACIAS!

Made with Slides.com