martes, 20 de mayo de 2008

DYEC - 20 de Mayo de 2008

Empezamos la clase dando nuestros nombres a JJ para subirnos unos puntillos extra por asistencia, :)

Después vemos el resumen de la
clase anterior (esta vez me ha tocado a mí).

A continuación vemos un
artículo sobre los kernel precompilados y el hecho de no ser necesario compilar elkernel para cada máquina; Y vemos que el argumento que utiliza el autor es que aunque optimices el kernel, en este caso compilandolo, es muy bajo el tiempo que se está ejecutando en CPU y por lo tanto no vas a conseguir una gran mejora. Sobre este argumento vemos que es erróneo porque si el sistema es un sistema orientado a que el tiempo del kernel en núcleo sea alto, como por ejemplo un servidor, es obvio que se reducirá bastante el tiempo de cualquier rutina.

Trabajo final: 6 de Julio de 2008

Las notas de clase saldrán en Julio y se pueden reclamar.

Seguimos con ejercicios de autoevaluación:
1.
El blog de Josele
En estos ejercicios vemos que el
artículo tiene varios fallos a la hora de representar los gráficos como meter un fondo, barras delimitadoras, distintos formatos (verticales y horizontales), demasiados resultados en un sólo gráfico, utilizar líneas cuando deberían ser barras, utilizar una leyenda en vez de colocar cada identificador debajo de su barra correspondiente,.... y no haber incluido el índice final.

2:
Davis87 Ejercicio 4.1
3:
Davis87 Ejercicio 4.2
4:
Davis87 Ejercicio 4.3

Y ahora seguimos con el temario:

4.2.6 Engañando a los benchmarks

El mejor benchmark que se puede utilizar para un juego es probar ese juego, porque al utilizar un benchmark sintético te puede dar unos resultados malos y al jugar el juego te puede funcionar perfectamente y darte unos resultados buenísimos.

ATI y NVIDIA configuraron sus tarjetas para que al ejecutar el benchmark 3DMark, dejase código sin ejecutar para que obtuviesen resultados muy buenos con el 3DMark.

Dado que las decisiones de compra de muchos consumidores de
material informático dependerán de las prestaciones del mismo, tal como han sido
medidas por organizaciones, independientes, hay una gran presión para obtener
los mejores resultados posibles. Ya que es difícil manipular los resultados, por
la verificación a que éstos son sometidos, se intenta mani pular los ordenadores
de forma que produzcan tiempos de ejecución mejor en los benchmark. El problema
es que, de esta forma, los benchmarks se convierten el algo totalmente
independiente de las prestaciones reales del sistema, y, lo que es más
importante, en las diferencias relativas entre sistemas.
En algunos casos se
hace difícil comparar dos sistemas, incluso para el mismo juego, porque el
código que se ejecuta depende del hardware; por eso, usar juegos para comparar
puede ser contraproducente, porque puede dar mejores prestaciones en el hardware
peor, siempre que el código para ese hardware específico lo permita. El problema
es que al ser el código específico del sistema, si se usa un benchmark genérico,
los resultados que se van a dar no van a tener ningún sentido.
Los timos en
lso benchmarks son un problema real, habiendo artículos que
hablaban de
escándalos casi diarios
Las formas más habituales en
que se suelen producir estos engaños son los siguientes:
Detección y
optimización del código de un benchmark: tanto los compiladores como el código
del sistema operativo pueden examinar lo que están ejecutando o compilando, ver
su parecido con alguno de los benchmarks habituales, y optimizar sólo y
exclusivamente ese código, dando resultados mucho mejores que los que se
obtendrían con un código similar en una aplicación real o dando resultados
optimizados aún en el caso de que el compilador no haya activado esta opción.
Esto hizo IBM cuando produjo una versión nueva de su compilador de C para las
estaciones de trabajo IBM System/6000, o algunos fabricantes de tarjetas de
video que incluyeron código de aceleración de WinBench directamente en un ASIC.
Hay incluso una empresa,
KAP, que mejora compiladores para que optimicen código de algún
benchmark, específicamente Matrix300
, esto, a largo
plazo no sirve de mucho, porque es. Incluso en algún caso, había compiladores
que eliminaban totalmente el bucle principal del benchmark, como sucedió con
Whetstone y un compilador de IBM (hecho que no he sido capaz de comprobar, por
cierto). También lo ha hecho
Sun con CaffeineMark, un benchmark para Java. Posiblemente, lo mismo haya sucedido con estos cambios de versión de driver que dieron tal diferencia entre
tarjetas
..
Análisis del benchmark independiente
de la máquina. En algunos casos, los lenguajes como el Java o los compiladores
como el gcc de la GNU, crean un código independiente de la máquina, que
posteriormente se ensambla o interpreta por una máquina virtual. En tal caso, se
puede analizar ese código, como se hace en [Conte91], para concluir qué
características debe de tener un ordenador que ejecute ese código lo más rápido
posible. Esto permite, por ejemplo, dimensionar las caches para que se minimicen
los fallos de página. Sin embargo, una vez más, las mejoras sólo serán
aplicables para los programas incluidos en el benchmark, aunque en este caso los
resultados sean de aplicación más genérica.
Precisamente por esta razón, la
mayoría de los benchmark estándar cambian cada cierto tiempo. SPEC se revisa
cada 3 años, y hasta ahora ha habido tres versiones: SPEC89, 92, 95 y 2000
(todavía están preparando la siguiente en el año 2005). De esta forma, cuando
los fabricantes han aprendido a engañar un benchmark, se propone uno
nuevo.
En teoría, de todas formas, debería ser posible crear un benchmark que
no se pueda engañar, como
afirman en este trabajo, que no parece
haber tenido mucho éxito. Solo que es difícil.

Otra forma de engañar a un benchmark como ya hizo Sun es al usarlo con un servidor de páginas webs, servir las páginas desde la caché.

