Está en la página 1de 42

ANALISIS Y DISEÑO DE SISTEMAS DE INFORMACIÓN I

TEMA 1 INTRODUCCIÓN

Evaluación del rendimiento de un sistema informático.

Intenta determinar de qué forma un conjunto de programas está utilizando un hardware.


El conjunto de programas es la carga que está procesando el hardware. Según sea la
utilización se obtendrán unas prestaciones.

El concepto de prestaciones no se puede desligar de la carga. Se debe evaluar la potencia del


ordenador para realizar un conjunto de tareas.
Sin embargo es necesario poder emitir un juicio sobre la eficacia de un sistema en muchas
situaciones en las que nos podemos encontrar.

Dificultades

- La carga no es estática.
- Los índices que se utilizan para medir las prestaciones son diferentes según el tipo de
estudio o sistema informático.
- Siempre se intenta mejorar las prestaciones. Se debe negociar un nivel de servicio.
Las prestaciones son fundamentales en el diseño, selección, compra y utilización del sistema
informático.

Uno de los principales problemas en el análisis de prestaciones es asegurar que los


experimentos, se efectúan con la misma carga.
La carga real es difícil de repetir, por tanto deberemos ser capaces de repetir esa carga. Pero
surge otro problema, y es que la carga que utilicemos debe representar una carga hipotética.
Si lo que pretendemos es comparar diferentes equipos, además de los problemas anteriores
nos encontraremos que los instrumentos de medida y los índices que estamos utilizando
pueden no ser exactamente los mismos.

Motivos de un trabajo de evaluación

- Un trabajo de evaluación de prestaciones arranca de unas necesidades. No se empieza el


trabajo sin unos objetivos.
- Se puede aplicar en todas las fases del ciclo de vida de un sistema informático:
. en el diseño de una máquina
. en el diseño del sistema informático
. en la ampliación o configuración de un sistema informático
. sintonización o ajuste. Sintonizar es equilibrar el consumo de recursos.
. caracterización y predicción de la carga

En general los estudios de prestaciones serán necesarios cuando se necesite predecir el


comportamiento o mejorarlo.

1
Magnitudes a medir

- Tanto el usuario como el responsable de un sistema tienen su idea sobre las prestaciones o
rendimiento.
- Esta idea se basa en magnitudes o parámetros los cuales pueden tener relación con:
. consumo de tiempos
. utilización de recursos
. trabajo realizado por el sistema o por partes del mismo

Por ejemplo para los usuarios una cosa determinante suele ser el tiempo de respuesta ante un
comando interactivo ligero. Para el responsable del sistema podría ser la velocidad con la que
se procesan grandes trabajos batch.

Hay tres tipos de medidas a partir de las cuales se calculan índices de rendimiento:
1.- Características físicas del sistema.
2.- Condiciones operativas del sistema durante el tiempo que se está haciendo el estudio.
3.- Indices de prestaciones del sistema.

Variables perceptibles por el usuario (Variables o índices externos)

- Productividad (throughput). Para una carga dada es el trabajo útil por unidad de tiempo
- Capacidad: máxima cantidad de trabajo útil por unidad de tiempo (máxima productividad
que puede obtenerse).
- Tiempo de respuesta: tiempo en procesar un trabajo. Trabajo puede significar cosas
diferentes: transacciones, procesos, instrucciones...

Variables internas o del sistema

a) Factor de utilización: tiempo en el que un componente ha sido realmente utilizado.


b) Solapamiento de los componentes: tiempo en el que varios componentes se han utilizado
a la vez.
c) Sobrecarga (overhead): carga que se ha procesado y que no ha sido pedida explícitamente
por los usuarios.
d) Factor de carga de multiprogramación: relación entre el tiempo de respuesta de un
trabajo en un entorno de multiprogramación y en uno monoprogramado.
e) Factor de ganancia de multiprogramación: relación entre el tiempo total de ejecutar un
grupo de trabajos en multiprogramación y monoprogramación.
f) Frecuencia de fallo de página: número de fallos de página que se producen por unidad de
tiempo en un sistema de memoria virtual paginada.
g) Frecuencia de swapping: número de programas expulsados de memoria por unidad de
tiempo.

Magnitudes no relacionadas directamente con las prestaciones

- Fiabilidad: probabilidad de funcionamiento correcto en un intervalo de tiempo.


- Disponibilidad: probabilidad de que en un instante pueda estar funcionando.
- Seguridad: que funcione correctamente sin perjudicar a nadie o sufra averías en las que no
se comprometa a nadie.
- Performabilidad: en sistemas que siguen funcionando con fallos, probabilidad de mantener

2
un nivel de prestaciones.
- Facilidad para el mantenimiento.

Carga de prueba

- Para evaluar el sistema hay que hacerlo funcionar bajo una carga.
- Esta carga debe representar la carga real (el problema que tiene es que es muy variable,
quieres hacer unas modificaciones y la carga real que tienes en un momento no la tienes en
otro).
- Carga de prueba: la utilizada para tomar las medidas. Debe ser representativa y
reproducible, puede ser real o sintética.
- La carga de prueba o de test suele formarse por componentes de carga.

En realidad se suele usar carga sintética porque permite poder experimentar y reproducir
situaciones a nuestro gusto y sin tener que modificar el sistema real. En cambio en muchos
casos hay que preocuparse de justificar si esa carga sintética es representativa de la situación
o carga que queremos reproducir.
Para comprobar esto último habrá que medir unas magnitudes para que podamos compararlas
con las obtenidas bajo carga sintética.

Magnitudes para los componentes de la carga

- Tiempo de CPU por trabajo.


- Número de operaciones de E/S por trabajo. Conviene desglosarlo por tipo de dispositivos.
- Prioridad.
- Memoria.
- Localidad de referencias: tiempo en el que las referencias permanecen en una página.

Magnitudes para el conjunto de la carga

- Tiempo ente llegadas, entre dos peticiones.


- Frecuencia de llegada, inversa del tiempo entre llegadas.
- Distribución de los trabajos: proporción de los diferentes componentes de carga.
- Para cargas conversacionales:
-tiempo de reflexión del ususario: tiempo que el usuario de un terminal de un sistema
interactivo necesita para generar una nueva petición al sistema.
- número de usuarios: número de usuarios interactivos que trabajan simultáneamente
sobre el mismo sistema en un instante dado.
- intensidad del usuario: relación entre el tiempo de proceso de una petición y su tiempo
de reflexión.

Proposición de soluciones

Para solucionar problemas de malas prestaciones:


- Ajustar parámetros del S.O.
- Modificar políticas de gestión del S.O. Puede que partes del S.O. adquirido no se adapten a
una carga en particular.
- Equilibrado de la carga: el objetivo es que se utilice el máximo de recursos al mismo
tiempo.
- Modificación o sustitución de componentes hardware. Debe perseguir el recurso más
cargado.

3
- Modificación de programas. A efectuar por los usuarios, normalmente escapa al
responsable del sistema.

De lo que se trata es de mejorar el funcionamiento. Para ello habrá que determinar dónde está
el problema. Luego habrá que evaluar si se puede solucionar sin cambiar componentes
hardware o si hay que adquirir nuevo software.
Si se puede solucionar sin nuevas adquisiciones, intentar modificar la carga desde el punto de
vista de la explotación para intentar quitar trabajo a los elementos más solicitados.

Algunos parámetros del S.O.

- Tamaño del quantum.


- Prioridad.
- Factor de multiprogramación: número máximo de trabajos que están simultáneamente en
memoria principal.
- Tamaño de la partición de memoria: cantidad fija de memoria principal asignada a una cola
de trabajos.
- Máxima frecuencia de fallo de página. Si se sobrepasa este índice se manda el proceso a
disco para que no aumente la sobrecarga.
- Indice de supervivencia de páginas. Si una página no se ha utilizado un tiempo, se puede
devolver a disco.

Técnicas en la evaluación de sistemas

- Monitorización: utilización de herramientas de medición sobre el sistema informático.


- Modelado: para evaluar el comportamiento de un sistema en el que hay elementos que no
están instalados. Se suelen implementar sobre la teoría de colas y resolver mediante
métodos analíticos o simulación (programa que representa el comportamiento de un
sistema. Se debe estar seguro de que se ha modelado bien el sistema y de que el programa
funciona bien. Se utiliza cuando no se conoce otro método).
- Benchmark: se trata de cargas utilizadas para la comparación de sistemas o configuraciones.

Los métodos analíticos se basan en leyes que relacionan distintas partes del modelo. Se llega
a crear un modelo matemático. En cambio estos modelos normalmente están limitados para
modelar comportamientos extraños.
En los modelos de simulación en principio se puede modelar cualquier cosa, pero suelen
exigir mucho tiempo de desarrollo y ejecución. Además son muy difíciles de validar.
Las técnicas de benchmarking suelen ser las más sencillas y unas de las utilizadas, aunque
muchas veces los resultados obtenidos no dependen únicamente del benchmark, o el
benchmark puede no ser representativo de una carga real.

TEMA 2 HERRAMIENTAS DE MEDIDA

4
Monitor: herramienta utilizada para observar la actividad de un sistema informático mientras
está procesando carga.
- Observan el comportamiento.
- Recogen datos estadísticos de la ejecución de los programas.
- Analizan los datos captados.
- Presentan resultados.
El resultado de una medición será distinto unas veces de otras, ya que, normalmente, no es
posible repetir las mismas condiciones de carga y en los mismos instantes. Por ello se habla
de monitorización y no de medición ya que lo que estrictamente se efectúa es un seguimiento
de la actividad realizada.

Utilidad:

- Un administrador puede conocer la utilización de los recursos. Puede intentar soluciones y


comprobar el resultado.
- Un usuario puede adaptar su carga a la del sistema.
- Un analista de sistemas puede utilizarlo para caracterizar la carga, y crear cargas de pruebas.
También puede servir para planificar el crecimiento de la carga. Sirve para extraer los
parámetros de los modelos.
- También hay sistemas adaptativos según las condiciones de la carga.

Características del monitor

- Sobrecarga o interferencia: consumo de los recursos necesarios para el propio monitor.


- Precisión: nivel de error que pueden llevar los datos.
- Resolución: máxima frecuencia a la que se pueden detectar y registrar los datos.
- Ambito o dominio de medida: características que es capaz de medir.
- Anchura de entrada: número máximo de unidades de información que el monitor puede
extraer en paralelo.
- Capacidad de reducción de datos: capacidad para analizar, procesar y empaquetar los datos.
- Compatibilidad: facilidad para adaptarse a otros entornos o requerimientos.
- Precio: adquisición, instalación, mantenimiento, operación.
- Facilidad de instalación: fácil de instalar y retirar.
- Facilidad de utilización: sencillo, completo y agradable.

