lunes, 30 de noviembre de 2020

 Evaluación de Rendimiento de Sistemas Computacionales

El evaluar el rendimiento de los sistemas de computación puede llegar a ser algo complicado, debido a que la escala de crecimiento y la complejidad de los computadores o el software moderno, a la par con la amplia gama de técnicas que mejoran el rendimiento que emplean las personas que diseñan hardware, han hecho que la evaluación de rendimiento sea una tarea más ardua. Al elegir entre diferentes equipos, el rendimiento es un factor clave; el medir y comparar con precisión diferentes computadores es importante para los compradores y por ende para los que diseñan esos equipos.



Cuando se dice que un computador tiene mejor rendimiento que otra, surge la pregunta ¿A qué nos referimos? Si estuviéramos ejecutando un programa en dos computadoras diferentes, diríamos que la más rápida seria la cual ejecutara mas rápido, si se estuviera ejecutando un centro de procesamiento de datos, podríamos decir que la más rápida fue la que ejecuto mas trabajos durante cierto tiempo establecido; las personas normales que usan una computadora están interesadas en reducir el tiempo de inicio y finalización de una tarea (tiempo de ejecución), los administradores de los Datacenter están interesados en aumentar el throughput o bandwidth (la cantidad de trabajos realizados en un tiempo).

Por lo que será necesario diferentes métricas de rendimiento, del mismo modo diferentes conjuntos de aplicaciones para hacer comparaciones (benchmark) entre computadoras que son las que se centran mas en el tiempo de respuesta en comparación con los servidores (datacenter) que se centran mas en el throughput, la métrica es la medición, lo que buscamos medir en los computadores es el tiempo mínimo para realizar una trabajo y lo que buscamos medir en un servidor es la capacidad de procesamiento de grandes datos.


 
Medición del rendimiento: el tiempo es la medida del rendimiento de un computador, el equipo que realiza una cantidad de trabajo en el menor tiempo es la más rápida, el tiempo de ejecución se mide en segundos por programa, el tiempo de respuesta es el tiempo que se requiere para completar una tarea, donde se incluye el acceso al disco duro, a la memoria ram, las actividades de salida y entrada, la sobrecarga en el sistema operativo, y demás acciones. En algunos casos el procesador puede funcionar en varios programas que se ejecutan a la vez, en ese caso lo que se busca es optimizar el rendimiento mas no el tiempo que requiere cada programa.

El tiempo de ejecución del procesador o tiempo de la CPU es el tiempo que dedica el procesador para una tarea y que no incluye el tiempo de espera para la entra y salida o el ejecutar otros programas, recalcar que el tiempo que el usuario experimenta es el tiempo que tarda el programa mas no el tiempo que ocupa el procesador; tenemos dos tiempos diferentes en la CPU, el tiempo que usa el sistema operativo y el tiempo que usa el usuario.


Como es complejo diferenciar los dos tiempos de la CPU,  podemos definir los tiempos, el tiempo de CPU que utiliza el usuario es el tiempo que el procesador usa para ejecutar programas del usuario, no se cuenta el tiempo de espera debido a las entradas y salidas o el tiempo utilizado para ejecutar otros programas, para el tiempo que utiliza el sistema operativo, podemos describirlo como el tiempo que emplea el sistema operativo para su administración interna.

 

Las diferentes aplicaciones son sensibles a diferentes aspectos cuando medimos el rendimiento de un sistema informático o computacional; por ejemplo si tenemos aplicaciones que vamos a ejecutar en servidores, estas dependen en gran parte de las entradas y las salidas, que a su vez dependen del hardware y del software, el tiempo real transcurrido o wall clock time es el tiempo de interés, en algunas aplicaciones, el usuario puede preocuparse por el throughput, el tiempo de respuesta o incluso puede hacerse una combinación de estos dos como puede ser el throughput con tiempo de respuesta en el peor de los casos. Para mejorar el desempeño de un programa es importante tener claro la definición de métrica que se va a utilizar, y luego buscar y solucionar los posibles cuellos de botellas, midiendo la ejecución del programa y buscando los posibles cuellos de botella, esto se hace para mejorar el rendimiento en las partes del sistema.