Un benchmark interesante para bases de datos es el TPC:

TPC (Transaction Processing Performance Council) es un consorcio que propone benchmarks en el área de procesamiento de transacciones. Hay varios benchmarks propuestos; hoy en día los más usados son TPC-C y TPC-D. Ambos tienen como entorno de referencia el siguiente: un sistema cliente, que genera peticiones de bases de datos usando un front-end, y un sistema servidor, que ejecuta el intérprete del lenguaje de bases de datos, generalmente SQL, y desde el mismo accede a un sistema de gestión de bases de datos. Cada transacción debe de ser atómica, es decir, se lleva a cabo o no completa, y además los sistemas deben de estar disponibles 24/7, 24 horas al día 7 días a la semana.
Estos benchmarks son de muy alto nivel, o más bien, ejercitan todos los niveles del sistema, desde la jerarquía de memoria, incluyendo memoria secundaria, pasando por el sistema operativo, hasta los programas que resuelven un problema concreto.
Las métricas que se proporcionan con estos benchmarks son de dos tipos: peticiones/tiempo, número de usuarios, y precio/prestaciones; hay unas reglas estrictas para evaluar éste último. Se verá a continuación cada uno de los benchmarks por separado.
h5e.incWrite('TPC-C')

Otros benchmark interesantes son los creados para la Web:

4.3.2 SPECWebxxx y otros benchmarks de servidores web