La sobrecarga hace que el monitor consuma recursos de lo que está midiendo. Esto hace que
modifique los resultados de lo que está midiendo. Ej. el programa top suele aparecer el
mismo como gran consumidor entre los procesos que enseña.

Clasificación

Según su implantación:
- Monitores software, que son programas o ampliaciones del sistema operativo que acceden al
estado del sistema, informando al usuario sobre dicho estado.
- Monitores hardware, que son dispositivos electrónicos que se conectan a determinados
puntos del sistema.
- Monitores híbridos, que son una combinación de las dos técnicas anteriores.

Según su mecanismo de activación se clasifican en:


- Monitores de eventos o acontecimientos, son aquellos que se activan por la aparición de
ciertos eventos. Si el evento ocurre con frecuencia producen más sobrecarga. Se puede hacer

5
una traza de lo que está ocurriendo.
- Monitores de muestreo, son aquellos que se activan a intervalos mediante interrupciones de
reloj. Según la frecuencia de muestreo se llega a un compromiso entre resolución y
sobrecarga. Para evitar el sincronismo entre la evolución de los estados y los intervalos de
medida se utilizan intervalos aleatorios.

Y según su forma de presentar los resultados se clasifican en:


- Monitores en línea, van presentando datos parciales.
- Monitores batch, los datos se analizan cuando termina la ejecución del programa.

Esquema conceptual

Sistema a medir

Interface instrumentación

Filtro

Procesador

Registrador

Interpretador

La interfaz de instrumentación es lo que conecta al monitor con lo que está observando. Por
ejemplo si al S.O. se añaden interrupciones software para detectar determinadas acciones,
esas interrupciones serían la interfaz.
El selector permite hacer un registro selectivo de las muestras o variables que nos interesan.
El procesador trata las muestras seleccionadas para poderlas registrar en el formato y con la
información adecuada que necesitará la memoria a que se destine y para que se pueda
interpretar o analizar.
En algunos casos el analizador trabaja al mismo tiempo que el resto de elementos (on line) y
en otros trabaja en diferido.

Monitores software

La activación del monitor implica la ejecución de instrucciones. Pueden ser guiados por
sucesos, por muestreo o una mezcla de ambas técnicas.

Inserción del código del monitor:


- Adición de un nuevo programa, fácil de instalar y eliminar.
- Modificación del software a medir, basado en el uso de sondas software.
- Modificación del S.O., se suele utilizar para acceder a datos visibles desde el S.O.

Son programas que se ejecutan junto con los programas y en el sistema que miden.
Las sondas software son conjuntos de instrucciones que se insertan en puntos clave de un
programa.
La prioridad de los monitores software deberá ser mayor que la de los elementos que deba
medir. Suelen escribirse en el mismo lenguaje que el sistema operativo.

Monitor software por muestreo:


6
1º) Un temporizador indica el momento del muestreo.
2º) Se inhiben las interrupciones.
3º) Se toman datos sobre las actividades suspendidas o sobre el estado de ciertos elementos.
4º) Almacenar los datos.
5º) Arrancar el temporizador.
6º) Habilitar las interrupciones.
La utilización de registros temporales permite reducir el número de muestras.

La interferencia introducida se pude controlar fijando el periodo de muestreo. Este parámetro


se debe establecer de forma que los datos obtenidos sean fiables para el objetivo del estudio
pero que no sea tan pequeño que la interferencia introducida sea grande.
En algunos casos se pueden producir efectos de sincronismo entre fenómenos que se están
midiendo y la frecuencia de muestreo. Para evitar este peligro se puede utilizar un periodo de
muestreo generado aleatoriamente pero donde se puede fijar la media.

Monitores software dirigidos por sucesos:


- Por traps: código que se inserta en partes del programa para extraer información cuando se
llega a esas partes.
- Por interceptación de interrupciones: se desvía el tratamiento de una interrupción a código
del monitor donde se registran datos sobre el estado en ese momento y luego se sigue el
tratamiento de la interrupción.

Monitores hardware

Se conectan al sistema a través de sondas electrónicas.


Suelen utilizarse para índices de prestaciones de bajo nivel.
Su principal característica es que son externos al sistema que van a medir, lo que implica que:
- no utilizan recursos del sistema
- no producen interferencias
- son rápidos
Inconvenientes:
- difíciles de instalar y utilizar
- hay magnitudes que solo puede acceder el software
- pueden producir errores en el hardware

Esquema sencillo monitor hardware:

reloj

módulo contadores almacenamiento


lógico

Los monitores pueden hacerse más complejos, con procesadores y memorias RAM para
procesar y grabar los datos. A su vez estos procesadores pueden tener unidades de E/S como
pantallas, teclado, etc.
El caso más sencillo es una señal de reloj y una variable a medir conectadas a una puerta and,
y la salida enviada a un contador. Se medirá la cantidad de pulsos que la señal está activada.
Un ejemplo de un monitor hardware puede ser una analizador lógico.

Monitores híbridos

7
Suelen ser software que captan acontecimientos en el sistema operativo y los envía a un
módulo hardware que está conectado al bus del sistema. El envío puede ser una instrucción de
E/S.
El módulo hw puede ser un procesador que graba el suceso recibido con una marca de
tiempo. La información se va procesando y se puede ir representando en una pantalla
conectada al procesador del monitor.
Así se disminuye la sobrecarga ya que el tratamiento del monitor se hace en otro sistema y se
aumenta la rapidez gracias a tener un hw dedicado.
Se suelen usar en el diseño de nuevas arquitecturas. Algunas arquitecturas paralelas los llevan
incorporados.

Comparación

Los monitores hardware:


- más caros.
- más difíciles de utilizar.
- no sobrecargan el sistema.
- tienen más resolución.
- son más portables.
- si el sistema falla pueden seguir midiendo y detectar la causa.
Dato que un monitor hardware no pude acceder: contenido de una posición de memoria.
Dato que un monitor software no pude acceder: cantidad de instrucciones máquina
ejecutadas.

Los monitores software:


- pueden acceder a datos de más alto nivel.
- en principio no hay límite al tipo de datos a los que pueden acceder (mayor ámbito de
medida).
- suelen ser más baratos.

TEMA 3 REPRESENTACIÓN DE RESULTADOS

Introducción

- Toma de datos  presentación de resultados.


- Para facilitar la interpretación  forma gráfica.
- La representación debe ser clara, concisa, simple y fácil de utilizar.
- Se puede utilizar todo tipo de gráficos, según los datos a representar.
8
Tipos de variables

Cualitativas: se definen por un conjunto de subclases mutuamente exclusivas que se


expresan normalmente con palabras. Pueden estar ordenadas (superordenador, miniordenador,
microordenador) o no (carga científica, de ingeniería).

Cuantitativas: sus distintos niveles se expresan numéricamente. Pueden ser de dos tipos:
. Discretas: toman valores contables (ej. número de procesadores en un sistema).
. Continuas: toman valores no contables (ej. tiempo de respuesta de una operación).

Si en el eje de abcisas (x) tenemos variables cualitativas o cuantitativas discretas, conviene


usar gráficos de barras.

Recomendaciones para la construcción de gráficos

- Minimizar el esfuerzo del lector.


- Maximizar la información.
- Evitar la información innecesaria.
- Seguir las pautas habituales.
- Evitar ambigüedad: identificar los datos y no mezclar muchos datos en la misma gráfica.

No se deben poner curvas de diferentes unidades y con diferentes escalas en un mismo


gráfico.
La información debe evitar explicaciones.

Diagramas de Gantt

En un sistema se busca la utilización máxima de los recursos.


Para que esté bien aprovechado, los recursos se deben utilizar a la vez.
Los diagramas de Gantt permiten ver la utilización de los recursos y el solapamiento en su
utilización.

Es un tipo de gráficas que es interesante para el análisis del funcionamiento de un sistema


informático. En general se utiliza para visualizar temporalmente los valores que toman un
grupo de variables booleanas.

CPU 60

E/S 20 20

Red 30 10 5 15

0% 20% 40% 60% 80% 100%

Gráficos de Kiviat

9
Permite caracterizar los problemas de forma rápida.
Se trata de un círculo donde los radios representan índices de prestaciones.
La intersección entre el radio y el círculo representa el 100%.

Normalmente el funcionamiento ideal tiene una forma determinada. De forma que al ver el
gráfico se identifica rápidamente lo bien o mal que está funcionando el sistema y cuales son
las partes causantes.
Normalmente se diferencian índices beneficiosos (que es bueno que tengan valores altos) de
valores perniciosos como puede ser el índice de paginación el desaprovechamiento de algún
recurso.

Gráfico de Kiviat, versión de Kent:

1º) Seleccionar un número par de variables a estudiar la mitad buenos índices (a mayor valor,
mejores prestaciones) y la otra mitad malos índices (mejores prestaciones a menor valor).
2º) Se subdivide el círculo en tantos sectores como variables hay que representar.
3º) Se numeran los radios en sentido horario.
4º) Se asocian los buenos índices a los radios impares y los malos a los pares.
CPU ocupada
CPU supervisor Solo CPU

CPU y cualquier canal


CPU usuario

Al menos un canal activo sin solape con CPU


CPU en espera

Al menos un canal activo

En un sistema ideal, todos los índices buenos tendrían valores altos y los malos, valores muy
bajos. El gráfico de Kiviat de ese sistema, tendría forma de estrella.

TEMA 4 CARACTERIZACIÓN DE LA CARGA

Introducción

Carga: demandas que realizan los usuarios de un sistema en un intervalo de tiempo.


- No se puede hablar de prestaciones sin hablar de la carga con la que se han tomado las
medidas.
- Para poder comparar diferentes sistemas y configuraciones, será imprescindible aplicarles
una carga.

Necesidad de caracterizar la carga:


- Tarea difícil debido a qué cambia con el tiempo
10
 Realimentación interna: sistemas adaptativos.
 Realimentación externa: introducidas por los usuarios.

Caracterización de la carga

Descripción cuantitativa según unos parámetros.


Los parámetros que describe la carga se seleccionan según los objetivos de la caracterización.
Objetivos  técnica de estudio e instrumentos de medida de parámetros para describir la
carga.

Ejemplo de parámetros para describir la carga:

- tiempo de CPU.
- operaciones de E/S.
- espacio en memoria requerido
- ficheros en disco.
- mezcla de instrucciones.
- tiempo medido de CPU entre operaciones de E/S.
- número de usuarios

Carga de prueba

Carga que se procesa durante el periodo de medida.


Para hacer estudios de comparación o de sintonización necesitaremos reproducir la misma
carga. Reproducir la misma carga es difícil aunque se ejecuten los mismos programas.

Se utilizan modelos de carga:


- Más difíciles de repetir.
- A veces la carga que se modela no existe (predicciones).

Características de los modelos de carga:

