Las 4 tareas de una optimización de performance son:
- Medición
- Diagnósticos de cuellos de botella
- Selección de optimizaciones
- Implementación de las optimizaciones
Nuestra principal herramienta son los contadores de
rendimiento, algunas herramientas de desarrollo también nos permiten tomar una
imagen de aquello que está ocurriendo en disco memoria y procesador.
Es necesario conocer el tiempo de cada una de las partes del
proceso, para poder efectuar un análisis de cada uno de los componentes del
mismo.
Se debe tomar en cuenta la velocidad de los componentes, una
escritura en disco es más lenta que una escritura en memoria, y la memoria
siempre será más lenta que el procesador, peor aún, si vive el almacenamiento
en red, si está en la nube, si consume servicios, es necesario identificar en
donde se encuentran cada uno de los cuellos de botella.
¿Cómo vamos a optimizar?, podemos iniciar procesos paralelos
y aprovechar la capacidad del procesador, si algo se guarda en disco podemos
mantenerlo más tiempo en memoria, si tenemos mucha información podemos hacer objetos
más ligeros, divide y vencerás, has tareas específicas para que puedan ser
medidas e incluso separadas y agrupadas.
Este punto es muy importante, tener cargada solo la información
que vamos a emplear, muchas veces por hacer objetos genéricos se carga información
que no es necesaria, al final todo esto se traduce en lecturas y escrituras que
cuando se habla de grandes cantidades de información pueden representar el
colapso del sistema.
Por más que tengamos mucha memoria disponible, hay que
pensar que esta no es infinita, liberarla cuando sea necesario, analizar los
objetos para determinar cómo se libera la memoria en cada parte del proceso.
¿Los componentes externos responden adecuadamente?, ¿cómo está
la velocidad de acceso a discos?, ¿tengo errores?, ¿Se me encolan peticiones?
Hay que ver el sistema como un todo, y este todo abarca el
sistema como tal, el sistema operativo, los dispositivos de hardware (tarjetas
de red, discos, memoria), bases de datos, los desarrolladores tendemos a
cegarnos y pensar que todo está en el código, es muy importante conocer toda la
pintura y no solo los personajes que se encuentran en ella.
¿Cómo es nuestro diseño?, hay 2 puntos importantes que
muchas veces nos generar grandes problemas de rendimiento y cuellos de botella,
y tienen que ver directamente con el diseño.
-Arquitectura
-Frameworks
Porque la arquitectura, la premisa fundamental al construir
una arquitectura es que esta deberá ser lo más sencilla posible, ¿Por qué?, porque
una arquitectura sencilla es entendible, es fácil de implementar, y es rápida.
Al tener menos capas, la información pasa por menos lugares,
cada capa se traduce en tiempo, objetos demasiado genéricos pueden ser muy
grandes, o efectuar una gran cantidad de operaciones para llegar al resultado,
como consecuencia se pierde el desempeño, crea una arquitectura acorde a tus
necesidades, cada sistema es diferente, tiene diferentes requisitos por lo que
su arquitectura debe ser diferente.
Frameworks, los frameworks son muy útiles, ya que
implementan las mejores prácticas o nos facilitan el trabajo, pero muchos de
ellos tienen el gran error que mencione en el punto anterior, objetos demasiado
genéricos, objetos que son muy grandes, accesos a memoria para obtener tipos u
objetos hacen una gran cantidad de operaciones para estar listos para los
diferentes eventos para los que son programados, todo esto reduce el desempeño
de tu sistema.
Mientras más cerca estemos del lenguaje maquina más rápido
operara el sistema, no digo con esto que empleemos ensamblador en el
desarrollo, lo que digo es que hay que buscar emplear funciones nativas del
lenguaje, que sean ligeras y que controlemos completamente.
Si cumplimos todo lo anterior, saldremos de esa computación
salvaje, en la que dependemos de la velocidad de los procesadores y no de un orden
en la programación.
No todo lo que brilla es oro y no todo lo nuevo es lo mejor.
Pero recuerda como diría algún arquitecto de sistemas, todo
depende… depende de la situación en la que te encuentres y de que tan alto
requieras la optimización de tu código.
Bueno esto solo es un comentario
Carlos
Referencia
Enhancing
Performance Optimization of Multicore/Multichip Nodes with Data Structure
Metrics
Ashay Rane, James Browne
No hay comentarios.:
Publicar un comentario