Prueba Velneo Gratis

Te ofrecemos todo el poder de Velneo durante 1 mes para desarrollar la aplicación que tu empresa necesita.

Saber más
Thank you! Check your email for confirmation.

Gestión multiprocesador en Velneo

Este artículo es el primero de una serie de dos, en los que se aborda de manera muy básica, los conceptos de ejecución multihilo y multiprocesador, así como sus implicaciones en la programación en general, y en el rendimiento de las aplicaciones desarrolladas con tecnología Velneo en particular.En esta primera parte se trata de aclarar conceptos muy en boga hoy en día y que a veces se usan con cierta ambigüedad o incluso ligereza, y que constituirán la clave para entender las problemáticas, muchos más cercanas al programador de Velneo, que se abordan en la segunda parte del artículo.En varias ocasiones se ha comentado en los foros de Velneo problemas de rendimiento aparecidos en máquinas multiprocesador; en concreto la casuística más habitual que se suele mencionar es la de un procesador al 100% de uso mientras el vServer prácticamente no responde a nuevas peticiones, y sin embargo el resto de procesadores del sistema están prácticamente sin utilizar. De hecho si se lanzan otras aplicaciones en la misma máquina responden perfectamente y se ejecutan en alguno de los otros procesadores. Otro escenario común que se ha comentado en alguna ocasión, es el mismo que el anterior pero con el agravante de que el procesador ocupado ni siquiera está al 100%. Para tratar de aclarar si esto es un problema de la tecnología o del programador, qué es lo que está ocurriendo realmente y qué se puede hacer para mejorar el rendimiento, comenzaremos por realizar algunas definiciones básicas:- Equipo multiprocesador: sistema con más un procesador físico.- Dual core: arquitectura que incluye, parcialmente, dos procesadores en un solo encapsulado. Parcialmente quiere decir que no todos los componentes hardware de una CPU están duplicados, los que no lo están, son compartidos por ambas unidades de procesamiento.- Hyper-Threading: arquitectura específica de Intel que permite que un único procesador físico presente al sistema los recursos que lo identifican como dos procesadores distintos.- SMP (Symmetric multiprocessing): arquitectura computacional que permite la asignación de cualquier recurso de procesamiento a cualquier proceso que se vaya a ejecutar (los sistemas servidores NT y posteriores de Microsoft, y gran parte de sistemas UNIX son ejemplos de sistemas SMP).- Multitarea o multitask: se refiere a la capacidad de un sistema operativo para ejecutar varios procesos de manera concurrente si el hardware subyacente es multiprocesador, o de manera aparentemente concurrente si no lo es (o usa hyper threading o dual core, aunque en algunos casos los sistemas dual core se comportan como multitarea real.)- Multitarea preferente: arquitectura de implementación de multitarea en la que es el propio sistema operativo (mediante un componente denominado "scheduler") el que gestiona la asignación de tiempo de uso de recursos de procesamiento a cada tarea, en base, entre otras cosas, a las prioridades asignadas a cada tarea. Los sistemas multitarea actuales (tanto real como aparente) usan casi todos este tipo de gestión.- Hilo o "thread" de ejecución: se trata de un bloque de código ejecutable que pertenece a un proceso más grande. La noción habitual de proceso en sí puede asimilarse a la de un hilo de ejecución, uno hilo por cada proceso, excepto en el caso de los denominados "procesos multihilo", en los cuales un mismo proceso contiene varios bloques de código ejecutable estructurados en más de un hilo de ejecución.

Nota: la imagen muestra los principios básicos de ejecución de procesos en sistemas operativos multitarea para máquinas de un solo procesador y de múltiples procesadores. Los colores representan datos e instrucciones de distintos procesos. Si en vez de procesos, pensamos en hilos tendremos el concepto de ejecución multihilo. Y si en vez de procesadores físicos pensamos en combinaciones de hardware/software que permiten emular dos unidaddes de procesamiento lógicas sobre un solo procesador físico, nos acercaremos a los rudimentos conceptuales de Hyperthreading y Dual Core.La planificación de varios procesos por parte de los sistemas operativos multitarea para simular la concurrencia de los mismos, es algo a lo que estamos tan habituados que no le solemos dar importancia; sin ir más lejos simplemente con arrancar un motor de aplicaciones en una máquina con sistema operativo Microsoft Windows 2003 Server tendremos en ejecución simultánea no sólo el proceso VMotor.exe, sino otros procesos: servicios de sistema, módulos de drivers para dispositivos… Todos ellos son procesos que se están ejecutando de manera simultánea compartiendo unos recursos limitados de procesamiento, ya que aunque la máquina sea multiprocesador el número de procesos siempre es superior al de CPUs. El aumento del rendimiento viene derivado del hecho de que un proceso entra en la CPU y es expulsado de ella por el scheduler antes de que expire una cantidad de tiempo máxima (con ciertas excepciones, ya que este control sólo lo aplican al 100% los sistemas operativos denominados de "tiempo real"), dando paso a otro proceso (el siguiente en la lista de prioridades dinámicas que establece el scheduler); aunque la posibilidad de ejecutar varios procesos simultáneamente tiene ventajas evidentes, y de hecho sería imposible tener sistemas operativos de entorno gráfico sin usar la multitarea, podría parecer que este modo de actuar como mínimo disminuye el rendimiento de cada proceso individual, sino del sistema en general (cambiar de un proceso a otro consume tiempo y recursos, ya que hay que salvaguardar el estado del proceso saliente y recuperar el del proceso entrante), pero la realidad es que, salvo casos puntuales, cuando un proceso conserva durante un periodo prolongado de tiempo el control de la CPU, el uso de la misma es muy ineficiente, de hecho la mayor parte del tiempo el proceso está a la espera de resultados y no calculando. Por esta razón la conmutación entre procesos permite que la CPU siga trabajando mientras tenemos un proceso a la espera, aumentando el rendimiento global del sistema sin prácticamente penalizar a los procesos individuales.Continuará…

Regístrate ahora y nuestro equipo se pondrá en contacto muy pronto