- Repetible o reproducible.
- Compacto, para reducir el tiempo de ejecución.
- Compatible con el tipo de estudio y con máquinas diferentes si es un modelo de carga
ejecutable.
- Permite evitar problemas de privacidad o seguridad.
- Si no es carga real, deben ser representativos.
- Flexible, fácil de modificar para ajustarlo a variaciones de la carga a la que representa.
- Independiente del sistema; que la representatividad del modelo no varíe al cambiarlo de
sistema.

Sesión de medida

Intervalo de tiempo en el que se forman las medidas. No tiene porque ser continuo.
Normalmente habrá varias sesiones de medida. En general unas medidas estarán destinadas a
datos para ajustar la carga de prueba y otras serán las medidas realmente aplicando la carga de
prueba.
Utilizando varias sesiones de medida se intenta evitar que particularidades en una medida se
tomen como un comportamiento general.

11
Representatividad de un modelo de carga

Es la precisión con que un modelo representa una carga. La carga puede representarse a
distintos niveles: nivel físico, nivel virtual, nivel funcional.
El modelo deberá ser representativo atendiendo al nivel al que está asignado.

Representatividad a nivel físico

- Los modelo se caracterizan por el consumo de recursos físicos.


- Orientado al consumo de recursos físicos.
- Muy dependiente del sistema.
- Datos para el modelo fáciles de conseguir (S.O., monitores, hardware).
Las mayores aplicaciones de estos modelos son:
- estudio de sintonización.
- planificación de capacidad residual.
- diseño.
Representatividad a nivel virtual

- Consumos de recursos lógicos.


- Menor dependencia del sistema que en el modelo anterior.
- Más cercanos al usuario.
- Parámetros más difíciles de obtener.
- Se utilizan en estudios de ampliación.
- Ej. de componentes: sentencias de lenguaje de alto nivel, número de ficheros utilizados,
ordenes interactivas, espacio de memoria virtual.

Representatividad a nivel funcional

- Se trata de modelos que realizan las mismas aplicaciones que la carga a la que representan.
- Son bastante independientes del sistema.
- Es difícil diseñarlo de forma sistemática. A veces son bastante subjetivos.
- Aplicaciones: selección de equipos, planificación de la capacidad.

Cargas de test

- Real
- Sintética: utilizan extractos de carga real. Natural o híbrida.
- Artificial: no utilizan extractos de carga real
Ejecutables: Mix, Kernels, Programas sintéticos, Benchmarks
No ejecutables: Distribuciones, Modelos de colas

Carga de test real

- Barata
- Representativa
- Las sesiones de medida se deben seleccionar para que sean representativas del
funcionamiento normal o de la situación de estudio.
- La situación que se quiere reproducir puede no darse en el instante deseado.

12
- Poco reproducible porque es difícil que volvamos a crear la misma situación a voluntad.
- Poco flexible. (No se puede modificar la carga).
- Puede haber problemas de confidencialidad.
- No se puede usar en problemas de selección.

Se trata de la carga que realmente se está ejecutando en un sistema con todos sus usuarios y
sus aplicaciones. Lo único que se tiene que seleccionar es durante cuánto tiempo se está
midiendo.

Carga de test sintéticas naturales

- Subconjunto de programas extraídos de la carga real.


- Se suelen usar en estudios de ampliación, reposición y selección.
- Dificultades en la utilización de carga sintética:
Prioridades de ejecución
Parámetros diferentes en las monitorizaciones
Parámetros o ampliaciones de sistemas operativos y programas como compiladores

También se les llama benchmarks, aunque normalmente se llama benchmark a cualquier


carga de test. Son programas extraídos de la carga real pero no es carga real porque los
usuarios no los están utilizando para realizar trabajo útil.

Cargas de test sintéticas híbridas

- Son una mezcla de programas extraídos de la carga real y de carga artificial.


- Permiten modelar parte de carga existente y parte inexistente (ej. ampliaciones de carga,
programas confidenciales).

Un ejemplo de esta situación puede ser que se estudia la adquisición de un nuevo software
pero se quiere preveer cómo responderá el sistema, el cual ya se está utilizando para una serie
de tareas.

Cargas artificiales

- Pueden servir para cargar el sistema real o modelos de sistemas.


- No utilizan componentes de la carga real.

Se les llaman artificiales porque están construidas para ser modelos de carga. No son
extracciones de la carga real. Hay carga artificial que es ejecutable, es decir que son
programas.

MIX (mezcla) de instrucciones

Se trata de medir la frecuencia de aparición de las diferentes instrucciones. Así pues hacer un
modelo representativo será hacer una secuencia de instrucciones en las que la proporción y
frecuencia de aparición sean las mismas.
El problema de esta técnica es que es difícil aplicarla de forma que solo evaluemos el
procesador y no otros aspectos como la gestión de memoria. Otro problema es que la
comparación sólo sería válida para procesadores con el mismo juego de instrucciones.

MIX de instrucciones

13
- Las frecuencias dependen de la carga.
- Los tiempos dependen del procesador.
- El sumatorio de la frecuencia por la carga dará el tiempo del MIX.
- El en sumatorio según el tipo de instrucción y carga se pueden dar pesos.
- Se usaron para comparar procesadores.
- Son muy dependientes del sistema:
gestión de memoria
secuenciamiento de las instrucciones
manejo de direcciones

MIX de sentencias

- Compuesto por sentencias de lenguajes de alto nivel.


- Son más independientes del sistema pero muy dependientes del compilador.
- La frecuencia de aparición de las sentencias se puede medir:
a) Estáticamente: medir la frecuencia de aparición en los listados de los programas.
b) Dinámicamente: frecuencia con la que realmente se están ejecutando las sentencias.
- La forma dinámica es más fiable pero más costosa.

En caso de utilizarlos habría que controlar dos cosas: el grado de optimización del compilador
y el tipo de librerías que se utilizan.
El problema de la medición estática es que puede haber partes de un software que sean
importantes en talla pero que se ejecuten pocas veces.
La medición dinámica es más complicada porque hay que conocer las partes del programa
que más se utilizan utilizando el software con diferentes datos para no representar un
comportamiento muy particular.

Kernels (núcleo)

- Fragmento de un programa que representa su parte más característica.


- Son programas cerrados que tienen un consumo de recursos conocido.
- Ej. función de Ackermann, Sieve, inversión de matrices, programas de ordenación.
- Se seleccionan según su similitud con los programas de la carga real.
Hay que tener una precaución al utilizarlos. Como son una parte de una aplicación, puede que
quepan enteros en una cache, con lo que los resultados pueden ser muy buenos, pero si se
probase la aplicación entera serían completamente diferentes.

Programas sintéticos

- No realizan trabajo útil. Sólo consumen recursos.


- La cantidad de recursos consumidos se fija con parámetros de control:
for i:=1 to N1 do
“Consume CPU”
for i:=1 to N2 do
“Consume E/S”
- Hay parámetros de corrección y calibrado para corregir el consumo que una parte del
programa introduce en otra.

Secuencias conversacionales

- Para cargas transaccionales o conversacionales se utilizan ordenadores que simulan las


14
peticiones.
- Se suele utilizar el propio sistema a medir para simular esa carga.
- En una carga conversacional se suele hacer un guión que representa el comportamiento de
un usuario.
Ej. de guión:
1- Conexión al sistema
2- Editar un fichero y añadir líneas
3- Compilar
4- Editar
5- Compilar
6- Ejecutar

Tendríamos dos sistemas conectados. Uno generaría las peticiones como si fuesen los
usuarios. El otro sería el sistema bajo estudio y que se estaría monitorizando para tomar las
medidas.

Benchmarks

- Son programas construidos con alguna de las técnicas anteriores que producen una carga
genérica.
- Se utilizan para la comparación entre ordenadores.
- No representan una carga específica.

La ventaja de estas cargas de prueba es que se suele tomar como una carga de prueba
estandar. Los fabricantes y vendedores suelen apoyar su producto con resultados al aplicar
alguno de estos benchmarks.
El gran inconveniente es que estas cargas de prueba pueden ser muy poco representativas de
nuestra carga.

Cargas artificiales no ejecutables

- Suelen basarse en medidas o procedimientos estadísticos que se utilizan en modelos basados


en redes de colas.
- Se resuelven mediante simulaciones y mediante modelos analíticos.
Por ejemplo en un modelo de redes de colas, la carga se caracterizará con datos como las
tasas de llegadas, tiempos de utilización de cada recurso, qué recursos necesita cada cliente y
cuántas veces lo visita, ....

Implementación

- Especificación: viene marcada por los objetivos del estudio de prestaciones. La


especificación dará el nivel de detalle de los componentes de la carga de test.
- Construcción: tendrá una parte de extracción de datos de la carga a representar y otra parte
de diseño en la que realmente se construye la carga de prueba.
- Validación: debe comprobar la representatividad de la carga de prueba y su validez para los
objetivos iniciales. Al realizar la carga de prueba debemos pensar de qué forma podemos
comprobar su es útil para nuestro estudio o no.

Fase de especificaciones

- Previsión del uso del modelo.


- Sesión de medida.

15
- Nivel de modelización.
- Componente básico de carga. La unidad de trabajo más pequeña que es considerada.
- Parámetros a utilizar. (Según el nivel de detalle y según su disponibilidad).
- Criterio para evaluar su representatividad.

Construcción

- Análisis de los parámetros. (Medidas sobre el sistema).


- Extracción de los valores representativos. De la cantidad de valores extraídos en el punto
anterior, hacer una selección.
Mediante técnicas estadísticas
Algoritmos de agrupamiento
Modelos markovianos
- Asignación de valores a los componentes del modelo. De valores representativos a
componentes ejecutables. El número de componentes aumenta la representatividad y
disminuye la compacidad.
- Reconstrucción de mezclas de componentes significativos. Reproducir situaciones que se
producen en la carga real.

Muestreo de distribuciones de cada parámetro

- Se calcula la función de distribución de cada parámetro que se haya medido.


- Se generan los componentes de la carga de test, generando una variable aleatoria que sigue
cada una de las distribuciones.

Este método de extracción de valores representativos es sencillo, en cambio presenta el


inconveniente de perder la relación que hay entre los parámetros. Los diferentes parámetros
los trata como distribuciones independientes pero esto es falso y se pueden generar modelos
de carga poco representativos.

Muestreo de los componentes de la carga real

- Se muestrea la carga real y los parámetros de los componentes muestreados se incluyen en


el modelo de carga.
- Un inconveniente es que la probabilidad de ser muestreado es proporcional al tiempo de
ejecución.
- Se puede corregir tomando una muestra cada n componentes ejecutados.

Esta es una forma sencilla de decidir los componentes que estarán en el modelo de carga de
prueba. Para que sea representativo debe haber bastantes muestras.
Los componentes del modelo se pueden construir con métodos artificiales.

Métodos de agrupamiento