SPECWeb2005 (http://www.spec.org/osg/web2005/) es la última versión de un benchmark que se concibió originalmente en el año 95; es un benchmark sintético para medir las prestaciones de sistemas como servidores web. Inicialmente incluía sólo páginas estáticas, pero hoy en día ha cambiado mucho. Tiene las siguientes características:
Combina contenido estático y dinámico, pero se basa más en el estático que en el dinámico.
El contenido estático contiene ficheros de diferente tamaño y frecuencia decreciente; y dentro de cada "nivel", los ficheros tienen tamaños que se incrementan en un número fijo de Ks. Por ejemplo, los del nivel de 100Ks se incrementan de 10 en 10 Ks. Se sigue una ley de Zipf (número de peticiones exponencialmente decreciente con el tamaño) para decidir qué fichero se pide.
El resultado principal de este benchmark es lo que se denomina "conexiones simultáneas conformantes", es decir, peticiones simultáneas que es capaz de manejar; se suele repetir tres veces y se da la mediana de los tres resultados como resultado válido.
Al principio, este benchmark recibió bastante atención por parte de los medios; por ejemplo,
este artículo cuenta como se triplica prácticamente, sobre la misma máquina, las prestaciones de un servidor RH Linux sobre un servidor IIS. Sin embargo, mirando un poco de más cerca, vemos a qué se puede deber esta ventaja. El servidor que usa el sistema RedHat es Tux, denominado actualmente Red Hat Content Accelerator, un servidor que se ejecuta como tarea en el kernel, en un sistema exclusivamente dedicado a eso (prácticamente). De hecho, los servidores web más potentes no suelen ser los más conocidos.
De hecho, el uso de este servidor web es relativamente irrelevante, ni siquiera aparece en el
informe de servidores web. Por lo tanto, el hecho de que se use o no este servidor puede ser totalmente irrelevante para un caso real, donde los servidores van a ser probablemente el Apache o el IIS. Al parecer, la imposibilidad de superar a este servidor en los benchmarks ha hecho que la gente pase de ejecutarlo sobre sus máquinas, y probablemente conducirá a la revisión del mismo (igual que sucedió con el SpecWEB96, que tuvo que ser revisado por la introducción por parte de Sun del Network Caché Accelerator, un módulo del kernel que metía las páginas estáticas en un buffer de la memoria del kernel).

Terminamos el tema 4 y para terminar la clase vemos el último video del día.

martes, 13 de mayo de 2008

DYEC - 13 de Mayo de 2008

Comenzamos la clase viendo los fallos de la quinta práctica:
  • Hay que plantear objetivos reales, con cargas de trabajo reales. En particular, el tiempo que tarda en arrancar un sistema no es una carga real.
  • Los objetivos no pueden ser sobre la tasa de uso de un componente (memoria, CPU)
  • Las pruebas se diseñan en función del objetivo, y no al revés. Si se trata de que "este programa vaya más rápido", el programa debe ser representativo, no hecho ex profeso.
  • Hay que mejorar un sistema, no cambiarlo. El sistema, en general, será un ordenador, algún subsistema del mismo, o en general las prestaciones. No se trata de decir "cambio este programa por este otro más rápido, y ahora va más rápido". O antes tenía esto en memoria, ahora lo quito, y ocupa menos menoria todo (o va más rápido).
  • Tampoco se trata de bajarse "PC optimizer 2000", le doy a siguiente, siguiente siguiente, y luego mira la pantalla que pone "sistema optimizado".
  • Un buen ejemplo: http://aullidosdigitales.blogspot.com/2008/05/prctica-5-medicin-de-las-prestaciones.html
  • Otro, más claro: http://mdyec.blogspot.com/2008/05/practica-5.html

Vemos la práctica de LP-Spain y vemos que ha hecho un poco de trampa porque en verdad cambia un sistema viejo y malo y por uno nuevo y bueno.

Ahora vemos el resumen de la clase anterior.

Seguimos con los ejercicios de autoevalución de Davis87.

Ahora vemos un artículo sobre la arquitectura x86 y que dice que va a estar presente muchos año más.

Seguimos con el temario:

4.2 - Utilización de un benchmark

Los benchmarks son usados por una gran cantidad de personas, sus resultados son también aprovechados por una amplia gama de profesionales, y, por tanto, la mayoría tienen cierto grado de oficialidad o estandarización.

Uno de los benchmark más conocidos es el SPEC, y vemos un ejemplo del SPEC.

4.2.2 Tipos de benchmarks


Hay diferentes tipos de benchmarks, dependiendo de cómo se representa la carga de trabajo.
En algunos casos se pueden usar programas reales, realizando una carga de trabajo real.

  • Núcleos o kernel, que representan las operaciones fundamentales de una carga de trabajo.
  • Uno clásico son los bucles de Livermore (por ejemplo que multiplica matrices), que representan operaciones comunes en cálculo numérico.
  • Benchmarks de juguete: miden parámeros básicos, como los megahercios o la latencia de la memoria. No representan en asoluto a ninguna carga de trabajo real.
  • Sintéticos, resultan de una operación estadística que mide la carga de trabajo usada con una serie de programas, y abstrae y resume la carga. Son benchmark de bajo nivel.

Los mejores benchmark son los de núcleos o kernel, aunque hay muchos buenos que combinan los kernel y los sintéticos.

4.2.4 Errores comunes

  • Representar solamente comportamiento medio en la carga de trabajo.
  • Ignorar la distribución desigual de las peticiones de dispositivos. Provoca que los resultados no sean muy realistas.
  • No controlar el nivel de carga de forma apropiada.
  • Ignorar los efectos de la cache. Puede falsear los resultados. Para evitarlo hay que hacer benchmark que no quepan en la caché o repitiendolo varias veces.
  • Ignorar el overhead del monitor.
  • No validar las medidas. Hacerlas varias veces. (Muy importante).
  • No asegurarse de las mismas condiciones iniciales, es decir, de que el estado de la cache sea el mismo, el de los procesos que se están ejecutando también, incluso, si es posible, la fragmentación del disco duro y el espacio que queda libre, pues, como se sabe, estos son dos factores que influyen en la velocidad del mismo. (Muy importante). Por ejemplo: ejecutar el benchmark con el ordenador recién arrancado.
  • No medir las prestaciones del transitorio, ya que la mayoría de los experimentos están diseñados para predecir las prestaciones bajo condiciones estables. Por ejemplo: en un sistema recién arrancado, la temperatura no va a ser la misma que la que tendrá pasado un rato.
  • Utilizar los porcentajes de uso de los dispositivos para comparar prestaciones. Por ejemplo el uso de CPU. (Muy importante).
  • Recoger demasiados datos con muy poco análisis. (Muy importante).

4.2.5 Juegos de benchmarking

Es hacer marketing utilizando un benchmark, engañar al público con los resultados de un benchmark. Truco clásico de benchmarking de AMD frente a Intel: sus CPUs se llaman lo mismo a las equivalentes en Intel. Por ejemplo un AMD 1800 que en verdad va a 1600 equivale a un Intel que va a 1800.

  • Usar configuraciones diferentes para ejecutar la misma carga de trabajo.
  • Elegir las especificaciones de forma que favorezcan a una máquina determinada.
  • Usar una secuencia de trabajos sincronizada.
  • Elegir una carga de trabajo arbitraria.
  • Usar benchmarks demasiado pequeños.
  • Proyectar o interpolar resultados de un benchmark.
  • Elegir el sistema base de normalización de forma arbitraria.

Y para terminar el video del día.

lunes, 12 de mayo de 2008

Práctica 5

Práctica 5 aquí

DYEC - 6 de Mayo de 2008

Como siempre repaso de la clase anterior.

Comenzamos viendo los trabajos que ya están aquí publicados.

Después vemos unas determinadas cuestiones sobre la práctica siguiente y el trabajo final:
  • Hay que seguir los 10 pasos que vimos en el tema 1 para la comparación de sistemas.
  • El objetivo de una comparativa no es hacer la comparativa, sino evaluarlas siguiendo un objetivo determinado.
  • Al final debe de haber un indice (numéricamente o gráficamente) que muestre los resultados finales. Hay que elegir un sistema base (sistema sin mejorar en caso de que vayamos a mejorarlo), por cada mejora sería un nuevo sistema. Si hay varios sistemas se toma como base el sistema más lento. Ejemplo:


A B IA IB Indice de b: media geométrica de las medidas de B

ma 3 5 1 1,666

mb 2 6 1 3 1 (Raiz(Ib(a), IB(b)) / sqrt(5)

  • La última frase del trabajo o la práctica 6 debe ser: el siguiente sistema tiene un indice 1 y el mejor sistema es tal.
  • No incluir pantallazos. Sólo incluir una tabla y un gráfico. No meter pantallazos de benchmarks, meter los datos en tablas y presentar las tablas finales.
  • El trabajo final no debe exceder de 10 páginas.
  • Hay que comparar mínimo 3 sistemas
  • Hay que poner el indice final obligatoriamente
  • La fecha de entrega del trabajo es la fecha del examen.
  • Los indices son siempre mayor es mejor, por lo tanto si tenemos un índice menor es mejor se divide el menor entre el mayor.
  • Todo deben de ser medidas y no caracteristicas.

Seguimos con el temario.


3.7 - Optimizacion de la red:

Heramienta: ethtool

ethtool -t eht0

Si la red es muy segura lo mejor es enviar paquetes muy grandes para no tener que esperar tanto a los ACK.

Buffers de red: mejor cuanto más grandes

Con el ethtool se puede hacer que la tajeta de red tome parte del procesamiento que hace el procesador sobre paquetes de red


Terminamos el tema 3 y empezamos el 4.

4 - Selección y Configuración de Sistemas Informáticos: Benchmarking


No hay que poner todas las medidas que muestra un benchmark, solo las realmente útiles para nosotros.
En las comparativas nunca hay que poner uso de cpu. Si la única diferencia entre 2 sistemas es la CPU lo que hay que hacer es hacer varias copias simultáneas o ocupar casi todo el uso de CPU y asi ver que programa con la CPU a 100% va mejor. También se puede mirar la temperatura de la CPU.

A continuación vemos unos ejercicios de tupakamaru.

Práctica 6


Hay que usar diferentes sistemas operativos y utilizar programas al estilo de la práctica 3 (hanoi, fibonacci,etc)

Hay que analizarlo como el trabajo final, con un sistema base cuyo índice va a ser 1 y hay que usar 3 sistemas. Como mínimo hay que hacer mediciones sobre un aspecto. Probar: programas en perl, java y en xp, vista, linux o mac. También uno muy fácil puede ser en javascript o perl. Tiene que ser portable. Tiene que tardar 5 o 6 minutos en ejecutarse para que se puedan apreciar los cambios. Usar el reloj del sistema y no un cronómetro de mano para medir los tiempos. 3 sesiones de prácticas.


Fecha de entrega: 2 de Junio

Y por último los videos del día:

  1. Pruebas a un portátil (Por favor, no realiceis estas pruebas en casa y si lo haceis, bajo la supervisión de un adulto).
  2. Prestaciones de Windows XP.

DYEC - 15 de Abril de 2008

Para empezar, como siempre, repasamos la clase anterior viendo en este caso el resumen de Antares. A continuacion comentamos un ejemplo de manipulación en la representación de gráficas.

Ejercicios de autoevaluacion: Comentamos el ejercicio de autoevaluacion 3.1 realizado por Topakamaru

Continuamos con el temario:

3.2 Gestión de carga y prestaciones en el sistema operativo

Un administrador ha de mantener un sistema y ha de plantear la gestion del sistema de la siguiente forma:

- Planificación y definición de la carga del sistema: es conveniente acordar de antemano (con la autoridad competente) qué se consideran unas prestaciones aceptables. Una vez llevada a cabo esta planificación, hay que comprobar si, con el sistema tal como está, se puede llevar a cabo ese acuerdo; y si en el futuro previsible, con los usuarios y la carga pico prevista, se va a poder cumplir.

- Configurar las herramientas de monitorización del sistema: se deberán poner en funcionamiento las herramientas que monitorizan en cada momento los subsistemas principales. Estos monitores nos indicarán como se usa el sistema en cada momento y a lo largo del tiempo, y nos permitirán prever los fallos y arreglarlos fácilmente (o no) cuando se produzcan.

- Tratar de resolver problemas mediante políticas de gestión del sistema, tales como limitación de uso interactivo, limitación de uso de disco mediante cuotas,

- Ampliar el sistema, si todo falla.

3.3 Políticas de gestión del sistema

Tanto los usuarios como el administrador pueden mejorar el funcionamiento del sistema. Algunas de estas medidas pueden ser:

- Usar comandos internos del shell en vez de los comandos externos de UNIX, ya que el shell ya se encuentra ejecutándose en memoria.

- Evitar los caminos largos, que hacen que el ordenador tenga que leer muchos directorios cada vez que se ejecuta un comando, asi como evitar los directorios con muchos ficheros.

- Usar las versiones más eficientes de cada tipo de programa.

- Eliminar daemons inútiles y malos para el alma de la máquina.

- Limitar tiempos de ejecución interactivos.

- Modificar los parámetros del sistema operativo conociendo bien la estructura del mismo.

A continuación, pasamos a ver la 5ª práctica:

Consiste en mejorar las prestaciones de un sistema. Esta práctica va a ser una prueba para la practica final. Primero definimos un objetivo, por ejemplo, que al compilar tarde menos. Tomaremos las mediciones antes del cambio y posteriores al cambio. Para realizar la práctica vamos a seguir explícitamente la metodología de la asignatura.

Fecha de entrega: Miercoles dia 7 de Mayo.

Y como siempre el video del día, overclocking extremo.

DYEC - 8 de Abril de 2008

Comenzamos la clase repasando las prácticas 2 y 3.

Después de esto, vemos un versus entre Xp y Vista. Comentamos que no se deben de utilizar nunca los usos de los sistemas para compararlos. Si el uso de CPU o el de memoria, al abrir un fichero por ejemplo, da igual la cantidad de memoria o CPU que consuma por lo que interesa es la rapidez con que se abre y la cantidad total de archivos que puedes abrir con distintos sistemas.Vemos un ejercicio de autoevaluacion de Vkthor. Las barras se utilizan para variables categóricas.Empezamos el tema 3: Solución de problemas en un sistema informático.
Cambiar parámetros en Linux: en proc podemos modificar todos los parámetros del sistema operativo como el tiempo de quantum, swap, etc. En windows es mediante el registro: regeditCon df vemos la carga de los discos. Los cuentas de la facultad están repartidas por ciclos, cada uno de los ciclos están en un disco distinto.La utilizacion de recursos es del tipo nominal es mejor. Libro recomendado: gestion del tiempo para administradores de sistemas.Ejercicio de autoevaluación 3.1:
Indice de suervivencia de pagina: cd proc. dirty_ratio (creemos)

Numero máximo de usuarios: cd proc.
find . -name "max" -print
No sabemos cual sería.

Y para terminar, vemos el video del dia

Práctica 3

Práctica 3 aquí.

Práctica 2

La práctica 2 la puedes encontrar aquí.

DYEC - 1 de Abril de 2008

Comienza la clase con la novedad de que tenemos a la tele grabando nuestra clase.
Vemos un profiler del profesor mientras Antares reponde a unas preguntas para la TV.
Al hacer una mejora en un programa con un profiler lo importatnte es que el tiempo total al final sea menor que el tiempo original.Vemos un extraño lenguaje llamado brainfuck que solo tiene como instrucciones los simbolos lógicos.Vemos unas paginas sobre IP sobre palomas mensajeras (IP over avian carriers).VKthor nos explica como ha realizado su practica 2. Despues vemos ejercicios de autoevalizacion de tupakamaru. Las metricas coreclock y merclock no son unas buenas medidas, porque no podemos fiarnos de lo que nos diga el fabricante. La realción calidad/precio, sobre calidad es mas es mejor y precio menos es mejor.Seguimos con la teoria:
Entramos en /proc que es un flesystem del kernel. Dentro de proc estan todas las estructuras de datos del kernel.diskstats: para ver la utilizacion de los discos.
Vemos otros monitores de sistemas: vmstat 10 10. Las 3 primeras columnas se refieren a procesos, esperando ejecutarse, bloqueado, y swapeados. Las 3 columnas siguientes se refieren a memoria. La 2 siguientes son entradas en swap y salidas de swap. Las 2 siguientes son bloques escritos y leidos. In es interrupciones.Cs son los cambios de contexto por segundo. Ver man vmstat. Ejecutamos un programa y utilizando vmstat vemos los cambios en el sistema.
Kasicguard es un monitor para KDE.La utilizacion de la CPU es un factor y por lo tanto no debemos incluirlo....Empezamos el tema 2.Graficos de kiviat: magnitudes de menor es mejor y mayor es mejor

DYEC - 11 de Marzo de 2008

Como siempre nada más comenzar, hacemos una recapitulación de la clase anterior.

A continuación vemos un artículo sobre el futuro de los multicores en el que se comentan varias cuestiones como que la famosa Sony PlayStation 3 tiene una CPU con 9 cores pero no funciona con procesamiento simétrico.
Todos los ordenadores que se fabrican hoy en día son de arquitectura Turing.
La ley de Moore, aquella que decía que cada 18 meses se iba a duplicar la velocidad de las CPUs, está hoy en día estancada en los 3.8 GHz; Pero, ha surgido una nueva ley de Moore sobre los núcleos o cores y es que cada 18 meses se van a duplicar el número de cores de las CPUs. Cierto es esto pues hace como que 2 años y medio salieron al mercado los Intel Core Duo que tenían 2 núcleos, a este le siguieron los Core 2 Duo y los Core 2 Quad con 4 núcleos. Actualmente hay varios prototipos con 80 y 160 núcleos pero tendremos que esperar bastante hasta verlos en las tiendas.
Vemos lo último en tarjetas gráficas que viene de parte de Nvidia, la serie Quadro que llegan a tener 128 núcleos.

Hecho esto, comentamos los resultados de la primera práctica y corregimos varios ejercicios de autoevaluación. Al medir prestaciones de un sistema nunca hay que medir el precio, salvo por ejemplo como en casos de una impresora al medir el precio por página imprimida.

Seguimos con el temario:

1.5 Medición de la carga de un sistema

La carga del comando de linux top es el número de procesos que están esperando para ejecutarse.
Uno de los procesos que más tiempo de procesador consume en linux es el network manager que accede de forma gráfica a las redes.
Los Filesystem en linux son ficheros que contienen datos (estructuras de datos) del kernel en disco. Los maps son ficheros de los mapas de memoria.

Para poder medir un sistema utilizamos los profilers que son trozos de código que se insertan dentro de un programa para monitorizar un sistema midiendo diferentes partes de un programa. Identifican partes de un programa que consumen mucho tiempo de ejecución.

Lo más eficiente para programar es utilizar código máquina pero hoy en día es imposible.

Una técnica para hacer más eficiente los procesadores segmentados es la técnica del desenrollado de bucles (loop unrolling). El objetivo es obtener un conjunto de instrucciones no relacionadas que pueden ser usadas para eliminar los bloqueos producidos por las dependencias de datos. Estos bloqueos pueden ser eliminados si entre las dos instrucciones que lo producen se inserta un número de instrucciones igual al número de ciclos de bloqueo. El desenrollado de bucles consiste replicar el cuerpo del bucle un número determinado de veces. De esta manera, se disponen de más instrucciones para la eliminación de los bloqueos de datos. Es necesario reajustar el incremento/decremento del puntero, pues en cada iteración se procesan tantos elementos como veces se haya replicado el bucle. Se eliminan, por tanto, operaciones de incremento/decremento y saltos. Una vez desenrollado el bucle, hay que renombrar los registros utilizados en diferentes iteraciones para poder reordenar convenientemente el código (planificación de instrucciones). Para poder planificar convenientemente la ejecución de instrucciones es necesario que el bucle no contenga dependencias entre instrucciones de distintas iteraciones (dependencias loop-carried).

Analizamos un programa con un profile y vemos que el 24% del tiempo lo usa para comprobar los argumentos y el 14% para clonar vectores. Ahora podemos mejorar estas partes que son las que más tiempo consumen haciendo nuestro programa mucho más eficiente.

Existen profilers para todos los lenguajes.

1.5.2. Métricas de la carga de trabajo más comunes

Throughput - equivalente al ancho de banda.
Ancho de banda - número de bits que es capaz de procesar un canal.
Baudios - cambios de estado en la línea por unidad de tiempo. No es equivalente a los bits. En un cambio de estado de la línea se pueden procesar 1 o más bits.
Buffer TLB - dirección física donde está almacenada la memoria virtual.

1.5.3. A qué se dedica el tiempo.

No se deben hacer mediciones al pedir un página web porque depende de mucho factores como el servidor, la conexión, la distancia al servidor, etc.
Intentamos ver el vídeo del día que trata sobre como utilizar un profiler con Visual C++.

Vemos la tercera práctica y echamos un vistazo al tema 2.

Entrega de la práctica 2: 31 de Marzo de 2008
Entrega de la práctica 3: 6 de Abril de 2008

para eliminar los bloqueos producidos por las dependencias de datos. Estos bloqueos pueden ser eliminados si entre las
dos instrucciones que lo producen se inserta un número de instrucciones igual al número de ciclos de bloqueo.
El desenrollado de bucles consiste replicar el cuerpo del bucle un número determinado de veces. De esta manera, se
disponen de más instrucciones para la eliminación de los bloqueos de datos. Es necesario reajustar el
incremento/decremento del puntero, pues en cada iteración se procesan tantos elementos como veces se haya replicado
el bucle. Se eliminan, por tanto, operaciones de incremento/decremento y saltos.
Una vez desenrollado el bucle, hay que renombrar los registros utilizados en diferentes iteraciones para poder reordenar
convenientemente el código (planificación de instrucciones).
para eliminar los bloqueos producidos por las dependencias de datos. Estos bloqueos pueden ser eliminados si entre las
dos instrucciones que lo producen se inserta un número de instrucciones igual al número de ciclos de bloqueo.
El desenrollado de bucles consiste replicar el cuerpo del bucle un número determinado de veces. De esta manera, se
disponen de más instrucciones para la eliminación de los bloqueos de datos. Es necesario reajustar el
incremento/decremento del puntero, pues en cada iteración se procesan tantos elementos como veces se haya replicado
el bucle. Se eliminan, por tanto, operaciones de incremento/decremento y saltos.
Una vez desenrollado el bucle, hay que renombrar los registros utilizados en diferentes iteraciones para poder reordenar
convenientemente el código (planificación de instrucciones).
para eliminar los bloqueos producidos por las dependencias de datos. Estos bloqueos pueden ser eliminados si entre las
dos instrucciones que lo producen se inserta un número de instrucciones igual al número de ciclos de bloqueo.
El desenrollado de bucles consiste replicar el cuerpo del bucle un número determinado de veces. De esta manera, se
disponen de más instrucciones para la eliminación de los bloqueos de datos. Es necesario reajustar el
incremento/decremento del puntero, pues en cada iteración se procesan tantos elementos como veces se haya replicado
el bucle. Se eliminan, por tanto, operaciones de incremento/decremento y saltos.
Una vez desenrollado el bucle, hay que renombrar los registros utilizados en diferentes iteraciones para poder reordenar
convenientemente el código (planificación de instrucciones).
para eliminar los bloqueos producidos por las dependencias de datos. Estos bloqueos pueden ser eliminados si entre las
dos instrucciones que lo producen se inserta un número de instrucciones igual al número de ciclos de bloqueo.
El desenrollado de bucles consiste replicar el cuerpo del bucle un número determinado de veces. De esta manera, se
disponen de más instrucciones para la eliminación de los bloqueos de datos. Es necesario reajustar el
incremento/decremento del puntero, pues en cada iteración se procesan tantos elementos como veces se haya replicado
el bucle. Se eliminan, por tanto, operaciones de incremento/decremento y saltos.
Una vez desenrollado el bucle, hay que renombrar los registros utilizados en diferentes iteraciones para poder reordenar
convenientemente el código (planificación de instrucciones).
para eliminar los bloqueos producidos por las dependencias de datos. Estos bloqueos pueden ser eliminados si entre las
dos instrucciones que lo producen se inserta un número de instrucciones igual al número de ciclos de bloqueo.
El desenrollado de bucles consiste replicar el cuerpo del bucle un número determinado de veces. De esta manera, se
disponen de más instrucciones para la eliminación de los bloqueos de datos. Es necesario reajustar el
incremento/decremento del puntero, pues en cada iteración se procesan tantos elementos como veces se haya replicado
el bucle. Se eliminan, por tanto, operaciones de incremento/decremento y saltos.
Una vez desenrollado el bucle, hay que renombrar los registros utilizados en diferentes iteraciones para poder reordenar
convenientemente el código (planificación de instrucciones).

Ejercicios Autoevaluación 1.1

1. Mencionar sistemas operativos que no estén entre los anteriores, y el nicho de mercado que suelen cubrir:
Empezando por sistemas operativos de PCs tenemos:
Ms-DOS - lleva muchos años sin venderse aunque aún persiste en los viejos 286 o 386 que tenemos en el trastero.
Windows 9x - el único mercado que tiene aún es la ETSIIT (desgraciadamente).
Windows Vista - posee todo el mercado de ordenadores personales (aunque eso sí; deben de tener 4GB de RAM para que vaya suelto y sin swapping).
Sistemas operativos para dispositivos móviles:
Palm OS - hoy en día mantenido casi en solitario por Palm, pero que hasta hace poco ha tenido importantes fabricantes como Sony.
Research In Motion (RIM) - con sus Blackberry, más propiamente Smartphones que PDAs, pero que han copado una parte importante del mercado corporativo a la vez que incorporaban prestaciones de PDA.
Symbian OS presente en las gamas altas de teléfonos móviles de Nokia y Sony Ericsson;
Linux liderado por las Sharp Zaurus.
Mac OSX de Apple.
Otros sistemas operativos:
Jaspar - (Japan Automotive Software Platform Architecture) sistema operativo diseñado para automóviles.
NetWare de Novell - para servidores.
Windows Server - de Microsoft para redes cliente/servidor.
Lan Server - de IBM, un sistema operativo de red que se ejecuta sobre OS/2.
Vines de Banyan - Virtual Networking System (sistema de red virtual) es un sistema operativo de red basado en una versión modificada de UNIX.

Recursos para DYEC

Primer recurso: Asignatura impartida en la Universidad de Oviedo. Está bien el temario aunque el tema 4 es distinto al nuestro pues es sobre la evaluación de sistemas informáticos para Internet, pero aún así puede ser muy útil. La información no está completamente actualizada pero aún así está muy bien.
Segundo recurso: Como sitio de referencia para las últimas noticias sobre Hardware está muy bien y muy actualizado. La infomación de este sitio no es sólo de los últimos productos a la venta sino que también hay información sobre empresas dedicadas a la fabricación y diseño de hardware y las últimas noticias de este "mundo". Puede servir para los temas 3 y 4.
Tercer recurso: Foro sobre hardware en el que se puede encontrar todo tipo de hebras como overclocking, procesadores, benchmarks, redes, placas base. Temas 3 y 4.
Cuarto recurso: Para comparativas de hardware nada mejor que PC-ACTUAL y su laboratorio (bueno, personalmente me gustan más las comparativas de 'Personal Computer & Internet' pero no tiene revista online). La información está más o menos actualizada y las comparativas creo que son muy buenas.
Quinto recurso: Aunque no es una página para expertos tiene una gran cantidad de tutoriales, manuales y foros que la hacen muy útil para aquellos que casi nos iniciamos en el mundo del hardware y la configuración de equipos. La información está muy actualizada y hay tutoriales muy nuevos, así como noticias.
Sexto recurso: Creo que ésta es una de las mejores páginas sobre el último hardware del mercado que yo he visto ya que incorpora últimas noticias sobre el mundo del hardware, foros y comparativas. La información está muy actualizada y siempre analizan ls últimos modelos del mercado.
Septimo recurso: Una estupenda y completa guía de overclocking. El número de manuales y el grado de éstos, desde un mero aficionado a la informática a todo un experto en overclocking hacen que ésta página sea indispensable para iniciarse en este mundo.
Hay muchos más recursos interesantes pero sólo voy a poner unos pocos porque la lista podría ser interminable:
http://www.ual.es/Universidad/Depar/LengComp/programas/ITIG/CESI.htm
http://www.techpowerup.com/
www.tomshardware.com
http://www.computerpoweruser.com/
http://www.hardforum.com/
http://www.shilmar.com/
http://traficantesdehardware.com/

DYEC - 4 de Marzo de 2008

Para comenzar la clase hacemos una recapitulación de la clase anterior recordando las 10 fases para la evaluación de un sistema informático.
A continuación corregimos algunos ejercicios de autoevaluación hechos por los alumnos en sus blogs. Corrigiendo uno de ellos surge una cuestión, si es necesario o se aprecia diferencia al jugar a un juego que muestre 40 frames por segundo o jugar a uno que solo muestre 26, ya que 26 es el número máximo de imagenes por segundo que puede apreciar el ojo humano y por lo tanto, un juego que muestre 40 frames/s serán desperdiciados más de los 26 que acepta el ojo humano.Al corregir otro ejercicio nos encontramos con "
Fast path", que es un servicio que te dan las compañias del ADSL que hace que disminuya la latencia. En verdad lo que hace esto es desactivar el Interleaving que lo que hace es una comprobación de errores que aumenta el retardo. La latencia, que es la suma de retardos temporales dentro de la red, es un parametro importante al comparar proveedores de ADSL. El ancho de banda y la latencia son parámetros de velocidad pero el ADSL se mide por ancho de banda.

Diferencia entre módem antiguo y un módem adsl: un módem adsl puede enviar varias transmisiones de datos a la vez, hasta que se llene el canal, mientras que un módem normal solo puede enviar una transmisión desperdiciando toda la capacidad del canal.

Comprobamos con unas pruebas de ping desde el servidor de la UGR y desde otro servidor externo que la latencia de la UGR es altísima.

Ahora seguimos con el temario:

1.3 Selección de las métricas de prestaciones:
1 - Tasa de responsividad: tiempo de respuesta.
2 - Tasa de productividad: número de respuestas procesadas por segundo
3 - Tasa de utilizacion: recursos utilizados por unidad de tiempo.
La fiabilidad solo tiene una métrica que es el MTBF (tiempo medio entre fallos)La disponibilidad, que se mide en procentajes es el tiempo que un recurso está disponible. Esto se mide con número de 9, siendo el maximo 99.999%. Nosotros normalmente mediremos el número de peticiones que se han realizado correctamente.Medir tarjetas gráficas: por frames (intentando que no haya redundancia en las medidas). Hay que elegir medidas que definan el sistema que has medido. Por ejemplo en un hosting habrá que medir latencia, ancho de banda,...
Medir tarjetas graficas con un fin genérico: mostar fuentes, cambiar contexto, abrir ventanas, scrolling de ventanas, dibujar objetos en 3d y girarlos, precision en el color aunque no sabriamos el color con precision porque interviene el monitor que recibe (en un monitor digital) directamente el RGB de los pixels, ...Después de esto, Vkthor no introduce en el mundo de los
motores gráficos de juegos.
Metricas de prestaciones: hay metricas que cuanto más alto mejor (como velocidad y ancho de banda) otras q cuanto más bajo mejor (como latencia) y otras como nominal es mejor, que tiene una variable que a determinados valores está bien o mal ( por ejemplo una CPU a 0º o a 100º estaria mal, y bien seria entre 50º-70º)Vemos la carga de un servidor por ejemplo blogalia y obtenemos 0.99 1.11 1.17 que son unas medidas de tipo nominal es mejor.
Hoy en dia ya no aumenta la velocidad de los procesadores, hemos llegado a un estancamiento con los 3 GHz, ahora lo que aumenta es la capacidad del procesador de utilizar los mismos GHz pero consumiendo mucho menos.Metricas que utilizaremos en un compilador para medir varios: tamaño del ejecutable (nominal o menor es mejor), tiempo de compilación (menor es mejor), velocidad del ejecutable (menor es mejor)1.4 Tecnicas de evaluacion de un sistema informatico:Un procesador es un programa informático que se hace con un lenguaje de programación, lo ejecutas, miras los fallos, miras el pipeline, en definitiva, corregir los errores y hacerlo más eficiente; pero para ejecutar ese programa hay que hacerlo en un super ordenador porque hay que ejecutar para un procesador de 3GHz 3000 millones de instrucciones en un segundo. Para simular redes se utiliza el programa simics.1.5 Medicion de la carga de un sistema:
Se puede ver que están haciendo los sistemas a bajo nivel para poder compararlos.Los monitores sirven para medir la carga del sistema. Son programas independientes o son pedazos de codigo adjunto a un programa que se llaman profiler. Los monitores a veces tienen un cliente y un servidor.

Monitor en linux: ps que dice qué procesos se están ejecutando en ese momento. ps es un cliente y el kernel es el servidor.Tambien vmstat dice cuantos programas se están ejecutando, memoria, etc. Y por supuesto el monitor de windows.Y para terminar vemos el video del dia:
monitorizando Windows XP.

DYEC - 26 de Febrero de 2008

Al comenzar la clase vimos una pequeña introducción al wiki y después una serie de ejercicios de autoevaluación de éste año y anteriores.

A continuación pasamos a ver una de las partes más importantes de la asignatura:

Fases en la evaluacion de un sistema informatico
1. Especificar los objetivos y definir el sistema: Al comparar un sistema siempre hay que hacerlo teniendo un objetivo concreto.
Ejemplos:

· Comparar dos proveedores de Internet: utilizando el mismo PC, el mismo router y las mismas condiciones compararlos definiendo previamente el objetivo de la comparación que puede ser velocidad, subida, bajada, etc.
· Comparar dos tarjetas gráficas: hay que utilizar el mismo SO y los objetivos de la comparación pueden ser la velocidad de renderizado de figuras 3D, etc.
· Comparar dos procesadores: procesadores que tengan el mismo socket para pinchar uno y pinchar otro. Y ejecutar un programa con cada uno una vez definidos los objetivos de la comparativa.

Para hacer la comparación hay que indicar el sistema muy concretamente.2. Hacer una lista de los servicios que ofrece el sistema y sus posibles resultados: Los servicios que ofrece una tarjeta gráfica, por ejemplo, son: renderizar figuras en 3D, texturas, mostar caracteres en pantalla, sacar y meter datos en la memoria grafica,...

Curiosidad:¿Cómo se representa una fuente? Con una matriz de pixeles. Si el tamaño de la fuente es muy grande se utilizan splines, cada fuente es una función. La representación de las fuentes en postcripts estaba restringida. La tarjeta gráfica controla la representación de las fuentes.3.
Seleccionar las métricas: Un servidor web por ejemplo, tiene su propio intérprete de órdenes, multihebra y multiproceso, sirve páginas web dinámicas y estáticas, accede a BD etc. por lo que cualquiera de estos servicios que ofrece pueden utilizarse para la comparativa.

Tomando como ejemplo la comparación de impresoras, las páginas por minuto, la exactitud en la representación de los colores, el consumo de tinta, la precisión (cartas de ajuste en los televisores), etc. son criterios para comparar las prestaciones.
Al comparar dos compiladores los criterios son: tiempo en generar, tamaño del programa generado, tiempo en ejecutar, etc.

Curiosidad:
Las tarjetas gráficas tienen unos cuadros denominados pantone el cual es un sistema de control de color que contiene una lista clasificada con los diversos tipos y tonalidades de colores.
4. Listar los parámetros que pueden afectar a las prestaciones: las características del sistema y la carga de trabajo a la que está sometido. Por ejemplo, queremos medir dos ordenadores con una BD, la instalamos y la memoria se rompe y le metes el doble de memoria por lo que ya varían las características del sistema. Otro ejemplo es como el modo en el que un servidor web sirve 400 páginas recién arrancado y como las sirve después de estar un determinado tiempo en funcionamiento. Esto es debido a muchos factores y uno de ellos puede ser la temperatura del procesador que influye en la velocidad del mismo. También el uso de dos drivers distintos del mismo dispositivo influye en las prestaciones.
5. Factores a estudiar: de los parámetros anteriores, algunos se variarán durante el estudio, los diferentes valores que tomarán durante el estudio se denominan niveles
6.
Seleccionar las técnicas de evaluación: que pueden ser las siguientes:

· Simulación: no trabajas con el modelo real sino con un modelo parecido pero matemático (Bochs: simula un ordenador dentro de otro).
· Medición. Es el modelo que nosotros usaremos.
· Modelización.

7. Seleccionar la carga de trabajo: la carga de trabajo es una síntesis de lo que suele hacer el ordenador normalmente. Por ejemplo al comparar dos tarjetas graficas que las vamos a utilizar para juegos pues instalaremos para la comparación diferentes demos de juegos para ver como funcionan sobre las tarjetas.8. Diseñar los experimentos: Decir cómo y cuando vamos a hacer las mediciones y con qué ordenador estamos trabajando. Al comparar por ejemplo una impresora tendremos que indicar el estado de los cartuchos, si está recién arrancada, etc.9. Analizar e interpretar los datos: no poner todos los datos sino los datos finales una vez ya interpretados.

Nota: Un Profiler sirve para identificar que parte de un programa está causando más gasto de recursos y tiempo. 10. Presentar los resultados: utilizar gráficos en vez de tablas para que los datos sean más rápidamente comprendidos.

NOTA: Al hacer el trabajo final hay que incluir estos 10 pasos.



Después vimos más ejercicios de autoevaluación y vimos algunos fallos como el siguiente:

“Ejercicio de autoevaluación:1. Especificar los objetivos y definir el sistema: En el caso de tener dos o más impresoras, obtener los tiempos de impresión a color, blanco y negro, tiempo a la hora de imprimir, para escoger la que mejor se adapte a lo que necesitamos. “

--> El ejercicio estaría mal porque no sabemos el objetivo de la comparación.
Y para concluir la clase vimos un video de un
Windows 95 funcionando sobre una PSP.

Nuevo blog pero ahora en .com

Visto lo visto con las copias piratas de blospot.es, vuelvo a extrenar blog para la clase de DYEC en la ETSIIT pero ahora en blogspot.com. Voy a publicar aquí las entradas anteriores pero las originales seguirán estando en el antiguo blog: http://miguel-angel-medina.blogspot.es