Download EVALUACIÓN Y CONFIGURACIÓN DE EQUIPOS INFORMÁTICOS
Document related concepts
no text concepts found
Transcript
EVALUACIÓN Y CONFIGURACIÓN DE EQUIPOS INFORMÁTICOS Javier Téllez 1 Objetivo: Realización de distintas pruebas para medir y comparar el rendimiento de distintas arquitecturas. 1. En teléfonos móviles 1.1 1.2 1.3 1.4 1.5 Pruebas Simulación Prueba real sobre el Nokia 6230 Prueba real sobre el Sony Ericsson K300 Prueba sobre un ordenador portátil 2. Estrés térmico en un Intel Pentium 100 2 1. EN TELÉFONOS MÓVILES No sólo los ordenadores, ya sean de escritorio, portátiles y de ahí para arriba tienen derecho a tener procesadores potentes no? También los teléfonos móviles, y no hace falta ir a los smartphones de última generación, a las PDA con WindowsCE, o a la que ha sacado Nokia bajo Linux1, para encontrarnos aparatos con procesadores de buenas prestaciones. El primer dispositivo en que se realizarán las pruebas de rendimiento es un Nokia 6230. Sólo nos interesan algunas de sus características2: Aplicaciones Java™ Todas las aplicaciones pueden eliminarse Juegos y aplicaciones personales descargables a través de tecnología Java™ (MIDP 2.0) Tamaño máximo de descarga: 128 KB por aplicación Conexiones Navegación XHTML (WAP 2.0) a través de pila TCP/IP Transmisión de datos GPRS (General Packet Radio Service)* Clase 10 (4+1, 3+2) EDGE* Clase 10 (4+1, 3+2): Velocidad de hasta 236,8 Kbit/s Transferencia de datos de hasta 43,2 Kbit/s en redes HSCSD Multitarea TCP/IP Personalización Midlets Java Juegos: Posibilidad de descargar nuevos juegos Si no tuviera soporte para aplicaciones Java, en concreto la configuración CLDC (Constrained Limited Device Connected) y alguno de los perfiles MIDP1.0 o MIDP2.0, sería bastante complicado poder ejecutar aplicaciones (llamadas Midlets en este entorno) en el dispositivo. En concreto, se pueden escribir aplicaciones en Java usando las librerías que ofrece gratuitamente Sun Microsystems a través de su página Web. También puede descargarse el WTK (Wireless ToolKit) de Sun, o de otro fabricante, Nokia, Sony Ericsson, que es una de las que mejor soporte y código fuente aportan, etc. Para el código de este trabajo se ha empleado el IDE de Eclipse (gran consumo de memoria, pero sin duda de lo mejor que hay) y el plugin WTK de Sony Ericsson para su integración en Eclipse. 1 Como dato curioso, fue presentado en la La II Conferencia Internacional de Software Libre Málaga (sin participación activa de la UMA), por el responsable de Nokia para la zona occidental de Andalucía, con bastante mala fortuna. Le pasó casi lo mismo que a Bill Gates. Durante la presentación, en un portátil que parecía en las últimas, apareció de pronto el mensaje “Windows se está preparando para la suspensión” en primer plano. Los reunidos comenzaron a reirse ante el hecho, ya que la conferencia era sobre la presentación de un nuevo producto que funcionaba bajo Linux, en unas conferencias donde la mayoría usaba, y hasta llevaban su portátiles con Linux. Salió por su propio pie. 2 http://www.nokia.es/telefonos/modelos/nokia6230/caracteristicas_id6230.jsp 3 El procesador que usa el Nokia 6230 es un modelo de las casa ARM, en concreto un ARM9. Así nos lo describe ARM: El amplio conjunto de características de la familia ARM9 permite a los desarrolladores implementar sistemas punteros, al mismo tiempo que se permite un considerable ahorro en área de integración del chip, tiempo de desarrollo, costes de los mismos y consumo. La familia ARM9 ofrece un rango de núcleos de microprocesadores RISC de 32 bits, de alto rendimiento y optimizados para bajo consumo, para una amplia variedad de aplicaciones. Construidos alrededor del núcleo del robusto procesador ARM9TDMI, la familia ARM9 trabaja hasta a 250 MHz sobre una tecnología de 0.13µm, incorporando el juego de instrucciones de 16 bits Thumb, que mejora la densidad del código hasta un 40%. La familia ARM9 abarca los procesadores “cached processor macrocells” ARM920T y ARM922T, cada uno de los cuales ha sido desarrollado para entornos con diferentes necesidades: • ARM922T: Dual 8k caches para aplicaciones bajo Symbian OS, Windows CE, Linux y Palm OS • ARM920T: Dual 16k caches para aplicaciones bajo Symbian OS, Windows CE, Linux y Palm OS Sus características más destacadas se listan a continuación: Procesador RISC de 32 bits y juegos de instrucciones ARM y Thumb. 5 etapas de segmentación (búsqueda, decodificación, ejecución, memoria y escritura). Interfaz de interconexión AMBA única de 32 bits. Unidad de gestión de memoria (MMU Memory Management Unit) soporta WindowsCE, Symbian OS, Linux y Palm OS. Cachés de datos e instrucciones integradas. Buffer de escritura de 8 entradas, para evitar que el procesador se quede atascado cuando se realizan escrituras a la memoria externa. Portable a tecnologías de integración en silicio de 0.18µm, 0.15 µm y 0.13 µm. El diseño del procesador permite ajustar dinámicamente la velocidad del procesador, o incluso pararlo, para ajustarse a las necesidades inmediatas de procesamiento. El bus del sistema y la memoria externa pueden también marchar a una velocidad menor que el procesador, para reducir el consumo de memoria. Cachés Write-back y Write-through seleccionables por regiones. Sistema de interrupciones de baja latencia y soporte para memoria virtual para aplicaciones bajo SO. 4 Otra visión del núcleo de ambos procesadores. La principal diferencia es el tamaño de las cachés. 1.1 PRUEBAS Para realizar las pruebas se ha escrito un pequeño Midlet3 de Java para su ejecución en el teléfono móvil. En el caso del Nokia 6230, tras crear la aplicación y empaquetarla en su correspondiente archivo .jar y su descriptor con extensión .jad, se transfiere al móvil usando la aplicación que para ello ofrece Nokia en su página Web, el PC Suite. Otra forma hubiera sido subirlos a un servidor y descargarlos desde el móvil a través de una conexión GPRS con el servidor. La primera solución es más barata. Las dos pruebas a realizar son simples debido a la poca pericia del autor de este trabajo. Primero se intentará medir la velocidad del procesador ejecutando instrucciones que teóricamente sólo requieren de un ciclo para su ejecución, como una operación de testeo o sumar 2. Como se emplea Java, hace falta un intermediario (la máquina virtual) que es el encargado de recoger el código (bytecode) e interpretarlo sobre el hardware del teléfono. Las modernas máquinas virtuales usan compilación JIT (Just In Time) que compila el código tras la carga del programa para producir código nativo de la plataforma sobre la que se ejecuta. La segunda prueba está relacionada con la memoria y también con la capacidad de cálculo. Consiste en multiplicar dos arrays arrays bidimensionales (matrices), multiplicarlas y calcular su traza. Esta operación se repite gran cantidad de veces, con lo que hay que alojar gran cantidad de objetos en memoria, ya que se crea para cada iteración un nuevo objeto Matriz (con tres arrays bidimensionales para las operaciones). La interfaz gráfica es lo más simple posible, para no molestar al procesador con tareas pesadas que falsearían la medición. 3 El proyecto generado para esta aplicación se encuentra en el directorio junto con este documento en la carpeta “CEI” 5 La clase Midlet es la que se carga al inicio, y desde ésta, cuando se presione “Empezar” se ejecutarán las pruebas, en el método commandAction. import javax.microedition.midlet.*; import javax.microedition.io.*; import javax.microedition.lcdui.*; import java.util.*; import java.io.*; /** * @author jtellez */ public class CEI extends MIDlet implements CommandListener { public static Display display; private Form f_inicio; public static Command ENTRAR_COMMAND = new Command("Empezar", Command.ITEM, 0); public static Command SALIR_COMMAND = new Command("Salir", Command.EXIT, 1); private StringItem si; private StringItem sii; //********* CONSTRUCTOR PRICIPAL ************************************ public CEI() { //obtengo la referencia unica a la pantalla del dispositivo display = Display.getDisplay(this); ///////////// INICIALIZACIÓN PANTALLA PRINCIPAL ///////////////////////// f_inicio = new Form("Evaluación CEI"); f_inicio.addCommand(ENTRAR_COMMAND); //los dos comandos en la base del móvil f_inicio.addCommand(SALIR_COMMAND); si = new StringItem("", " "); f_inicio.append(si); sii = new StringItem("",""); f_inicio.append(sii); f_inicio.setCommandListener(this); //para los dos comandos: Empezar y Salir display.setCurrent(f_inicio); //esto pone el formulario en la pantalla del móvil } public void startApp() { Runtime runtime = Runtime.getRuntime(); runtime.gc(); long free = runtime.freeMemory(); //al empezar pongo la cantidad de memoria long total = runtime.totalMemory(); //total y libre del móvil en pantalla si.setText("Mem libre=" + free + "\n"); sii.setText("Mem total=" + total + "\n"); f_inicio.append("Pulse Empezar!\n"); } public void pauseApp() { } public void destroyApp(boolean unconditional) { } 6 public void commandAction(Command c, Displayable s){ if (c == SALIR_COMMAND) { destroyApp(true); notifyDestroyed(); } else if (c == ENTRAR_COMMAND) { f_inicio.append("Probando procesador...."); Matriz matrix = new Matriz();// = new Matriz(); f_inicio.append(matrix.getPerformanceDetails()); // velocidad CPU long inicio = new Date().getTime(); for (int i=0; i<900;i++){ matrix = new Matriz(); matrix.multiplica(); //multiplicación masiva de 2 matrices } long fin = new Date().getTime(); f_inicio.append("Prueba con matrices."); f_inicio.append("traza="+matrix.traza()); f_inicio.append("tiempo="+String.valueOf(fin-inicio)+"ms"); //tiempo xra multiplic } } } 7 La segunda clase de la aplicación es la clase Matriz, multiplica matrices cuadradas e intenta estimar la velocidad del procesador /** * Clase Matriz, xra multiplicar 2 matrices y producir una tercera y para calcular la *velocidad del procesador */ public class Matriz { int size = 3; int[][] m1 ={ {9919,11121,3111}, {8311,81411,81311}, {81711,8811,81311} }; int[][] m2 ={ {91919,11121,63111}, {87311,87411,8311}, {87711,87811,8311} }; int[][] m3 = { {0,0,0}, {0,0,0}, {0,0,0} }; public void multiplica(){ for (int i=0;i<size;i++) for (int j=0;j<size;j++) for (int k=0;k<size;k++) m3[i][j] += m1[i][k] * m2[k][j]; } public int traza(){ int sum=0; for (int i=0;i<size;i++) sum += m3[i][i]; return sum; } /** * Velocidad estimada de la CPU en MHz, suponiendo que se usa un compilador * Java. Se supone que operaciones simples sólo consumen 1 ciclo. *En maxi se guarda el máximo nº de iteraciones para calcular la velocidad * The estimated speed of the CPU multiplied by 10 to have one decimal *figure. * This decimal figure is rounded to the nearest value. If maxi is to low to *measure the time, returns 0. */ public int getMHz(int maxi){ int i= 2; long duration, start= System.currentTimeMillis(); while (--maxi != 0) { if ((maxi & 1) == 0) i += 2; } duration= System.currentTimeMillis() - start; int mhz= 0; if (duration != 0) 8 { // mhz = nº ciclos para el bucle : 6 // * nº bucles : i // / (nº ciclos por segundo en 1MHz / nº ms en 1s / 100) // = 1000000 / 1000 /100 // = 10 así k divido por 10 // / duración en ms // mhz tiene valor en MHz multiplicado x 100 para // tener 2 dígitos decimales mhz= (int) (6l * (long)i / 10l / duration); // el decimal if ((mhz - (mhz / 10) * 10) >= 5) mhz= mhz + 10; mhz /= 10; if (mhz == 0) mhz= 1; } return mhz; } /** * Se usa la función anterior para dar detalles */ public String getPerformanceDetails(){ long start, duration, memoryDuration; int mHz= 0; int nbIter= 10; final int minimumDuration= 1500; int memoryNbIter; do{ if (nbIter < 0){ nbIter= Integer.MAX_VALUE; } start= System.currentTimeMillis(); mHz= getMHz(nbIter); duration= System.currentTimeMillis() - start; Thread.yield(); if (duration < 50){ nbIter *= 10; } else if (duration < minimumDuration){ int newNbIter= minimumDuration * nbIter / (int)duration * 12 / 10 + 1; if ((duration <= minimumDuration / 2) && (newNbIter > nbIter)) nbIter= newNbIter; else nbIter *= 2; } } while (((mHz == 0) || (duration < minimumDuration)) && (nbIter != Integer.MAX_VALUE)); int realMHz= mHz * 18; return "Velocidad procesador java virtual: "+ + mHz / 10 9 + "." + (mHz - (mHz / 10) * 10) //decimal figure +"MHz\n" + "Tan rápido PIII (sin JIT) a " + realMHz / 10 + "." + (realMHz - (realMHz / 10) * 10) //decimal + "MHz\n" + "Num bucles: " + nbIter + "\nduración:" + duration + "ms"; } }//fin Matriz Se toma como referencia un Pentium III en cuanto a los números usados. 1.2 Simulación A continuación se empaqueta el Midlet, llamado CEI en un archivo .jar, y se simula en primer lugar con el Wireless Toolkit de Sun, habilitando el monitor de memoria en el diálogo de propiedades. Un Midlet puede tener dentro varias aplicaciones, así que el emulador presenta una lista. En nuestro caso sólo hay una, CEI, así que sólo hay que pulsar el botón Launch. La siguiente es una captura de video (DIVX Pro 5.1.1) que empieza una vez se ha cargado e inicializado la aplicación. La línea verde de consumo de memoria se ha estabilizado tras la carga de los objetos de inicio. Este video enlaza al archivo correspondiente que acompaña al presente documento, ya que el archivo de video incrustado en Word no se visualiza bien. Para ver la captura de 35seg. pinchar dos veces sobre la siguiente figura. La simulación se ha ejecutado dos veces (dos pulsaciones sobre botón Ejecutar) para ver mejor el consumo de memoria. También puede verse al principio y casi al final cómo actúa el recolector de basura.Aunque es difícil de apreciar, al principio se estima la velocidad de trabajo, 10 así que no hay mucho consumo de memoria. Es cuando empieza la segunda prueba, de creación y multiplicación intensiva de matrices cuando entra en juego la memoria. En la figura siguiente se puede ver una instantánea casi al final de la simulación anterior. 1.3 PRUEBA REAL SOBRE EL NOKIA 6230 Las pruebas ya realizadas sobre el simulador se harán a continuación sobre un dispositivo real. En primer lugar sobre un Nokia 6230 y a continuación sobre un Sony Ericsson K300. Las capturas se han hecho con con la cámara del teléfono no sometido a la prueba. Hemos de advertir que sólo servirán como testimonio de haber realizado las pruebas, ya que sus respectivas cámaras son tan pobres de calidad que apenas si se logra distinguir algo. Esta es la pantalla del Nokia tras cargarse la aplicación CEI. Se puede ver con esfuerzo la cantidad de memoria total y libre del aparato. Tras pulsar la tecla Empezar, se ejecuta la prueba, primero la medida de velocidad de la CPU y a continuación la prueba con las matrices. En las captura siguiente, una vez finalizada la ejecución de la prueba, se aprecia el resultado en cuanto a velocidad. Arriba puede leerse “Evaluación CEI”. Trascribimos lo que aparece en el móvil para que sea legible: 11 Mem libre=1007280 Mem total=1024000 Pulse Empezar! Probando procesador… Velocidad procesador java virtual: 10.2MHz Tan rápido PIII (sin JIT) a 183.6MHz Num bucles: 3103448 Duración: 1819ms Prueba con matrices Traza=935273269 Tiempo=117ms (sólo de la prueba de matrices) 1.4 PRUEBA REAL SOBRE EL SONY ERICSSON K3004 En este caso, las capturas de imágenes son aún peores si cabe, aunque la captura de video de la derecha (formato .3gp pasado a DivX) puede resultar algo más interesante aunque no se pueda distinguir detalle.. Mem libre=505848 Mem total=524284 Pulse Empezar! Probando procesador… Velocidad procesador java virtual: 29.8MHz Tan rápido PIII (sin JIT) a 536.4MHz Num bucles: 9045226 Duración: 1820ms Prueba con matrices Traza=935273269 Tiempo=152ms (sólo de la prueba de matrices) Es curioso comprobar que también en el caso de los teléfonos móviles, los fruteros tendrían las de perder si sólo se fijaran en la frecuencia. El sony ericsson, casi triplicando la frecuencia del Nokia, pierde en todas las pruebas de rendimiento. Aun sin datos numéricos se puede comprobar claramente, tras un rato con el teléfono en la mano, que el Nokia se comporta mucho mejor que el sony ericsson en términos de rendimiento. 4 No he conseguido información rotunda sobre el procesador de este modelo, pero todo apunta a que es un hermano gemelo del K500, que lleva un procesador ARM de la familia ARM9E. Especificaciones técnicas en http://www.arm.com/products/CPUs/families/ARM9EFamily.html 12 1.5 PRUEBA REAL SOBRE UN PORTÁTIL En concreto se trata de un ordenador portátil Toshiba Satellite SA60-111. Con un Pentium 4 Norwood a 2.80GHz. El resto de características se muestran en las siguientes figuras. En este caso para ejecutar el test basta con invocar la instrucción java CEI desde usar una ventana de comandos. Esta vez, la clase CEI sólo ha de contener el método main(), y dentro la llamada a la función de medida de la velocidad, y el bucle para la multiplicación de matrices. Además se omiten las referencias a memoria porque no son de interés. El resultado es el siguiente: El resultado de la velocidad (la segunda línea no es aplicable aquí) se acerca mucho a los 2.8GHz del portátil sobre el que se ejecuta la prueba. 13 2. ESTRÉS TÉRMICO EN UN INTEL PENTIUM 100 La última prueba, que prometía ser algo más interesante, no dio de si todo lo esperado. El objetivo es someter a un microprocesador a una dura prueba de estrés térmico hasta llevarlo al límite físico, aquel que de lugar a su destrucción. Para ello se ejecutarán pruebas sobre el equipo que hagan uso intensivo del procesador, pero sin contar éste con la ayuda de su disipador ni el ventilador. En concreto, se ejecutarán el benchmark para la cpu del programa comercial PC Wizard 2006. El equipo sobre el que se ejecutará la prueba es un viejo equipo de sobremesa con un procesador Pentium 100, con 16Mbytes de memoria RAM. La placa base no ofrece información sobre la temperatura del procesador, por lo que el programa MBProbe para la monitorización de ésta no es de utilidad. Tras esto, el tiempo que es capaz de aguantar “vivo” el microprocesador, es uno de los datos interesantes a verificar. Para la documentación de la prueba se utilizó una webcam para grabar y dejar constancia de la misma. Los videos son de considerable tamaño y se encuentra en el directorio “TrabajoCEI” con nombres “CEI_x”. Se detalla a continuación la cronología de los momentos más interesantes. El único momento interesante del primer vídeo, CEI_1 es el principio. Se puede ver el sistema, funcionando bajo Windows 98, una vez ha arrancado y el programa PC Wizard 2006 está listo para comenzar. A continuación se ofrece una vista de la placa base, deteniéndonos en los módulos de memoria SIMM, para acabar en un primer plano del procesador alrededor del instante 20seg. Justo a continuación, se procede a quitar el ventilador y el disipador térmico del lomo del Pentium 100 (previamente desenganchado del mismo). Los más de siete minutos restantes transcurren sin novedad. Al final puede verse en el monitor cómo el sistema sigue funcionando. Parece como si las pruebas ni hicieran las más leves cosquillas al microprocesador, pero no es así. En el vídeo CEI_2, transcurridos 25seg. se vierte una gota de agua sobre el lomo del mismo, y se puede apreciar como se disuelve casi automáticamente fruto del intenso calor. También al final de este vídeo puede verse el resultado del benchmark en el monitor. El tercer vídeo pone de manifiesto dónde se encuentra la zona más activa del procesador. Tras 40seg. se puede ver cómo una gota de agua cae en el centro del chip y se disuelve velozmente, mientras que si cae sólo unos milímetros más allá tarda casi 30seg. en evaporarse. El último vídeo intenta mostrar, de forma muy rudimentaria, qué partes del microprocesador alcanzan mayor temperatura. Para ello, se deja, a partir del instante 2m20seg; y 6m40seg sendas huellas transversales sobre el lomo del chip. El equipo estuvo más de 1h sometido sometido a esta prueba, desprovisto de su ventilador y disipador, sin mostrar el más leve signo de desfallecimiento. Desde luego merece un premio. 14