- Agrupar las muestras según criterios de similitud para formar los componentes básicos de la
carga.
- Se basan en las distancias entre los elementos.
- Una nube de puntos la convertimos en un número de puntos donde cada uno de ellos
representa un grupo de muestras.
- Un paso previo a estos algoritmos consiste en normalizar los parámetros que caracterizan
cada punto de la nube:
 A partir de la media y la desviación típica:
16
p’ik = (pik - mk)/k i = 1...m (número de valores), k = 1...n (número de parámetros).

Media del parámetro Desviación típica


m m

x x
n

x
2 2
ik ik


ik i 1 i 1
m 
i 1  
k
n m  1 m(m  1)
k

 Normalización entre 0 y 1, se realiza para que con la misma escala se vean las
distancias en cada uno de los parámetros.
p’ik = (pik - min(pk)) / (max(pk) - min(pk))
 A partir de una ponderación:
p’ik = pik * wk
- Permite destacar un parámetro. Se puede combinar con las anteriores.

Algoritmos de agrupamiento jerárquicos

- En cada paso agrupan los dos componentes que están más cerca entre sí.
- Se calcula la distancia de cada punto a todos los demás.
- Un problema es que al fundir dos puntos, uno de ellos puede representar un gran número de
ellos y debería tener más peso en la fusión.

Fusión de puntos
2
- Encadenamiento simple
dc,(a,b) = min (dc,a, dc,b)
- Encadenamiento completo
dc,(a,b) = max (dc,a, dc,b)

Algoritmo del árbol de expansión mínimo

(algoritmo jerárquico):
1- Obtener la matriz de distancias.
2- Determinar la distancia mínima.
3- Fundir los elementos de distancia mínima, calcular la nueva distancia al resto de puntos.
4- Generar la nueva matriz de distancias.
5- Volver hasta 2 hasta que:
- Sólo haya un grupo.
- Haya un número de grupos determinado.
- La distancia de agrupamientos sea superior a un valor.

Métodos de agrupamiento no jerárquicos

- El espacio inicial se divide en k clases.


- Iterativamente se va mejorando la asignación a esas clases.
- Termina cuando no hay componentes que cambian de grupo.
- Mejorar el índice:
k m n
   (a ik  y ck ) x X
2

ic
c 1 i 1 k 1
1
a
yck = mc ic
ik
yck es el centro de masas de un grupo:
xic variable booleana. 1 si ai pertenece a C, 0 si no.
17
Los métodos no jerárquicos buscan minimizar la suma de distancias al centro de masas:
SUMc SUMm SUMn (pik-yck)2*xic
c clusters, m muestras, n parámetros. yck es el centro de masas y x es cierto o false según el
elemento pertenezca a la clase o no.

Algoritmo de las nubes dinámicas

Algoritmo de agrupamiento no jerárquico.


1- Se fijan k puntos de forma aleatoria, que representan los centros iniciales.
2- Cada punto se asigna al centro que esté más próximo.
3- Se recalculan los centros de masas de los nuevos grupos.
4- Ir a 2 hasta obtener una clasificación estable.
5- Se repite todo el procedimiento con nuevos centros al azar.
6- Se usa la intersección de las clasificaciones obtenidas.

Esquema global

Fases en la construcción de un modelo de carga

Fase de especificación

Fase de construcción

Fase de validación

Fase de especificación

- Uso previsto del modelo


- Sesión de medida
- Nivel de modelización
- Componente básico de la carga
- Parámetros a utilizar
- Criterio para evaluar la representatividad

Fase de construcción

- Análisis de los parámetros


- Extracción de valores representativos
- Asignación de valores a los componentes del modelo
- Reconstrucción de mezclas de componentes significativos

Fase de validación

- Ejecución del modelo


- Aplicación del criterio de representatividad
{ Modelo listo para el uso

18
- Es representativo {
{ Modificación de parámetros o mezclas en el modelo

TEMA 5 TECNICAS ANALITICAS

Introducción

- Mediante la teoría de colas se intenta determinar el tiempo que los trabajos pasan en las
colas de los recursos.
- Red de colas: servidores y clientes:
Los servidores son los recursos
Los clientes son los usuarios o los trabajos
- El análisis operacional intenta deducir los índices de prestaciones a partir de parámetros
cuantificables en el sistema y de relaciones entres esos parámetros.
- Las relaciones entre ellos son las leyes operacionales (verificables mediante mediciones).

Estación de servicio

Llegadas (A) Terminaciones (C)

Cola Servidor

Una red de colas de espera será un conjunto de estaciones como ésta donde las salidas de
unas estaciones están conectadas a las entradas de otras.
Cuando llega un cliente, pasará a servirse en la estación si está desocupada o se añadirá a la
cola en caso contrario.
En el caso más simple esta estación la podríamos caracterizar con dos parámetros: la tasa de
llegadas de clientes y el tiempo que cada cliente necesita para servirse.

Definiciones

- Intensidad de carga, tasa de llegada de los clientes.


- Demanda de servicio, promedio del tiempo de recurso que necesita cada petición.
- Utilización, proporción de tiempo que el servidor está ocupado.
- Tiempo de residencia, tiempo que un cliente pasa en el servidor: cola + servicio.
- Longitud de la cola, número medio de clientes en la estación.
- Productividad, tasa de salidad de clientes.

Supongamos el ejemplo anterior con una tasa de llegadas S=0’5 clientes/sg y una demanda de
servicio D=1’25.
La utilización sería U=B/T = (C*S)/T, como A=C por la ley del equilibrio de flujo y
0’5 = A/T, U = (0’5*T*1’25)/T = 0’625

Variables operacionales básicas

19
Son las que se pueden medir directamente sobre el sistema durante un tiempo de observación
finito.
- T (time), intervalo de observación.
- A (arrivals), peticiones durante T.
- C (completions), peticiones servidas durante T.
- B (busy), tiempo en el que el servidor está ocupado durante T.

Variables operacionales deducidas

- , tasa de llegada.  = A/T


- X, productividad. X = C/T
- U, utilización. U= B/T
- S, tiempo medio de servicio. S= B/C

U = X * S (ley operacional de la utilización)


Por el equilibrio de flujo, A=C, =X, U=*S. Esto se debe cumplir para periodos de T muy
grandes.

Redes de colas

- Con algunos parámetros como llegada de demandas y demanda de servicio de cada cliente a
cada estación podremos deducir el funcionamiento (tiempo de respuesta, utilizaciones, ...).
- Las redes de colas pueden ser abiertas o cerradas, pero como las tasas de llegada y de salida
son iguales, se pueden tratar de la misma forma.

Supuestos

- Todos los índices de los que se parte son valores medios.


- Una petición está únicamente en un servidor.
- El tiempo que una petición está en una estación no depende del tamaño de las colas en otras
estaciones. (Supuesto del tiempo de servicio homogéneo).
- El número de peticiones que llegan a una estación es independiente del tamaño de las colas
en otras estaciones. (Supuesto de llegadas homogéneo).
- Las redes que cumplen estos supuestos se llaman redes de colas separadas u homogéneas.

Variables operacionales básicas en redes

Durante un periodo de medida T se han obtenido las siguientes medidas para cada estación i:
- Ai
- Bi
- Cik trabajos que piden servicio en la estación k inmediatamente después de servirse en i.
- A0k trabajos cuya primera petición es a estación i.
- Ci0 trabajos cuya última petición es a estación i.
- Ci suma de todos los Cik
0 significará el exterior del modelo, es decir, en los sistemas abiertos será la fuente de clientes
y donde van a parar los clientes que han terminado trabajos.

Variables operacionales deducidas

- Ui = Bi / T
- Si = Bi / Ci
20
- Xi = Ci / T
- qik = Cik / Ci representa los trabajos que después de servirse en el recurso i piden el
servidor j (representa una probabilidad o una frecuencia de encaminamiento).

Leyes operacionales

a) Ley de la utilización:
Bi / T = (Ci / T)*(Bi / Ci)  Ui = Xi * Si
La utilización es igual al flujo de clientes por el servicio medio que pide cada uno.

b) Ley de Little:
W, tiempo acumulado en el sistema. Peticiones * unidad de tiempo.
N = W / T, número medio de peticiones en el sistema.
R = W / C, tiempo medio de residencia en el sistema por petición.
W / T = (C / T)*(W / C)  N = X * R, el número medio de peticiones en el
sistema
es la productividad por el tiempo medio de residencia de cada petición en ese sistema.
- La ley de Little se aplica a diferentes niveles. Cada nivel tendrá sus parámetros.

Ejemplo

- 10 terminales.
- 7.5 terminales trabajando por término medio.
- Productividad del sistema 0.5 interacciones/sg.
- Disco del nivel 1:
Sirve 40 peticiones/Sg.
Tiempo de servicio por petición 0.0225Sg.
Número medio de peticiones presentes 4.
a) Número medio de peticiones recibiendo servicio en el disco 1:
U = S * X  40 * 0.025 = 0.9, que también será el número medio de peticiones sirviéndose.
b) Tiempo medio de residencia de una petición en el disco 1:
R = N / X  4 / 40 = 0.1 Sg.
c) Tiempo medio de espera en cola de una petición en el disco 1:
0.1 = t. cola + 0.0225  t. cola = 0.1 - 0.0225 = 0.0775 Sg.
d) Número medio de peticiones en cola de espera del disco 1:
Peticiones en cola + peticiones en servicio = 4 Hay una media de 0.9 peticiones en servicio
Numero medio de peticiones en cola = 4 - 0.9 = 3.1
e) Tiempo medio de respuesta percibido por el usuario:
R = N / X = 7.5 / 0.5 = 15 Sg. En este caso N = 7.5 representa la media de usuarios trabajando.
f) Tiempo de reflexión de los usuarios (Z):
Aplicamos Little a todo el sistema. La población será el número total de usuarios (10 terminales).
R = (N / X)-Z  Z = (N / X)-R = (10 / 0.5) - 15 = 5 Sg.

Leyes operacionales

c) Ley del flujo forzado:


- Relaciona la productividad del sistema con las productividades de los recursos individuales.
- Todas las productividades deben ser proporcionales en todas las partes del sistema.
- Razón de visita de un recurso: relación entre el número de terminaciones en un recurso y las
terminaciones en el sistema.
- Se puede ver como el número de peticiones de un recurso que hace una interacción del sistema.
Vk = Ck / C, recurso k. C son las interacciones a nivel de sistema.  Xk = Vk * X
Demanda de servicio a un recurso: Dk = Vk * Sk

21
La ley del flujo forzado relaciona los parámetros de todas las partes del sistema.
- Xk = Ck / T = (Ck / C)*(C / T) = X * Vk
- Xk = X * Vk, es una relación entre la productividad total y la de un recurso.

Ejemplo:

- En un sistema batch cada trabajo requiere una media de 6 accesos a un disco específico.
- Ese disco atiende 12 peticiones/sg.
- ¿La productividad del sistema?
X = Xk / Vk = 12 / 6 = 2 trabajo / sg.
- Si otro disco sirve 18 peticiones/Sg. ¿Cuántos accesos requiere un trabajo a ese disco?
Vk = Xk / X = 18 / 2 = 9 accesos