En el caso de una computadora es importante pensar en el rendimiento en otras métricas, los diseñadores pueden pensar en hacer componentes usando las medidas que se relacionen con la rapidez con la que el hardware puede realizar operaciones o funciones, casi todas las computadoras se construyen usando un reloj que determina cuando ocurre un evento en el hardware, estos intervalos de tiempo se llaman ciclos de reloj, los diseñadores se refieren a la duración de un perdió del reloj como el tiempo para un ciclo de reloj complejo como puede ser ( 150 nanosegundos) y como la frecuencia de un reloj, como puede ser 3.8 GHz, que es el inverso del periodo del reloj.

 Formulas para calcular el tiempo de ejecucion de la CPU   Extraida del libro Patterson and Hennesy, Computer Organization and Design (The Hardware, Software Interface)

Ahora hablaremos de las medidas de desempeño:

  • Capacidad de respuesta: estas medidas son destinado a evaluar qué tan rápido una tarea determinada puede ser logrado por el sistema. Las posibles medidas son el tiempo de espera, la longitud de la cola, etc.

  • Nivel de uso: estas medidas están destinadas a evaluar qué tan bien los diversos componentes del se está utilizando el sistema. Las posibles medidas son rendimiento y utilización de varios recursos.

  • Fiabilidad: estas medidas indican qué tan confiable es el sistema a largo plazo.

  • Productividad: estas medidas indican la eficacia con la que un usuario puede realizar su trabajo.

Ahora vamos a hablar sobre Patrones de medida (Benchmarks)  


Para evaluar el rendimiento tenemos varias opciones: modelos analíticos (matemáticos) y modelos de simulación (algoritmos) estos dos son antes de que la maquina exista, ya que ambos tienen limitaciones por la dificultad de explicar mediante fórmulas matemáticas el comportamiento de la maquina y su carga, se usan mas cuando se está desarrollando la máquina.

También existe una tercera alternativa que es con la maquina ya real, para esto se requiere el uso de programas que hagan el benchmark, estos se pueden clasificar en función al ámbito de aplicación, mas concretamente el tipo de recurso que intervienen en el benchmark, por eso podemos clasificarlos en el ámbito de aplicación:

  • Enteros: aplicaciones donde domina la aritmética entera, con inclusiones a procedimientos de búsquedas, operaciones lógicas.

  • Transacciones: aplicaciones donde dominan las transacciones online y offline sobre bases de datos.

  • Punto flotante: calculo numérico con números reales.



Linpack  Xtreme programa que sirve para hacer benchmark sobre punto flotante

También podemos clasificarlos según la naturaleza del programa:

  •         Programas reales: compiladores, procesadores de texto, permiten diferentes opciones de ejecución y con ello se obtienen medidas precisas.

  •          Kernels: trozos de programas reales, que son buenos para analizar rendimientos específicos de una determinada máquina.

  •          Patrones conjuntos: también llamados benchmark suits, son el conjunto de programas que miden los modos de funcionamiento de la máquina.

  •          Patrones reducidos: también llamados toy benchmark que son programas cuya línea de código es reducida y que tiene resultados desconocidos, son fáciles de introducir y ejecutar en cualquier máquina.

  •          Patrones sintéticos: o synthetic benchmark, es código artificial que no pertenece a ningún programa del usuario y que se usa para determinar perfiles de ejecución.


TCP benchmark para patrones conjuntos

En conclusión podemos decir que la evaluación de rendimiento es importante a la hora de diseñar o incluso comprar software, ya que si necesitamos una mayor velocidad de procesamiento es conveniente comprar u obtener una CPU con una alta frecuencia de reloj para que este no tarde tanto en hacer operaciones o las funciones, de los programas que vamos a ejecutar, incluso es importante tener en cuenta los otras partes, tratando de buscar cual es la mejor combinación de partes para que al combinarlas me den el mejor rendimiento de acuerdo al uso que le vamos a dar, ya sea correr un programa que requiera mucho espacio de memoria o procesar grandes datos; del mismo modo debemos escoger las partes que mejor nos sirvan de acuerdo al uso que le daremos, de igual manera, podemos hacer uso de los programas para hacer un benchkmark de nuestro equipo.

Referencias bibliográficas : 

  • http://wiki.sc3.uis.edu.co/images/3/34/TextBookFull.pdf

  • http://www.fdi.ucm.es/profesor/jjruz/web2/temas/ec4.pdf

Sexta Práctica: Regresando al curso de Arquitectura de Computadores

  En esta practica, se van a responder preguntas claves relacionadas con la ética profesional como ingenieros de sistemas, donde se leyó el ...