Multitarea en segundo plano (Informe tecnológico para profesionales informáticos) Prólogo: Este informe es una introducción de carácter general a estas tecnologías cuyo objetivo es proporcionar un conocimiento más preciso de determinadas limitaciones inherentes a los sistemas operativos modernos. No está pensado como presentación de un estudio científico. Es preciso señalar que, para mayor brevedad, las descripciones del diseño y el comportamiento de los sistemas operativos, aunque plenamente correctas, se presentan de forma simplificada. DESCRIPCIÓN GENERAL La multitarea es un método que permite compartir recursos del sistema de manera que varios procesos1 parezca que se ejecutan a la vez. Ejemplo de ello es la posibilidad de ejecutar un editor de textos y una aplicación de hoja de cálculo al mismo tiempo. Sin embargo, un componente de un equipo diseñado para uso general, como es la CPU, sólo puede ejecutar las tareas de una en una. La multitarea crea la ilusión de que todas las ejecuciones se producen simultáneamente mediante la implementación de un sistema de programación de subprocesos2. Se trata en definitiva de la virtualización de la CPU, diseñada para hacer creer a las aplicaciones que poseen la CPU de forma exclusiva. Las CPU más potentes y rápidas pueden ejecutar tareas de gran tamaño o lograr una ejecución más productiva en un período de tiempo determinado. El multiproceso amplía los principios de la multitarea a varias CPU, lo que de hecho permite a los subprocesos ejecutarse simultáneamente, mientras que la multitarea finge este comportamiento. El multiproceso, al igual que la multitarea, continúa teniendo una capacidad de procesamiento limitada a una acción en todo momento en cada CPU. En este documento, nos referiremos a la multitarea para describir la gestión de subprocesos del sistema operativo. Visión en profundidad de la multitarea: Los sistemas operativos de hoy en día utilizan diversas técnicas de multitarea. Los sistemas informáticos modernos, como Windows®, Linux®, UNIX® y Mac OS® X, utilizan una forma de multitarea conocida como multitarea preventiva con varias diferencias específicas en cada caso. La multitarea preventiva es un mecanismo más eficaz para garantizar la compartición de recursos, ya que diferencia los procesos (es decir, de E/S entrada/salida- o de la CPU) e integra la espera de E/S con el fin de no retrasar procesos que no necesitan respuestas de dispositivos de E/S (como los datos devueltos de una unidad de disco duro). La aplicación de la programación preventiva en Windows NT® (hasta XP, es decir, hasta NT 5.1), aunque no tiene un carácter puro, es más avanzada que en las versiones anteriores de Windows basadas en MS-DOS®, en el sentido de que separa mejor los procesos por el recurso que utilizan (por ejemplo, el uso intensivo de la CPU frente al uso de E/S). También es de gran importancia el hecho de que permite priorizar los procesos. La priorización implica la implementación de un sistema mediante el cual un proceso y sus subprocesos asociados pueden considerarse más importantes, de igual importancia o menos importantes que otro proceso. Un sistema de programación básicamente "circular" asigna posteriormente espacios de tiempo de recursos disponibles para los procesos activos. Sin embargo, el sistema de valores de la priorización es relativamente rutinario, ya que se basa en el proceso para definir de forma general la importancia de éste. También aplica un sistema de valores numéricos (valores entre 0 y 31) en el que un número más alto indica una mayor importancia. Un proceso con el valor 8 recibirá mayor acceso a los recursos que un proceso con un valor de prioridad de 4, pero menor que un proceso que se ejecute con una prioridad de 13. Los procesos que tienen el mismo valor numérico (por ejemplo, un editor de textos y una hoja de cálculo que tienen el valor 8) se consideran iguales y deben "repartirse" los recursos por igual. 1 2 Un proceso es el componente de control que gestiona uno o varios subprocesos relacionados. Un subproceso es el código en sí, administrado dentro del contexto de un proceso, que el sistema ejecuta. Un sistema de compartición de recursos ideal debería conocer mejor los procesos no relacionados que comparten un mismo valor de prioridad y podría subdividir aun más los recursos. Posteriormente, en función de las necesidades reales en cada momento, podrían compartir los recursos de manera más efectiva, en lugar de basar el reparto en un valor de prioridad preestablecido relativamente rutinario. La multitarea preventiva de Windows NT no permite lograr esto. La multitarea preventiva sí ofrece una implementación muy básica de la asignación dinámica de recursos para garantizar una mejor diseminación de los recursos del sistema entre los procesos con prioridad alta y baja. El mecanismo de programación de subprocesos de NT puede ajustar dinámicamente (aumentar o reducir) un valor de prioridad para un proceso determinado en relación con su prioridad base asignada y con sus características de ráfaga de E/S-CPU3 (es decir, un proceso dirigido a la CPU frente a un proceso dirigido a E/S) para dar cabida a un eventual acceso a los recursos. La justificación de los cambios de prioridad simplemente depende de si se deja sin atender a un proceso (no se le concede tiempo de uso de los recursos) debido al influjo de procesos de alta prioridad. En estos casos, el programador puede reducir dinámicamente la prioridad de los procesos y aumentar el derecho de acceso a los recursos por parte de otros procesos. El fenómeno que se deriva de ello es que el programador concedería a un proceso de baja prioridad destinado a E/S mayor tiempo de uso de los recursos del que normalmente le concedería si no se le hubiera dejado sin atender. Aunque el uso de interrupciones4 permite el bloqueo de procesos destinados a E/S, es importante señalar que los procesos no se dejan sin atender durante más de 3-4 segundos. Con procesadores que operan a velocidades del orden de los gigahercios, unos pocos segundos pueden parecer, retrospectivamente, una eternidad, pero dicho retraso se produce. Como puede observarse, este sistema garantiza que todos los procesos obtengan acceso a los recursos y que todos los procesos se ordenen al menos de una forma simple de importancia relativa. Sin embargo, se observan algunos defectos en este diseño. Puede apreciarse que algunas aplicaciones activas en un sistema, a las que se asignan recursos cada 3-4 segundos, pueden y deben quedar sin atender en su demanda de recursos hasta que ningún otro proceso los necesite. Asimismo, como ya se ha sugerido, la priorización entre aplicaciones aparentemente "iguales" es relativamente rutinaria. Esto resulta obviamente inadecuado cuando aplicaciones realmente de baja prioridad que pueden esperar indefinidamente (o casi indefinidamente) a la asignación de recursos reciben recursos a la fuerza. INVISITASKING™ – “El verdadero procesamiento en segundo plano hecho realidad” InvisiTasking es una nueva tecnología diseñada para mejorar la multitarea y resolver algunos de los defectos relativos a la falta de “información suficiente”. Disponer de más información permite compartir mejor los recursos. InvisiTasking está específicamente diseñado para lograr que la aplicación “de segundo plano” se ejecute realmente en segundo plano y no interfiera en procesos de mayor prioridad, como, por ejemplo, el procesamiento de transacciones5, la puesta en cola para imprimir y, en definitiva, cualquier otra cosa que no sea tiempo desperdiciado de reposo del sistema. A diferencia de la multitarea, que se integra en el kernel del sistema operativo, InvisiTasking funciona actualmente en modo de usuario. Esto significa que no va a resolver actualmente todos los problemas inherentes a la esencia de la multitarea en lo que se refiere a una aplicación de segundo plano, pero va a mitigar los defectos inherentes a ésta hasta el punto de que dejen de ser un problema. Esto exige, por supuesto, que la aplicación esté escrita para aprovechar esta tecnología. Visión en profundidad de InvisiTasking: Dado que los recursos de la CPU y de E/S casi nunca se utilizan completamente, la transparencia de InvisiTasking se logra aprovechando de manera indetectable estos recursos no utilizados del sistema. Los ingenieros de software 3 Una ráfaga es una transmisión de datos inesperada y ocasional. Una interrupción es una notificación a un programa de que algo ha ocurrido (por ejemplo, que el usuario ha pulsado una tecla en el teclado). Ésta puede desencadenar acciones posteriores o ser simplemente ignorada. 5 La acción de realizar una operación de E/S que cambia los datos en el sistema de archivos. 4 a veces intentan compartir recursos eligiendo prioridades más bajas de ejecución en la CPU, al tiempo que se han realizado esfuerzos en el pasado por ajustar la intensidad de E/S de discos y redes. Sin embargo, el objetivo de un software verdaderamente transparente no se había logrado hasta ahora. Para lograr una transparencia real, es preciso supervisar la CPU, la memoria y, lo que es más importante, las unidades de disco y la red, que son los principales responsables de los atascos en el hardware. InvisiTasking adopta un enfoque proactivo para detectar al instante el uso de los recursos mientras se mantiene el control granular de su propia actividad, lo que garantiza que nunca obstaculice a usuarios o servicios. La clave, por supuesto, está en demostrar que la teoría de InvisiTasking se mantiene en la práctica… COMPROBACIONES DE REFERENCIA DE INVISITASKING Para demostrar la efectividad de InvisiTasking, se han realizado diversas pruebas de referencia. Diskeeper® Corporation escribió una herramienta de 32 bits, llamada DkCopy, para demostrar las ventajas de InvisiTasking. DkCopy es una herramienta de copia de archivos muy sencilla que copia un archivo de un lugar a otro (modo estándar). DkCopy es, en este modo estándar, representativa de aplicaciones empresariales típicas, como SQL, Lotus Notes®, Microsoft® Office, etc. Para demostrar las ventajas de InvisiTasking, la utilidad también incluye un modificador especial para aplicar la tecnología InvisiTasking a sus operaciones de copia de archivos. Al aplicar este modificador, DkCopy puede convertirse en una verdadera aplicación en segundo plano. Se realizaron dos pruebas independientes con mediciones ligeramente diferentes. Ambas pruebas emplearon las mismas plataformas y entornos. Prueba 1 de InvisiTasking El objetivo de la Prueba 1 era comprobar la velocidad de las operaciones de copia de DkCopy, mediante la medición del tiempo transcurrido hasta terminar, cuando otro proceso también se estaba ejecutando. La ramificación de la ejecución de un segundo programa simultáneo al primer programa debería mostrar naturalmente un impacto en el primer programa. En este caso, dicha aplicación simultánea era también DkCopy, implementando el interruptor que activa InvisiTasking. Una vez más, esta prueba estaba pensada para detectar el impacto en DkCopy de la ejecución simultánea a la de otro programa. DkCopy con InvisiTasking activado representa una aplicación de segundo plano, como, por ejemplo, un proceso de mantenimiento, para el cual el desarrollador intenta evitar cualquier impacto negativo que deteriore el rendimiento de aplicaciones empresariales típicas. Procedimiento de la Prueba 1: 1. DkCopy se ejecutó empleando sus operaciones normales para copiar un archivo [DkCopy.exe]. Esto permitió establecer la línea base de tiempo que esta herramienta tarda en completar sus acciones. a. Prueba 1A, copia de un archivo de 150 MB b. Prueba 1B, copia de un archivo de 890 MB c. Prueba 1C, copia de un archivo de 6 GB 2. Se ejecutaron simultáneamente dos instancias de DkCopy. Una de ellas se ejecutó de forma normal [DkCopy.exe] y la otra, empleando la opción de InvisiTasking [DkCopy.exe -I]. a. Prueba 1A, copia de un archivo de 150 MB b. Prueba 1B, copia de un archivo de 890 MB c. Prueba 1C, copia de un archivo de 6 GB En las pruebas (fase 1 y 2), cada prueba de DkCopy se ejecutó un total de seis veces por cada tamaño de archivo (150 MB, 890 MB, 6 GB) y se registraron los resultados. Las puntuaciones más alta y más baja se descartaron y se promediaron6 las 4 puntuaciones restantes, que se representaron en el gráfico mostrado. La segunda instancia de DkCopy (con InvisiTasking activado) se ejecutó garantizando que ningún conflicto de E/S o problema de caché pudiera desvirtuar los resultados. El sistema se restableció al mismo estado anterior entre todas las ejecuciones de las pruebas para garantizar que el entorno de inicio fuera idéntico para pruebas comparativas. 6 Se eliminaron los valores más bajo y más alto y se emplearon los cuatro valores restantes para obtener el tiempo medio. Resultados de la Prueba 1: Resultados DkCopy, archivo 150 MB Menos tiempo = mejor (más rápido) Tiempo requerido por DkCopy (ejecución exclusiva) Tiempo requerido por DkCopy (ejec. DkCopy -I simultánea) 140.000 120.671 Tiempo (milisegundos) 120.000 105.802 114.417 110.477 100.000 80.000 60.000 40.000 20.000 14.520 13.805 5.859 7.090 6.293 6.602 0 Sistema-1 PIII 1 GHz (1 CPU) 2003 R2 Enterprise Sistema-2 P4 Xeon 3 GHz (2 CPU) 2003 R2 Enterprise x64 Sistema-3 PIII 499 MHz (1 CPU) XP Professional SP2 Sistema-4 Athlon 64 2,4GHz (2 CPU) 2003 R2 Enterprise x64 Sistema-5 P4 Xeon 3 GHz (2 CPU) 2003 R2 Enterprise Equipo DkCopy (archivo de 150 MB) Resultados DkCopy, archivo 890 MB 700.000 Tiempo requerido por DkCopy (ejecución exclusiva) Tiempo requerido por DkCopy (ejecución simultánea de DkCopy -I) Menos tiempo=mejor (más rápido) 659.854 621.316 Tiempo (milisegundos) 600.000 500.000 400.000 300.000 200.000 100.000 83.242 82.272 45.844 44.848 37.582 38.785 0 Sistema-1 PIII 1 GHz (1 CPU) 2003 R2 Enterprise Sistema-2 P4 Xeon 3 GHz (2 CPU) 2003 R2 Enterprise x64 Sistema-3 PIII 499 MHz (1 CPU) XP Professional SP2 Equipo DkCopy (archivo de 890 MB) Sistema-4 Athlon 64 2.4GHz (2 CPU) 2003 R2 Enterprise x64 Tiempo requerido por DkCopy (ejec. exclusiva) Result. DkCopy, archivo 6 GB Menos tiempo=mejor (más ráp.) Tiempo requerido por DkCopy (ejec. DkCopy -I simultánea) 265.391 265.082 Tiempo (milisegundos) 250.000 200.000 150.000 100.000 50.000 0 Sistema-4 Athlon 64 2,4 GHz (2 CPU) 2003 R2 Enterprise x64 Equipo DkCopy (archivo de 6 GB) Resumen de la Prueba 1 Los gráficos representan el tiempo que tardó en realizarse la copia, por lo que los números más bajos indican tiempos de ejecución más rápidos. Se emplearon diferentes niveles de hardware, desde procesadores Intel Pentium III a 500 Mhz hasta procesadores Dual Athlon 64 a 2,4 GHz. Como muestran los resultados, InvisiTasking tuvo un impacto mínimo en el rendimiento en la mitad de los casos y un rendimiento (tiempo de ejecución) mejorado en la otra mitad de los casos comprobados. Prueba 2 de InvisiTasking El objetivo de la Prueba 2 consistía en medir el rendimiento del sistema a través de una herramienta de referencia de otro fabricante. Se seleccionó el conocido producto de software de referencia PCMark® para medir el rendimiento de los PC, ya que cuenta con buena reputación y no es una herramienta propia. PCMark (PCMark05 Revision 1 Build 0) utiliza un sistema de puntuación y comprueba los principales componentes del sistema, como la CPU, la memoria, los discos duros y los gráficos, para calificar el rendimiento. Procedimiento de la Prueba 2: Al igual que en la Prueba 1, el sistema se restableció al mismo estado anterior entre todas las ejecuciones de las pruebas para garantizar que el entorno de inicio fuera idéntico para pruebas comparativas. Se utilizaron los mismos estados del sistema creados en la Prueba 1 para la Prueba 2. 1. PCMark05 se ejecutó en cada equipo para establecer una línea de base de rendimiento ejecutando sólo esta herramienta. 2. PCMark05 se ejecutó simultáneamente con (DkCopy –I) en cada equipo. Esta prueba mide el impacto que un proceso con InvisiTasking activado tiene en el rendimiento del sistema (medido por PCMark). Las pruebas7 de PCMark05 se ejecutaron cuatro veces en cada equipo, se promediaron los resultados y se representaron en el siguiente gráfico. Dado que los números presentados son las puntuaciones de PCMark05, a mayor puntuación, mejor rendimiento. 7 Consulte el Apéndice A para obtener la lista detallada de criterios que conforman la puntuación de PCMark. Resultados de la Prueba 2: Puntuación de PCMark Puntuación PCMark (ejec. simultánea DkCopy -I) Resultados prueba CPU PCMark05 (Mayor puntuación = mejor) 4700 4476 4500 4000 3841 3838 3363 3500 3518 3000 2500 2000 1500 1000 981 981 614 624 500 0 Sistema-1 PIII 1 GHz (1 CPU) 2003 R2 Enterprise Archivo de 150 MB Sistema-2 P4 Xeon 3 GHz (2 CPU) 2003 R2 Enterprise x64 Archivo de 150 MB Sistema-3 PIII 499 MHz (1 CPU) XP Professional SP2 Archivo de 150 MB Sistema-4 Athlon 64 2,4 GHz (2 CPU) 2003 R2 Enterprise x64 Archivo de 150 MB Sistema-4 Athlon 64 2,4 GHz (2 CPU) 2003 R2 Enterprise x64 Archivo de 1 GB Rendimiento de CPU con PCMark Resultados prueba memoria PCMark05 (Mayor puntuación = mejor) Puntuación de PCMark Puntuación PCMark (ejec. simultánea DkCopy -I) 3227 3000 2701 2708 2575 2500 2398 2146 2000 1500 1000 914 904 515 543 500 0 Sistema-1 PIII 1 GHz (1 CPU) 2003 R2 Enterprise Archivo de 150 MB Sistema-2 P4 Xeon 3 GHz (2 CPU) 2003 R2 Enterprise x64 Archivo de 150 MB Sistema-3 PIII 499 MHz (1 CPU) XP Professional SP2 Archivo de 150 MB Sistema-4 Athlon 64 2,4 GHz (2 CPU) 2003 R2 Enterprise x64 Archivo de 150 MB Rendimiento de memoria con PCMark Sistema-4 Athlon 64 2,4 GHz (2 CPU) 2003 R2 Enterprise x64 Archivo de 1 GB Resultados prueba disco duro PCMark05 (Mayor puntuación = mejor) Puntuación de PCMark Puntuación PCMark (ejec. simultánea DkCopy -I) 5000 4537 4544 4500 4295 4340 4313 4368 4000 3500 3000 2500 2218 2219 2000 1500 1334 1326 1000 500 0 Sistema-1 PIII 1 GHz (1 CPU) 2003 R2 Enterprise Archivo de 150 MB Sistema-2 P4 Xeon 3 GHz (2 CPU) 2003 R2 Enterprise x64 Archivo de 150 MB Sistema-3 Sistema-4 Sistema-4 PIII 499 MHz (1 CPU) Athlon 64 2,4GHz (2 CPU) Athlon 64 2,4GHz (2 CPU) 2003 R2 Enterprise x64 XP Professional SP2 2003 R2 Enterprise x64 Archivo de 150 MB Archivo de 150 MB Archivo de 1 GB Rendimiento de disco duro con PCMark Resumen de la Prueba 2 PCMark confirma la validez de las pruebas de tiempo de ejecución al evaluar determinados componentes del sistema. InvisiTasking no sólo no obstaculizó el rendimiento del equipo, sino que de hecho lo mejoró en 4 de cada 5 casos. Generalmente, a mayor potencia del sistema, más significativa es la ganancia neta. CONCLUSIÓN SOBRE INVISITASKING Las pruebas de referencia demuestran la teoría de la tecnología InvisiTasking. Indican que un proceso con InvisiTasking activado no interfiere en otras aplicaciones que están en ejecución. Esto se demostró en la Prueba 1, donde, fundamentalmente, no se vio afectado el tiempo que tardó en concluir la operación de DkCopy. La Prueba 2 estableció que las operaciones del sistema también están completamente disponibles para realizar una amplia gama de acciones típicas, como procesamientos de la CPU, accesos y modificaciones de la memoria y accesos a la unidad de disco duro, todo ello mientras una aplicación con InvisiTasking activado está plenamente activa. Diskeeper Corporation también documentó mejoras de rendimiento en servicios no relacionados sin ninguna ralentización en el resto de procesos. Al realizar pruebas de procesos con uso intensivo de E/S y prototipos de InvisiTasking, Diskeeper Corporation confirmó una ventaja añadida excepcionalmente alta que afecta a los procesos fuera de la esfera de InvisiTasking: InvisiTasking aporta eficiencia a la forma en que el kernel asigna los recursos. Desde una perspectiva de uso adicional de recursos del sistema, puede decirse que las aplicaciones con InvisiTasking activado “no existen”: son verdaderamente invisibles en el sistema. Diskeeper Corporation Europe, Kings House, Cantelupe Road, East Grinstead, West Sussex, RH19 3BE www.DiskeeperEurope.com © 2006 Diskeeper Corporation. Reservados todos los derechos. Diskeeper, The Number One Automatic Defragmenter e InvisiTasking son marcas comerciales o marcas registradas de Diskeeper Corporation. Microsoft, MS-DOS, Windows y Windows NT son marcas registradas o marcas comerciales de Microsoft Corporation en los Estados Unidos de América y/o en otros países. Lotus Notes es una marca registrada de IBM. PCMark es una marca registrada de Futuremark Corporation. Mac OS es una marca registrada de Apple Computer, Inc. UNIX es una marca registrada de The Open Group. Linux es una marca registrada de Linus Torvalds. El resto de marcas comerciales pertenecen a sus respectivos propietarios. Apéndice A Métrica detallada de las pruebas de PCMark05 (Más información sobre el producto en www.futuremark.com) Suite de pruebas de la CPU Compresión de archivos Descompresión de archivos Cifrado de archivos Descifrado de archivos Descompresión de imágenes Compresión de audio Prueba 1 con múltiples subprocesos / Compresión de archivos Prueba 1 con múltiples subprocesos / Cifrado de archivos Prueba 2 con múltiples subprocesos / Descompresión de archivos Prueba 2 con múltiples subprocesos / Descifrado de archivos Prueba 2 con múltiples subprocesos / Descompresión de audio Prueba 2 con múltiples subprocesos / Descompresión de imágenes Suite de pruebas de la memoria Lectura de memoria - 16 MB Lectura de memoria - 8 MB Lectura de memoria - 192 KB Lectura de memoria - 4 KB Escritura en memoria - 16 MB Escritura en memoria - 8 MB Escritura en memoria - 192 KB Escritura en memoria - 4 KB Copia de memoria - 16 MB Copia de memoria - 8 MB Copia de memoria - 192 KB Copia de memoria - 4 KB Latencia de memoria - Aleatoria 16 MB Latencia de memoria - Aleatoria 8 MB Latencia de memoria - Aleatoria 192 KB Latencia de memoria - Aleatoria 4 KB Suite de pruebas de unidad de disco duro Unidad de disco duro - Inicio de XP Unidad de disco duro - Carga de aplicaciones Unidad de disco duro - Uso general Unidad de disco duro - Exploración de antivirus Unidad de disco duro - Escritura de archivo