Supuesto del equilibrio de flujo

- Para que un sistema funcione las llegadas deben ser igual a las salidas: A = C
- Por tanto podemos decir que las tasas de llegada y salida también son iguales:  = X

TEMA 6 CUELLOS DE BOTELLA

Introducción

- Las prestaciones no son las esperadas.


- Uno o varios servidores no son capaces de abastecer las peticiones que les llegan.
- Su utilización es del 100%.
- Las peticiones que les llegan pierden tiempo esperando.
- Mejoras en el sistema que no afectan al recurso responsable del cuello de botella no
mejorarán las prestaciones.

Cuellos de botella

- Al tratar un CB pueden aparecer otros. Habrá que ir tratándolos hasta que el sistema quede
equilibrado.
- Los CB no dependen únicamente de la configuración. Son función también de la carga.
- Hay CB temporales que aparecen un corto periodo de tiempo respecto a la sesión de medida.
- Los CB temporales es difícil eliminarlos analizando, en diferido, los datos registrados
anteriormente.
- Para los CB temporales se recomiendan métodos de monitorización y toma de decisiones en
tiempo real (on-line).

Terapias

- Al detectar un CB hay que evaluar las consecuencias y coste de las posibles terapias.
- Modificaciones HW. Reemplazar o ampliar componentes HW. Terapias de reposición
(upgrading).
- Modificaciones que tienen efecto en la organización del sistema. Terapias de sintonización
(tuning).
- Las sintonizaciones suelen ser más baratas.

22
- En las reposiciones deberíamos tener alguna garantía sobre el resultado  utilización de
modelos simulados o analíticos.

Los modelos analíticos permiten por un lado detectar los Cbs y por otro predecir las mejoras
que se obtendrían con diferentes soluciones.

Límites asintóticos

- Método analítico que permite ver los límites de productividad y tiempo de respuesta del
sistema en función de la intensidad de la carga.
- Recomendable para evaluar diferentes configuraciones o posibles reposiciones.
- Se basan en la teoría de redes de colas.
- Nos limitaremos a una sola clase de clientes.
- Suponemos que la demanda de servicio de un cliente a una estación no depende de las
demandas a esa estación ni a otras.
Se busca un límite superior e inferior de las prestaciones que obtendrá el sistema. Al aplicar
una terapia veremos como se modifican estos límites y por tanto qué impacto pueden tener las
mejoras que vamos a aplicar.

Parámetros

- K, número de estaciones de servicio.


- Dmax, la mayor de las demandas de servicio de entre las diferentes estaciones.
- D, la suma de las demandas de servicio en las estaciones. (suma de las demandas de un
cliente a todas las estaciones).
- Z, tiempo medio de pensar (sistemas interactivos).
El dispositivo que tenga la máxima demanda será el candidato a ser el CB. Será el que antes
llegará a una utilización del 100% (saturación).
Límites asintóticos en cargas transaccionales

a) Productividad:
- El límite de la productividad indica la tasa máxima de llegada de clientes que el
sistema puede procesar satisfactoriamente. A partir de ese punto el sistema está
saturado.
- Para la estación k, Uk = XkSk (Ley de la utilización).
- Xk = Dk
- Si una Uk = 1  no podremos procesar una carga mayor.
- La estación k, con Uk = 1 será el CB.
- X se limita a la  que satura alguna estación.
- Umax() = Dmax  1, si Umax() = 1  sat = 1 / Dmax
Los parámetros que utilizaremos para evaluar las prestaciones serán la productividad y el
tiempo de respuesta.
La tasa de llegadas que satura el sistema es 1 / Dmax
Esta tasa de llegadas dará la productividad máxima alcanzable con una determinada carga,
recursos y configuración.

b) Tiempo de respuesta:
- El caso más favorable, sólo hay un trabajo en el sistema. El tiempo de respuesta es la
suma de las demandas de servicio D.
- Pero caso (cuando se sobrepasa la saturación), a partir de este momento no hay
límite en el tiempo de respuesta.
23
Límites asintóticos en cargas interactivas

