El ajuste del rendimiento es la mejora del rendimiento del sistema . Normalmente, en los sistemas informáticos, la motivación para dicha actividad se denomina problema de rendimiento, y puede ser real o anticipado. La mayoría de los sistemas responderán al aumento de carga con cierto grado de disminución del rendimiento. La capacidad de un sistema para aceptar una carga mayor se llama escalabilidad , y modificar un sistema para manejar una carga mayor es sinónimo de ajuste del rendimiento.
El ajuste sistemático sigue estos pasos:
Este es un ejemplo del ciclo medir-evaluar-mejorar-aprender desde el control de calidad .
Un problema de rendimiento puede identificarse por sistemas lentos o que no responden. Esto suele ocurrir debido a una carga alta del sistema , lo que hace que alguna parte del sistema alcance un límite en su capacidad de respuesta. Este límite dentro del sistema se denomina cuello de botella.
Se utilizan varias técnicas para mejorar el rendimiento. Entre ellos se encuentran la optimización de código, el equilibrio de carga, la estrategia de almacenamiento en caché, la computación distribuida y el autoajuste.
El análisis de rendimiento, comúnmente conocido como creación de perfiles, es la investigación del comportamiento de un programa utilizando información recopilada a medida que se ejecuta el programa. Su objetivo es determinar qué secciones de un programa optimizar.
Un generador de perfiles es una herramienta de análisis de rendimiento que mide el comportamiento de un programa a medida que se ejecuta, en particular la frecuencia y duración de las llamadas a funciones. Las herramientas de análisis del desempeño existieron al menos desde principios de la década de 1970. Los perfiladores pueden clasificarse según sus tipos de resultados o sus métodos de recopilación de datos.
La ingeniería de rendimiento es la disciplina que abarca roles, habilidades, actividades, prácticas, herramientas y entregables utilizados para cumplir con los requisitos no funcionales de un sistema diseñado, como aumentar los ingresos comerciales, reducir las fallas del sistema, retrasar proyectos y evitar el uso innecesario. de recursos o de trabajo.
Se han identificado varias actividades comunes en diferentes metodologías:
Algunas optimizaciones incluyen mejorar el código para que el trabajo se realice una vez antes de un bucle en lugar de dentro de un bucle o reemplazar una llamada a una clasificación de selección simple con una llamada al algoritmo más complicado para una clasificación rápida .
Los sistemas de software modernos, por ejemplo, los sistemas de Big Data, comprenden varios marcos (por ejemplo, Apache Storm, Spark, Hadoop). Cada uno de estos marcos expone cientos de parámetros de configuración que influyen considerablemente en el rendimiento de dichas aplicaciones. Algunas optimizaciones (tuning) incluyen mejorar el rendimiento de la aplicación encontrando la mejor configuración para dichas aplicaciones.
El almacenamiento en caché es un método fundamental para eliminar los cuellos de botella en el rendimiento que son el resultado de un acceso lento a los datos. El almacenamiento en caché mejora el rendimiento al retener la información utilizada con frecuencia en la memoria de alta velocidad, reduciendo el tiempo de acceso y evitando cálculos repetidos. El almacenamiento en caché es una forma eficaz de mejorar el rendimiento en situaciones en las que se aplica el principio de localidad de referencia . Los métodos utilizados para determinar qué datos se almacenan en un almacenamiento cada vez más rápido se denominan colectivamente estrategias de almacenamiento en caché. Algunos ejemplos son el caché de ASP.NET , el caché de la CPU , etc.
Un sistema puede constar de componentes independientes, cada uno de ellos capaz de atender solicitudes. Si todas las solicitudes son atendidas por uno de estos sistemas (o un pequeño número) mientras otros permanecen inactivos, se pierde tiempo esperando que el sistema usado esté disponible. Hacer arreglos para que todos los sistemas se utilicen por igual se conoce como equilibrio de carga y puede mejorar el rendimiento general.
El equilibrio de carga se utiliza a menudo para lograr mayores beneficios de un sistema distribuido al seleccionar inteligentemente en qué máquina ejecutar una operación en función de qué tan ocupados están todos los candidatos potenciales y qué tan adecuada es cada máquina para el tipo de operación que debe realizarse.
La computación distribuida se utiliza para aumentar el potencial de ejecución paralela en arquitecturas de CPU modernas; el uso de sistemas distribuidos es esencial para lograr beneficios de rendimiento a partir del paralelismo disponible . La computación en clúster de alto rendimiento es un uso bien conocido de los sistemas distribuidos para mejorar el rendimiento.
La computación distribuida y la agrupación en clústeres pueden afectar negativamente a la latencia y, al mismo tiempo, aumentar la carga en los recursos compartidos, como los sistemas de bases de datos. Para minimizar la latencia y evitar cuellos de botella, la informática distribuida puede beneficiarse significativamente de las cachés distribuidas .
Un sistema de autoajuste es capaz de optimizar sus propios parámetros internos de funcionamiento con el fin de maximizar o minimizar el cumplimiento de una función objetivo ; típicamente la maximización de la eficiencia o la minimización de errores . Los sistemas de autoajuste suelen exhibir un control adaptativo no lineal . Los sistemas de autoajuste han sido un sello distintivo de la industria aeroespacial durante décadas, ya que este tipo de retroalimentación es necesaria para generar un control multivariable óptimo para procesos no lineales.
El cuello de botella es la parte de un sistema que está al máximo de su capacidad. Otras partes del sistema estarán inactivas esperando a que realice su tarea.
En el proceso de encontrar y eliminar cuellos de botella, es importante demostrar su existencia, generalmente mediante mediciones, antes de actuar para eliminarlos. Existe una fuerte tentación de adivinar . Las conjeturas suelen ser erróneas.