Google ha comenzado a abrir la implementación del modelo de flujo M:N

Google sugerido incluir en el kernel de Linux el primer conjunto de parches con la implementación de componentes necesarios para asegurar el funcionamiento del modelo de threading M:N. La iniciativa de Google está relacionada con la apertura de una API que se estaba desarrollando a puerta cerrada. Cambiar a para el kernel de Linux, que proporciona operación de un subsistema multiproceso implementado en el espacio del usuario, utilizando el modelo de subprocesos M:N. Google utiliza el subsistema para garantizar el funcionamiento de servicios que requieren una latencia mínima. La programación y gestión de la distribución de subprocesos se realiza completamente en el espacio del usuario, lo que puede reducir significativamente la cantidad de operaciones de cambio de contexto al minimizar la ejecución de llamadas al sistema.

Para garantizar el funcionamiento del subsistema especificado a nivel del kernel de Linux, se implementó la API SwitchTo, que ofrece tres operaciones básicas: esperar, reanudar e intercambiar (conmutar). Para su inclusión en el kernel se propone el código de una nueva operación FUTEX_SWAP, que complementa FUTEX_WAIT y FUTEX_WAKEy proporciona un marco para crear bibliotecas multiproceso en el espacio del usuario. FUTEX_SWAP también se puede utilizar para transferir mensajes entre tareas, similar a RPC. Por ejemplo, actualmente, para transferir un mensaje entre tareas, necesita realizar al menos cuatro llamadas a FUTEX_WAIT y FUTEX_WAKE, pero el uso de FUTEX_SWAP le permitirá arreglárselas con una operación, que se completará entre 5 y 10 veces más rápido.

Google ha comenzado a abrir la implementación del modelo de flujo M:N

Actualmente, en la práctica se utilizan principalmente modelos de flujo 1:1 y N:1. El modelo 1:1 se utiliza en NPTL (flujos POSIX) y subprocesos de Linux, e implica un mapeo directo de un hilo en el espacio de usuario a un hilo (unidad de programación de ejecución) en el nivel del kernel. Modelo N:1 implementado en Pth de GNU, lleva el envío de subprocesos al espacio del usuario y permite que N subprocesos en el espacio del usuario se vinculen a un solo subproceso en el kernel, sin que el kernel tenga conocimiento de los subprocesos del usuario.

La principal desventaja del modelo 1:1 es la gran sobrecarga del cambio de contexto entre el kernel y el espacio del usuario. El modelo N:1 resuelve este problema, pero crea uno nuevo: dado que un subproceso en el kernel es una unidad indivisible de programación de ejecución, los subprocesos de usuario vinculados a un subproceso en el kernel del sistema operativo no pueden escalar a través de los núcleos de la CPU y terminan vinculados a un único núcleo de CPU.

El modelo M:N es híbrido y elimina todas las desventajas descritas anteriormente al asignar N subprocesos en el espacio del usuario a M subprocesos en el kernel del sistema operativo, lo que permite reducir la sobrecarga del cambio de contexto y garantizar el escalamiento entre los núcleos de la CPU. El costo de esta opción es la gran complejidad de implementar un programador de subprocesos en el espacio del usuario y la necesidad de mecanismos para coordinar acciones con el programador del núcleo.

Fuente: opennet.ru

Añadir un comentario