a) Productividad:
- Uk(N) = X(N) Dk  1, los recursos dan una utilización para un número de clientes.
- X(N)  1 / Dmax, (límite para carga pesada).
- Si sólo hay un cliente. La productividad será 1 /(D+Z) donde D es la suma de las
demandas de servicio en las diferentes estaciones. Con N clientes, N / (D+Z).
- Los siguientes clientes que van llegando esperan (N-1) D unidades en las colas.
- La productividad será N / (ND+Z), se procesan N clientes con tiempo (ND+Z).
- (N / (ND+Z))  X(N)  min(1/Dmax, N / (D+Z)).
- N * /(D+Z) = 1 / Dmax  N* = (D+Z) / Dmax, N* punto de saturación.
(N/(ND+Z)  X(N)  Caso en el que todos los clientes piden el mismo recurso a la vez.
X(N)  N/(D+Z)  Es el caso más óptimo en el que todas las peticiones a los recursos se
solapan completamente. No se hace ninguna cola.
X(N)  1/Dmax  Un recurso se ha saturado. La productividad no podrá crecer más. A partir
de esta carga empiezan a producirse colas (al menos en el recurso saturado).

b) Tiempo de respuesta:
- Ley de Little N = XR:
(N/(ND+Z)  (N/(R(N)+Z))  min(1/Dmax, N/(D+Z))
- max (Dmax, (D+Z)/N)  ((R(N)+Z)/N)  ((ND+Z)/N)
- max (D, NDmax-Z)  R(N)  ND
- Con Z=0 tenemos los límites para cargas Batch.
- D  R(N)  Si no hubiese colas.
- (NDmax-Z)  R(N)  Si solamente limitase la velocidad el recurso cuello de botella
- R(N)  ND  Se sirven con anterioridad todos los demás clientes.
TEMA 7 SELECCION Y CONFIGURACION DE
COMPUTADORES. BENCHMARKING

Benchmark

- Se utiliza como sinónimo de carga de test (kernels, carga sintética, carga sintética natural...)
- Programas utilizados para cargar el sistema y medir el rendimiento del sistema o de partes
de éste.
- Benchmarking: comparar sistemas mediante la obtención de medidas.
- Aplicaciones muy variadas:
- Comparar sistemas.
- Problemas de sintonización.
- Planificación de capacidad.
- Comparación de compiladores.

Pasos en el benchmarking

- Objetivos de las mediciones.


- Selección de los componentes apropiados para cubrir la finalidad.
- Comprobar los aspectos del sistema que se va a estudiar y que pueden influir en las
prestaciones.
- Toda la información anterior, así como la fecha de aplicación debe presentarse en los
resultados.
24
- Análisis de los resultados llegando a comprender las razones de los índices obtenidos.
Aspectos que pueden influir de forma no intencionada en los resultados: versiones de las
librerías, opciones de los compiladores, hardware específico, ...

Utilización de los benchmarks

- Para la adquisición de equipos. El benchmark deberá reflejar las necesidades del comprador.
- Sintonización. Se deben conocer muy bien los bench. para conocer las causas de los
diferentes resultados.
- Planificación de la capacidad. Se va aumentado la carga para conocer la capacidad que
queda disponible.
- Comparación de compiladores.
- Diseño de sistemas informáticos o procesadores. Los bench. se suelen tomar como entrada
para simuladores.

Factores que influyen en el benchmarking

- Tipo y versión del sistema operativo.


- Compilador. Versión y directivas de compilación.
- Lenguajes de programación.
- Librerías. Pueden ir más rápido con menos precisión. IEEE dicta un estándar para las
librerías.
- Antememoria (memoria caché).
- Verificación de ejecución correcta del bench. (los resultados son los apropiados).
Es importante comprobar que el benchmark realiza alguna tarea y que se ha resulto bien.

Errores comunes

- Representar en la carga de test sólo comportamientos medios. Si se representan valores


medios se pueden dar sincronizaciones en los consumos que no son reales.
- Controlar de manera inadecuada el nivel de carga. Modificamos ciertos parámetros
esperando que los resultados no cambien.
- Ignorar los efectos de la caché. Las prestaciones de las cachés son muy sensibles al orden en
el que se hace las peticiones. En los estudios de caracterización de la carga se suele perder
información relativa al orden en que se producen los consumos.
- Ignorar la sobrecarga introducida en la monitorización.
- No validar las medidas. Errores en la medida suelen pasar inadvertidos.
- No asegurar las mismas condiciones iniciales. Por ejemplo, ejecutar dos veces el
benchmark.
- No medir las prestaciones del transitorio. Se suelen tomar las medidas una vez el sistema
funciona de forma estable. A veces interesa medir el coste de las operaciones de inicio.
- Almacenar muchos datos pero realizar poco análisis. Normalmente la toma de datos y la
experimentación ocupan la mayor parte del tiempo del proyecto. Se debe planificar para
que el análisis sea el adecuado.

Benchmarking games

- Falsear intencionadamente los resultados:


- Utilizar configuraciones diferentes para ejecutar la misma carga en dos sistemas.
- Compiladores diseñados para optimizar la carga.
- Utilizar una secuencia de trabajos sincronizada.
25
- Selección de la carga de forma parcial (sin verificar su representatividad de la carga
real).
- Utilizar benchmarks muy pequeños. Caben en la caché y no enseñan problemas con
la memoria.
- Traducciones manuales de los benchmarks para mejorar las prestaciones.

Descripción de algunos benchmarks

- Linpack. Argone National Laboratory. Jack Dongarra 1976. Usados para sistemas
científicos y de ingeniería. Resuelven sistemas densos de ecuaciones lineales. Muy
vectorizable y dependiente de las operaciones en coma flotante y de las librerías de álgebra.
- BYTE, PCW, EDN. Propuestos por estas publicaciones. Suelen ser pequeños. Las
operaciones que realizan suelen ser variadas:
- Función de Ackermann: programa recursivo. Sirve para evaluar la facilidad de los lenguajes en las
llamadas a subprogramas.
- Sieve: calcula números primos. Se usa para comparar procesadores, pc y lenguajes de alto nivel.
- Dhrystone: R.P. Weicker Siemens-Nixdorf Information System. No tiene instrucciones en
coma flotante ni llamadas al sistema, gran cantidad de instrucciones de manejo de tiras,
pocos bucles (tamaño de caché muy importante). Unidades en Dhrystone/Sg.
- Whetstone: H.J. Curnow, B.A. Wichmann National Physical Laboratory (G.B.) 1979.
Actualmente en Fortran. Compuesto por módulos con diferentes tipos de consumos. El peso
de los módulos se puede ajustar fijando los límites de los bucles. Resultados en
MegaWhetstones/Sg. Usa muchas operaciones en coma flotante, muy dependiente de
librerías matemáticas, pequeño tamaño, pocas variables locales.
- SSBA1.21E: paquete para la evaluación de sistemas UNIX. Diseñado por la asociación
francesa de usuarios de UNIX. Compuesto por 12 programas. Testean los siguientes
aspectos:
- Potencia CPU.
- Implementación del sistema en general y del sistema de ficheros.
- Compiladores de C y Fortran.
- Manejo de memoria y rendimiento de las cachés.
- E/S de disco y rendimiento del controlador.
- Rendimiento multiusuario frente a tareas significativas.
- SPEC (Systems Performance Evaluation Cooperative). Hecho por un grupo de marcas
comerciales, intenta ser representativo de la carga actual. Compuesto por 10 programas:
- gcc (compilador).
- Espresso (herramienta de automatización de diseño electrónico).
- Spice 2g6 (herramienta EDA).
- Docuc (programa extraído de un simulador Monte Carlo de reactores nucleares).
- NASA7 (operaciones matriciales en coma flotante).
- LI (programa de las “ocho reinas” usando LISP).
- Eqntott (representar ecuaciones lógicas en tablas de verdad).
- Matrix300 (operaciones con matrices usando rutinas de Linpack en coma flotante) muy vectorizable.
- Fpppp (benchmark de química) poco vectorizable.
- Tomcatv (programa de generación de red vectorizada) muy vectorizable.

Formas de aplicar los benchmarks

- Uno detrás de otro. Para ver cuanto tarda un ordenador en ejecutar una colección de
programas.
- Como los ladrillo en un muro. Para comprobar el comportamiento en multitarea.
- Lanzando peticiones desde otro equipo. Comprobar el funcionamiento en carga interactiva.

Resumen de cosas a comprobar

26
- Optimizaciones del compilador.
- Comprobar la talla de memoria para estar seguros de lo que se mide.
- Vigilar otros procesos que se están ejecutando.
- Comprobar el tiempo que tarda en ejecutarse y el tiempo que realmente está consumiendo
recursos.
- Asegurarse que los resultados son los esperados y con la misma precisión.
- Analizar los resultados en el ordenador actual.
Se pueden descubrir mejoras en el propio ordenador y dará una idea de las mejoras que se
pueden obtener.

MIPS

- Millones de instrucciones por segundo.


- El ordenador que se toma como referencia es el DEC VAX 11/780 (1978). A veces se le
llama VAX MIPS.
- VAX sacaba 470000 instrucciones /sg y apuradito.
Por convenio 1657 dhrystones/sg = 1 MIPS.

MFLOPS

- Millón de operaciones coma flotante /sg.


- Son operaciones realizables por hardware.
- Suelen medirse con programas que son mezclas de sumas y multiplicaciones.
En algunas ocasiones se habla de picos de megaflops mayores que la frecuencia del
procesador. En cambio ojo con estos valores pico ya que se obtienen bajo cargas muy
apropiadas a las características.

Creando benchmarks

- Tiempo de ejecución.
- Memoria.
- Utilización de kernels.
- Forma de aplicar los benchmarks.
- Portabilidad.

TEMA 8 COMPILADORES

Qué hace un compilador

- Traduce de un lenguaje de alto nivel a lenguaje máquina.


- Esta traducción debe ser lo más eficiente posible.
- En algunas partes críticas la traducción se optimiza a mano y no se utilizan compiladores.
- El resultado del compilador está encaminado a una arquitectura específica.
- El compilador intentará reorganizar el código para que sea más eficiente.
- En RISC, intentar que varios encaminamientos trabajen a partir de una mezcla de
instrucciones diferentes.
En las mejoras que introduce el compilador suele ocurrir que el tamaño del fichero aumenta
aunque la ejecución es más rápida.
27
Lenguaje intermedio

- El compilador traduce el fuente a un lenguaje parecido a ensamblador, permite manejar


variables. Tras el análisis sintáctico se traduce el programa a éste lenguaje.
- Hay instrucciones que en el fuente no aparecen y deben aparecer en este lenguaje.
- Ejemplo:
- Todas las instrucciones tienen un código de operación y 2 operandos.
- Las instrucciones tienen la forma X:=Y op Z.
- Todas las referencias a memoria son lecturas o escrituras explícitas.
- Los valores lógicos utilizados para saltos se calculan aparte.
- Los saltos son a direcciones absolutas.

Bloques básicos

- Esto facilita el análisis del código. Sabemos que todas las instrucciones en un bloque se
ejecutan una detrás de otra.
- Las flechas entre bloques forman un diagrama de flujo.
- Podemos saber las variables que se usan en cada bloque y las que se modifican.
- Nos permite concentrarnos en las interacciones entre bloques.

Identificar bloques básicos

A:: t1 := j Sabemos que cuando se entra en un bloque se


t2 :=n ejecutan todas sus instrucciones.
t3 :=t1<t2
jmp (B) t3 El resultado es un grafo dirigido. Las flechas
apuntan a los bloques a los que se puede saltar.

jmp (C) TRUE Ahora se puede hacer un análisis de los


elementos que son internos a cada bloque y los
elementos o variables que comparten.
B:: t4 :=k
t5 :=j
t6 :=t5*2
t7 :=t4+t6
k :=t7
t8 :=j
t9 :=t8*2
m :=t9
t10 :=j
t11 :=t10+1
j := t11
jmp (A) TRUE

Directed Acyclic Graph (análisis de un bloque)

- Sirve para representar los cálculos y relaciones entre variables.


- Se realiza un grafo acíclico, arriba se toman las variables de entrada, que se van uniendo con
operaciones, también se ponen líneas que indican que una operación debe realizarse antes

28
que otra.

B: t4 :=k
t5 :=j “2” j,t5,t8,t10 k,t4 “1”
t6 :=t5*2
t7 :=t4+t6
k :=t7
t8 :=j
t9 :=t8*2 t6,t9,m *
m :=t9
t10 :=j
t11 :=t10+1
j :=t11
jmp (A) TRUE t7,k t11,j

Como se puede observar en el bloque básico hay operaciones y almacenamientos temporales


repetidos. Por ejemplo t6 y t9 son lo mismo.
El arco en trazo discontinuo representa una dependencia. La variable j se debe asignar
después de haber calculado la variable m.

Análisis de flujo de datos

- Si ahora queremos optimizar el funcionamiento entre bloques, hay que mirar las variables
que cada bloque utiliza y/o modifica.
- En el bloque anterior las variables que se modifican son k,j y m. Las que toma como entrada
son k y j.
- Con esto el compilador detectará las variables que se usan con fines diferentes, las que no se
utilizan en otros bloques, y se podrá asignar de forma más eficiente los registros a las
variables.
- Otras cosas que se pueden detectar es la repetición de cálculos en diferentes bloques o
asignar cálculos a bloques más apropiados.

Bucles

- En el diagrama de flujo de datos se puede identificar bucles (incluso si en el fuente que las
genera no aparece).
- Si llegamos a identificarlos podemos encontrar expresiones que no se modifican con las
iteraciones del bucle o expresiones que evolucionan de manera previsible con las
iteraciones.
- Cómo se detecta un bucle:
- Encontrar un nodo por el que es imprescindible pasar para llegar a los otros nodos en el bucle.
(Nodo
dominante).
- Debe haber un camino de vuelta desde los nodos del bucle al nodo dominante

Generación de código objeto

- Esta parte es específica para cada procesador.


- Todo lo que no sea gestionado por el hardware deberá tenerlo en cuenta el compilador. (Hay
procesadores en los que el compilador debe preocuparse de la gestión de los recursos y hay
otros en los que no).
- En los procesadores RISC el compilador intenta optimizar la ejecución enviando
instrucciones a varias unidades.

29
Optimizaciones

- Estas optimizaciones persiguen objetivos concretos, no son excluyentes:


- Propagación de copias:
X=Y
Z=1+X
La segunda instrucción es dependiente de la primera.
X=Y
Z=1+Y
Se pueden ejecutar a la vez, son independientes.
- Desplegar las constantes:
e = 200;
j = 100;
k = e + k;
El compilador lo pondría todo como constantes. Esto se sabe analizando el flujo de datos
para cada variable.
- Eliminar código muerto:
- Se trata de código que no tiene efecto en las respuestas.
- Puede haberlo introducido el programador o el propio compilador como efecto de
otras optimizaciones.
- Dos clases:
Instrucciones que no se pueden alcanzar
Instrucciones cuyo resultado no se utiliza más tarde
- Reducción de complejidad:
Y = X**2  Y = X*X
J = K*2  J = K+K
- Rebautizar variables. Se intenta romper dependencias:
x = y*z; x0=y*z;
q = r+x+x; Quedaría q = r+x 0+x0;
x = a+b; x = a+b;
Rebautizar variables aumenta el paralelismo del código, lo cual facilita la ejecución en
procesadores RISC.
- Eliminar subexpresiones comunes:
d = c*(a+b)
c = (a+b)/2 (a+b) es común a las dos expresiones,
temp = a+b
d = c*temp
e = temp/2
- Sacar código invariante de bucles:
for (i...) {
a[i = b[i*c*d;
e = g[k;
}
Quedaría:
temp = c*d;
for (i...) {
a[i = b[i+temp
};
e = g[k;
- Simplificación de variables inducidas:
Se trata de identificar expresiones que se calculan de una forma regular en un bucle. Es muy

30
interesante en el cálculo de direcciones de un vector:
bucle
direccion = direccionbase(A) + (I-1)*tallaelementos(A)
Quedaría:
direccion = direccionbase(A) - (1*tallaelementos(A))
bucle
direccion = direccion + tallaelementos(A)

Como nos pueden cambiar el benchmark

- Escoger las mejores optimizaciones.


- Un precompilador reemplaza partes del programa por llamadas a librerías.
- Optimizaciones específicas de una arquitectura.
- El linker emplaza los subprogramas para minimizar fallos de página.
- Decisiones en tiempo de ejecución (por hardware) cambian elecciones del compilador.
- Ignorar los resultados.

TEMA 9 MEJORA DE LAS PRESTACIONES DE UN SISTEMA

Etapas en la mejora de prestaciones

 Definición de los objetivos.


 Caracterización de la carga.
 Selección de la instrumentación.
 Diseño del experimento.
 Validación.

Selección de la instrumentación de medida

 Con los objetivos se deducen parámetros que interesa medir. Deberemos seleccionar
instrumentación y comprobar que podemos acceder a esas variables.
 Mediciones sobre el hardware: interesa conocer su utilización (cuellos de botella, recursos
infrautilizados, capacidad sin utilizar).
 Mediciones sobre el hardware.
 Mediciones de la carga.

Variables sobre utilización del HW

 Parámetros típicos CPU:


1) CPU ocupada, monitores HW, SW, rutinas de contabilidad.
2) Sólo CPU, monitores HW, SW.
3) CPU ocupada en estado supervisor, monitores HW, SW.
4) CPU usuario, monitores HW, SW.
5) Ocupación de la CPU por usuario, monitores SW, rutinas de contabilidad.

Variables sobre utilización del Software

31
- Sistema operativo. Puede influir mucho en las prestaciones. La forma en que tenga
configurada la memoria es importante. Sus parámetros ajustables también son de
importancia.
- Programas de sistema y de usuario. Estos programas se suelen poder modificar si se
detectan
problemas. Interesará la utilización de CPU, E/S, llamadas al sistema. Se puede analizar por
módulos. HW, SW, rutinas de contabilidad.

Medición de la carga, rutinas de contabilidad

- Son rutinas que se ejecutan periódicamente y permiten la obtención de informes sobre la


utilización.
Estas rutinas suelen muestrear tablas del S.O. y almacenan información. Esos ficheros son
tratados periódicamente y se crean informes sobre los consumos.
Informaciones que suelen facilitar:
 Actividad de los componentes durante periodos.
 Existencia de picos de carga.
 Operaciones E/S realizadas por cada programa.
 Carga introducida por los dispositivos batch e interactivos.
 Paginación causada por los usuarios.

Ejemplo 1 discos y canales

 Sistema batch. Memoria en 7 particiones (5 para trabajos normales, 1 sistema, 1 trabajos


prioritarios).
 Se quiere revisar las utilizaciones para posibles reposiciones.
 Se midieron sesiones de 3 horas cuando había descensos en la productividad y cuando
había carga alta (gráficos de Gantt y Kiviat).
- Se comprueba un desequilibrio en los canales 3 y 4.
- Disco 4 muy utilizado. Tiene bibliotecas del sistema.
 Sintonizaciones:
- Replanteamiento de módulos residentes.
- Reubicación de archivos en el disco 4.
- Equilibrio entre los canales 3 y 4.
 Mejora obtenida: aumentar la productividad un 10% al reducir tiempos de espera en D4,
C3 y C4 y disminuir la CPU para el sistema.

TEMA 10 PROCESADORES RISC Y CISC

Introducción

 RISC: Reduced Instruction Set Computer.


 CISC: Complex Instruction Set Computer.
 Ambas son formas de diseñar procesadores.
 Las arquitecturas definen el juego de instrucciones que ofrece el procesador.
 Hoy muchos procesadores son una mezcla de ambos tipos de diseño.
 Tendencia CISC  instrucciones que resuelven operaciones complejas próximas a los
lenguajes de alto nivel.

32
 Tendencia RISC  instrucciones sencillas pero con la esperanza de poderlas manipular
más fácilmente para optimizar la ejecución.

Direccionamiento de memoria

 Los programadores necesitan utilizar una abstracción de memoria.


 Se hace necesario funciones para calcular la posición física de las referencias (cálculo de
direcciones) y hardware para facilitar estas operaciones (modo de direccionamiento).
 CISC: muchos modos de direccionamiento (para ayudar a los programadores).
 RISC: intentan disminuir la cantidad y complejidad ya que esto complica mucho el juego
de instrucciones.

Microcódigo

 Si hay muchas operaciones y algunas pueden usar direccionamientos muy variados 


decodificador de instrucciones y unidad de control muy complicados.
 Además, la cantidad de accesos a memoria por cada instrucción puede ser variable.
 Para reducir la complejidad de diseño hardware de estas unidades  microcódigo.
 Las partes de control hardware se sustituyeron por conjuntos de microinstrucciones y
secuenciadores.
Microcódigo es la forma que se encontró para desarrollar instrucciones complejas. Codifica
las secuencias de control que permiten ejecutar la instrucción.

Pipelines

 Si queremos paralelizar dos operaciones tenemos dos formas de actuar:


a) Duplicar las unidades donde se ejecutan y hacerlas a la vez.
b) Ejecutarlas en las mismas unidades pero desfasadas.
 La segunda forma aprovecha que muchas operaciones se pueden separar en fases. Es más
barata, obtiene buenos resultados y como las fases son más simples se puede ir a mayor
velocidad.
 Esta técnica se aplica principalmente a 3 áreas:
- Procesamiento de instrucciones.
- Referencias a memoria.
- Operaciones aritméticas en coma flotante.
Los procesadores CISC también pueden utilizar tuberías pero suele ser más difícil su
aprovechamiento.

Fases en el procesamiento de instrucciones

- Traer la instrucción de memoria.


- Decodificar la instrucción.
- Acceder memoria para traer los operandos.
- Ejecutar la instrucción.
- Devolver los resultados.
 Inconvenientes:
- Coordinar las fases.
- Si una fase se tiene que retrasar, paralizaremos el pipeline.
- Si hay saltos, las instrucciones que hay en fases precedentes no son correctas.

Juego de instrucciones optimizado


33
 Podemos estudiar la carga para deducir las operaciones más utilizadas.
 Más tarde podemos observar cómo descomponer esas instrucciones en instrucciones
sencillas.
 Estas operaciones sencillas se ejecutarían por hardware.
 Esta forma de proceder facilita la utilización de pipelines.
Tendremos las instrucciones más utilizadas ejecutadas de forma óptima y por hardware (lo
cual nos permite eliminar el microcódigo).
Si se quiere utilizar microcódigo se puede hacer como si fuesen saltos a subprogramas.

Modos de direccionamiento sencillos

 Simplificar los modos de direccionamiento y hacerlos eficaces implementándolos por


hardware.
 Esto facilita la utilización de pipelines.
 El compilador se encargará de organizar operaciones complejas en memoria.
 Puede que se necesiten más operaciones, pero se ejecutan a más velocidad.

Saltos retardados

 Es lo que se propone para minimizar los vaciados de pipeline a causa de saltos.


(Operaciones muy frecuentes durante la ejecución de programas).
 Cuando el procesador detecta un salto ya ha cargado otras instrucciones.
 Para solucionarlo los compiladores intentan poner operaciones que se van a ejecutar de
todas formas (se salte o no) después de la instrucción de salto.
 Si no encuentra instrucciones que pueda poner, inserta operaciones que no hacen nada.
Otra posibilidad es poner instrucciones antes del salto y anularlas al evaluar el salto si estas
instrucciones no se deberían haber ejecutado.

Procesadores con varias instrucciones/ciclo

- Si los conductos están siempre ocupados obtendremos una instrucción máquina por ciclo.
- Hay procesadores que pueden terminar más de una instrucción por ciclo.
- Una forma de hacer esto es tener varios conductos y enviar operaciones (que sean
independientes) a través de ellos.
- La posibilidad de explotar estas características dependerá de los programas que se ejecuten.
- Principalmente hay tres tipos de procesadores RISC:
 Superescalares.
 Superpipelined.
 Long Instruction Word.
Sacar una instrucción por ciclo ya es un logro cuando cada instrucción necesita al menos 5
ciclos. Los procesadores que pueden ejecutar más de una instrucción por ciclo deben utilizar
varias tuberías para ello. En cambio deben tener mecanismos que resuelvan posibles
dependencias entre las operaciones que se ejecutan a la vez. Es decir que una instrucción
necesite algo que se deba haber producido en instrucciones anteriores.

Long Instruction Word

 Se trata de poner conductos en paralelo, pero la decisión de encaminar las instrucciones no


se hace en tiempo de ejecución sino que se deja en manos del compilador.
 La unidad de control para gestionarlo será más simple, pero lo compiladores son más
34
complejos y lentos.
 Las instrucciones que pueden ir en paralelo se pegan en una sola instrucción en tiempo de
compilación.

Técnicas para mejorar la utilización de pipelines

 Circunvalación de registros  si el resultado de una operación lo va a utilizar otra que está


cerca, se le pasa directamente sin escribir en un registro.
 Rebautizar registros  detectan en tiempo de ejecución que un registro se usa mucho para
dos fines diferentes y los sustituye por otro.
 Reducir los retardos por saltos:
- Insertar operaciones que se pueden anular. Ejecuciones especulativas.
- Asignaciones condicionales. Por ej. a=b<c?d:e, permiten ahorrar saltos.
- Buffers para saltos (branch tarjet buffers). Guarda información sobre saltos anteriores y dónde se ha
saltado.
- Predicción de saltos según el compilador o hardware.

INTRODUCCION A LA TEORIA DE COLAS

Introducción

Técnicas de evaluación:
- Basadas en la monitorización
- Basadas en el modelado:
 simular el comportamiento del sistema  implementarlo de forma virtual
 técnicas analíticas  relaciones matemáticas

Las técnicas de monitorización se basan en deducciones sobre los resultados de mediciones.


En muchos casos estas mediciones pueden estar sesgadas o no se pueden realizar.
Si se desarrolla un modelo en forma de red de colas existen diferentes posibilidades de
solucionarlo:
- Simulación. Nos ofrece una solución numérica y poco exacta. El tiempo para desarrollar la
simulación puede ser muy alto y es muy difícil saber si los resultados son correctos. En
cambio el modelo está libre de restricciones.
- Técnicas analíticas. Hay restricciones en el modelo. El modelo puede estar lejos del
funcionamiento real. La realización puede ser poco costosa. El modelo se soluciona
aplicando reglas matemáticas. Se puede solucionar mediante el análisis operacional o
mediante la teoría de colas.

Teoría de colas de espera

 El sistema se ve como una red de recursos que son visitados por una población de clientes.
 Se pueden resolver:
- análisis operacional
- teoría de colas
- markov

Estación de servicio

 Proceso de llegada
 Distribución de tiempos de servicio
35
 Número de servidores
 Capacidad del sistema
 Tamaño de la población

Políticas de servicio

 First Come, First Served (FCFS) o FIFO.


 Last Come, First Served (LCFS) o LIFO.
 Round-Robin (RR).
 Processor Sharing (PS). Como Round Robin con unas ráfagas de servicio muy pequeñas.
 Service In Random Order (SIRO).
 Prioridad

Trabajo con prioridades

 No expulsiva, (Non preemptive)


 Expulsiva con reanudación, (Preemptive-resume)
 Expulsiva con reinicialización, (Preemptive-restart)

Notación de Kendall

 A/S/m/B/K/DS
- [A distribución del tiempo entre llegadas
- [S distribución del tiempo de servicio
- [m número de servidores
- [B capacidad del sistema (valor por defecto )
- [K tamaño de la población (valor por defecto )
- [DS política de servicio (valor por defecto: FCFS)

Distribución de probabilidad

 M exponencial (o markoviana)
 Ek erlang con parámetro k
 Hk hiperexponencial con parámetro k
 D determinista
 G general
Se supone:
- que las llegadas se producen individualmente
- que cada servidor atiende un solo cliente en cada instante

Variables que caracterizan el comportamiento

T = tiempo entre llegadas, (v.a.)


 = Tasa media de llegada = 1/E[T
S = v.a. que representa el tiempo de servicio de cada trabajo.
 = Tasa media de servicio = 1/E[S de cada servidor. En un sistema con m servidores la tasa
total de servicio es /m.

36
N = Número de trabajos en la estación de servicio (v.a. discreta).
Nq = Número de trabajos en espera de recibir servicio (v.a. discreta). No incluye a los trabajos
que están recibiendo servicio.
Ns = Número de trabajos recibiendo servicio (v.a. discreta).
R = Tiempo de respuesta del sistema (v.a.). Incluye tanto el tiempo de espera como el de
servicio.
W = Tiempo de espera en cola (v.a.).

Relaciones entre las variables

- Condición de estabilidad: Si el número de trabajos en el sistema crece continuamente,


tendiendo a infinito, se dice que el sistem es inestable. Para que el sistema sea estable, la
tasa media de llegadas debe ser menor que la tasa media de servicio:   /m donde m es el
número de servidores.
- Ecuación del número de trabajos: N = Nq + Ns donde N, Nq y Ns son v.a. También se
cumple para las medias: E[N = E[Nq + E[Ns
- Ecuación del tiempo: El tiempo que pasa un trabajo en la estación de servicio es igual a la
suma del tiempo de espera en la cola más el tiempo de servicio: R = W + S donde R, W y S
son v.a. También se puede aplicar a los valores medios: E[R = E[W + E[S
- Ley de Little: Permite relacionar el número de trabajos en un sistema con el tiempo que
pasa un trabajo en el sistema.
 Número medio de trabajos en el sistema = tasa de llegada * tiempo medio de
respuesta. E[N =  E[R

Proceso estocástico

 Familia de variables aleatorias {X(t) / t  T}


 Toman valores en un espacio de etados.
 Están ordenadas en el conjunto T, normalmente el tiempo.
 El espacio de estados y T pueden ser continuos o discretos.
Un proceso estocástico sobre un espacio discreto puede ser la cantidad de clientes en el
sistema. Uno sobre un espacio continuo podría ser el tiempo que pasan los clientes en las
colas.

El proceso de Poisson

 Proceso estocástico de tiempo continuo sobre un espacio de estados discreto.


 Se utiliza para contar el número de sucesos N(t) que ocurren en el intervalo de tiempo [0,t.
 Por ejemplo en número de llegadas que se pueden dar a un sistema hasta el tiempo t.

Tipos de procesos estocásticos que se suelen utilizar en la teoría de colas:


a) Si el espacio de estados es finito o contable, cadena estocástica o proceso de estado
discreto.
b) Si el espacio de estados puede tener infinitos valores (es real), proceso de estado continuo.
c) Procesos de Markov. Los estados en el futuro no dependen del pasado sino únicamente del
presente. Su análisis es más sencillo porque el pasado se puede olvidar. En cambio si esto
ocurre el tiempo que ya se ha pasado en un estado tampoco cuenta, por tanto el tiempo en
un estado se debe regir mediante una distribución exponencial. Esto es una restricción.
d) Si se trata de procesos de Markov con estados discretos, cadenas de Markov.
e) Procesos de nacimiento y muerte. Se trata de cadenas de Markov donde las transiciones
están restringidas a los estados vecinos.
37
f) Procesos de Poisson. Los tiempos de llegadas o de ocurrencias de un evento están
distribuidos idéntica e independientemente mediante una exponencial. El número de
llegadas en un periodo de tiempo sigue una distribución exponencial. Son procesos de
llegadas de Poisson.

Propiedades función de densidad de Poisson

 La distribución del tiempo entre llegadas es exponencial.


 Superposición de procesos de POISSON.
 Descomposición de un proceso de POISSON.
La superposición y descomposición de procesos de Poisson también son procesos de Poisson.
Las salidas de una cola M/M/1 donde la tasa de llegadas e s menor que la tasa de servicio
también es un proceso de Poisson.

Procesos de Nacimiento-Muerte

- Análisis general para calcular el comportamiento en función del tiempo (Régimen


transitorio).
- Análisis en régimen permanente (Cuando t  )
Sirven para modelar parte de un sistema donde los clientes llegan de uno en uno.
Hay dos tipos de análisis: el comportamiento desde el arranque del sistema y el
comportamiento en la estabilización.
En la estabilización tendremos una probabilidad de estar en cada estado.
Con el análisis operacional sólo podemos estudiar el sistema cuando se ha estabilizado.
A partir del estudio de los procesos de nacimiento y muerte podremos estudiar las colas
M/M/m/B/k para cualquier valor de m, B y k.

38
Practica 1

Time
Saca como resultado el tiempo de ejecución de otro comando. Este tiempo se da en tres
cifras: tiempo total desde que se lanzó la ejecución hasta que la terminó, tiempo de CPU en
estado usuario y tiempo de CPU en estado sistema. Estado usuario es el estado normal de un
programa que ejecutemos. Estado sistema se trata de llamadas que el programa puede hacer al
S.O., rutinas del S.O. para servir fallos de página, excepciones, ...
Lo normal es que el tiempo en estado usuario sea mayor que en sistema. Lo contrario puede
indicar problemas del programa en los accesos a memoria o repetidas condiciones de
excepción.

Times
Se trata de una función que se puede utilizar desde programas en C. Devuelve una estructura
con tiempos sobre la ejecución. #include <sys/times.h>

Prof
Sirve para analizar el tiempo que los programas pasan en sus diferentes subprogramas.
Funciona muestreando periódicamente el contador del programa. Para utilizarlo hay que
compilar el programa con una opción adicional -p. Luego al ejecutarse el programa se va
generando un fichero con datos de la ejecución.
Los datos que se muestran en pantalla son:
- % Time: porcentaje de tiempo de CPU consumido por la rutina.
- Seconds: tiempo de CPU consumido por esta rutina.
- Cumsecs: tiempo de ejecución total consumido por esta y todas las rutinas anteriores.
- Calls: número de veces que la rutina ha sido llamada.
- msec/call: segundos dividido por el número de llamadas. Da la media del tiempo
empleado en cada llamada (en ms.)
- Name: nombre de la rutina.

Gprof
Además de la información que proporciona prof, gprof nos indica como se llaman los
subprogramas entre sí (grafo de llamadas).También aporta las veces que un subprograma
llama a otro y las que lo llaman sus padres.
También necesita un compilado especial, la opción -G.
La salida de gprof está dividida en tres secciones:
- Grafo de llamadas

39
- Tiempos, da una lista de las funciones, porcentaje de tiempo empleado por cada una,
número de llamadas, ... (similar a prof).
- Indice, es una mezcla de referencias para poder localizar funciones por número en
lugar de por nombre.

Practica 3

AWK

- Es un lenguaje interpretado, por lo que no es muy eficiente pero suele ser suficiente para el
tipo de tareas que suele resolver.
- Está orientado al procesamiento de informes con un formato fijo.
- El lenguaje tiene una sinstaxis parecida a C.
- No es necesario la declaración de variables. Reserva espacio y las inicializa en el momento
de utilizarlas.

Estructura de las órdenes

- Un programa awk es una secuencia de unidades con dos partes:


- Patrón: debo realizar las acciones?
- Acciones: como un subprograma en C
- El funcionamiento del programa: toma un fichero de entrada y para cada línea comprueba
cada uno de los patrones que tiene el programa. Si el patrón se cumple en la línea se
ejecutan las operaciones asociadas.
Es decir que los patrones son condiciones lógicas que se evalúan en cada línea del fichero que
se está procesando. Si esta condición se cumple se ejecuta el subprograma que tiene asociado.

Ejemplo

awk ‘$3>0 {printf $1,$2*$3}’ fichero.datos


- El patrón: $3>0 será cierto en todas las líneas donde el tercer campo (secuencia de
caracteres separadas por blancos) sea mayor que 0.
- La acción: {printf $1,$2*$3} sacará por la salida estándar el primer campo de la línea y la
multiplicación de los campos 2 y 3.
- $0 indica toda la línea que está procesando.

-Al procesar una línea $n indica el campo n.


- La variable predefinida NF indica el número de campos que tiene la línea que se está
tratando.
- La variable pedefinida NR indica el número de líneas que ya han sido procesadas.

Patrones y acciones

- En los patrones no es necesario escribir if (patron).


- Los patrones son opcionales: si una parte del programa no tiene patrón, se supone cierto.

40
- Las acciones son opcionales: la acción por defecto es imprimir la línea entera.
- El programa se puede escribir en un fichero:
awk -f programa.awk fichero.datos

Programa.awk

Todas las partes son opcionales.


Las acciones pueden ser conjuntos de instrucciones, secuencias de control, etc.

- Tiene la forma siguiente:


BEGIN {acción 1
acción 2
acción n}
patrón 1 {acción 1
acción n}
patrón n {acción 1; acción n}
END {acción1; acción n}

Patrones predefinidos

- Hay dos patrones predefinidos:


BEGIN Es cierto antes de procesar ninguna línea. Sirve para hacer inicializaciones.
END Es cierto después de haber procesado la última línea. Sirve para tratar datos que se
han ido almacenando al recorrer el fichero.

Formato de salida

- La forma más simple es print.


- Se puede utilizar printf como en C:
{printf(”paga total de %s es %.2f\n”,$1,$2*$3)}
{printf(“%-8s pesetas %6.2f\n”,$1,$2*$3)}

Patrones

- $2 >= 5
- $2*$3 > 5
- $1 == “Pepe”
- Expresiones regulares.
- Combinación lógica de los anteriores (&&,||, !).
- (($2 >= 5) && ($2*$3 > 5)) || !($1==“Pepe”)

Variables

- No hay que definirlas.


- Se ponen “a pelo” donde se van a utilizar.
- Se inicializan automáticamente a 0.
- El contexto da el tipo.
- frase = $0 #La variable frase será una cadena de caracteres que contiene toda una
línea del fichero de datos.
41
- vector[20=1 #Creará un vector de 21 componentes. Todas las componentes a 0
menos la 20 que valdrá 1.
- tabla[10,20 = 1
Los comentarios se preceden de #.

Funciones pedefinidas

- Aritméticas:
- Raíces, potencias, logaritmos, números aleatorios, ...
- Funciones sobre tiras de caracteres:
- Longitud, concatenar, sustituir, ...
- Funciones definidas por el usuario:
function max(m,n) {
return m > n ? m : n
}

Instrucciones de control

- Igual que en C.
- if - else
- while
- for
- Admite argumentos (argc y argv).
- Se pueden ejecutar comandos de UNIX a través de la función syntax.

Parámetros de entrada

- awk -f prog.awk a v=1 b ficherodatos


- ARGC = 4
- ARGV[0 = awk
- ARGV[1 = a
- ARGV[2 = v=1
- ARGV[3 = b
- ARGV[4 = ficherodatos
La variable v ya se puede utilizar en el programa.

42

También podría gustarte