Libertonia
Portada · Todo · Software Libre · Desarrolladores · Comunidad · Internet · Tecnología · Meta · Diarios
Hilos en Linux

Kernel
Por jcantero
departamento ovillos , Sección Desarrolladores
Puesto a las Mon Sep 23rd, 2002 at 07:34:48 PM CET
La programación multihilo es una técnica alternativa de programación concurrente que se apoya en que nuestro sistema operativo nos proporcione hilos (threads). En ocasiones se ha acusado a Linux de tener un soporte de hilos más bien mediocre, pero la cosa promete cambiar con NPTL, la Native POSIX Threading Library o biblioteca nativa de hilos POSIX. Aquí tenéis el documento de diseño de NPTL en PDF. En KernelTrap tenéis el anuncio y lo más interesante de la discusión en la lista de correo del kernel.

 


En un S.O. multihilo nuestros programas pueden tener varios "hilos de ejecución", es decir, estar realizando (aparentemente) varias tareas a la vez. El programador escribe partes de su programa que se ejecutan en paralelo, y a estas partes las denominamos hilos. Pero a diferencia de escribir varios programas (procesos) que se ejecuten a la vez colaborativamente, los hilos comparten la memoria (es decir, acceden a las mismas variables globales o dinámicas), por lo que no necesitan de costosos mecanismos de comunicación entre procesos para sincronizarse. Tampoco necesitan guardar gran parte de su contexto para preservar las variables, por lo que la penalización por cambio de contexto es menor.

Dentro de las técnicas para proporcional hilos al programador hay dos técnicas: los hilos en el espacio del kernel y los hilos en el espacio de usuario.

Los hilos del kernel son llamados a veces "procesos ligeros", porque pueden verse como una versión simplificada de los procesos. Es el kernel el que se encarga de darles soporte y de planificarlos. De hecho, la implementación actual de Linux de los hilos, LinuxThreads incluye a los hilos en la cola de planificación de procesos, como si fueran un proceso más.

En os hilos a nivel de usuario, en cambio, es una biblioteca la encargada de realizar la multiprogramación por hilos. Esta biblioteca se enlaza con el programa principal, y ella es la que se encarga de proporcionar el soporte a una concurrencia (por supuesto, simulada) mediante un planificador interno. Esta técnica tiene algunas ventajas, especialmente máquinas multiprocesador -la planificación de hilos en procesadores diferentes acarrea penalizaciones por el hecho de no poder utilizar los datos de la memoria memoria caché de cada procesador- y también algunas desventajas. En linux podemos utilizar GNU pthreads como biblioteca de hilos a nivel de usuario.

En Unix los hilos suelen seguir la especificación POSIX, llamados comunmente POSIX Threads. La opinión de los algunos kernel hackers respecto a ellos ha sido muy explícita en el pasado:

"posix threads is a braindamaged pile of crap". (Alan Cox)
"although a lot of the POSIX threads are reasonable, things like requiring uid/gid updates to be instantly effective across all threads in the process are just insane". (Stephen Tweedie)
"Note that the reason the kernel is not POSIX-compliant is:
- the POSIX standard is technically stupid. It's much better to use a cleaner fundamental threading model and build on top of that.
- things like the above are just so much better and more easily done in user space anyway."
(Linus Torvalds)
(obtenido de la edición de 30 marzo del 2000 de LWN).

Sin embargo, debido a su amplia utilización, se deseaba tener unos threads compatibles con POSIX disponibles a nivel de kernel a través de la glibc, y este es el hueco que viene a cubrir NPTL. La utilización de hilos permitirá por ejemplo mejorar el rendimiento de Apache (que aprovecha las características multihilo a partir de la versión 2.0) o de las aplicaciones Java, que suelen utilizar masivamente los hilos.

De hecho, gracias al nuevo parche O(1) de Ingo Molnar, el rendimiento en la creación y destrucción de hilos ha crecido espectacularmente. Según pruebas, se han llegado lanzar 100.000 hilos en 2 segundos, en vez de los 15 segundos que costaba antes (que es lo que se destaca en Slashdot de esta noticia). La ventaja del parche O(1) es que no hace falta recorrer una y otra vez la lista de procesos para decidir cual proceso (o hilo) debe entrar a ejecutarse, y cualquier mejora en un punto tan crítico como es el planificador tiene un impacto significativo. Quiero decir que una cosa son los parches de aumento de rendimiento del kernel, y otro el asunto de los nuevos hilos POSIX, y en la nota de Slashdot se han mezclado en cierta forma ambas cosas.

Espero no haber sido demasiado denso con las explicaciones, pero si queréis información más profunda y detallada, aquí dejo algunos enlaces más:

< FAQ ver0.1 (2 comments) | Parcheando el núcleo (1 comments) >
Enlaces Relacionados
· Slashdot
· NPTL
· documento de diseño de NPTL
· KernelTrap
· anuncio
· LinuxThreads
· GNU pthreads
· edición de 30 marzo del 2000 de LWN
· Ingo Molnar
· se destaca en Slashdot
· Linux Threads FAQ
· Programming POSIX Threads
· POSIX Threads explained
· More on Kernel
· Also by jcantero

Menu
· crear cuenta
· FAQ
· búsqueda
· Fuentes de Noticias

Login
Nueva cuenta
Usuario:
Contraseña:

Ver: Modo: Orden:
Hilos en Linux | 16 comentarios (16 temáticos, editoriales, 0 ocultos)
Aclaración (3.00 / 2) (#4)
por r00z a las Mon Sep 23rd, 2002 at 10:10:09 PM CET
(Información Usuario) http://r00z.ath.cx/

...the latest Linux development kernel is now able to start and stop over 100,000 threads in parallel in only 2 seconds (about 14 minutes 58 seconds faster than with earlier Linux kernels)!

La diferencia entre arrancar 100.000 hilos no es de 15 segundos sino de casi 15 minutos.

Tan mal diseñado estaba hasta ahora que han conseguido un incremento de velocidad de más del 450% o es que se lo han currado mucho?



Comparativa (3.00 / 1) (#16)
por jcantero (jcantero@agujero-negro.escomposlinux.org) a las Wed Sep 25th, 2002 at 07:15:49 PM CET
(Información Usuario) http://www.escomposlinux.org/jcantero/

En KernelTrap publican la comparativa de Ulrich Drepper entre LinuxThreads, los NGPT (New Generation POSIX Threads) de IBM, y los nuevos NPTL. Gráficas 1 y 2 en PDF. Las pruebas son de creación y destrucción de hilos, y usan un kernel 2.5.37. Los resultados indican que NGPT duplica en velocidad de creación y destrucción de hilos a LinuxThreads, pero se ve cuadruplicado por NPTL.

Las comparativas son odiosas. }:-)

--
"Papá, ¡Internet es más que una red pornográfica global!" -- Lisa Simpson


Híbridos (2.66 / 3) (#5)
por ochoto (ochoto_@_diariolinux.com) a las Mon Sep 23rd, 2002 at 11:27:37 PM CET
(Información Usuario) http://diariolinux.com

Como siempre que se dice que hay dos metodos para hacer algo, también existe al menos una técnica mixta (corolario de ochoto ;)

Otra técnica posible es implementar varios hilos en espacio de usuario por cada hilo en espacio del núcleo (M:N). Esta variante la han desechado por que es bastante más complicada de implementar, sobre todo si se quiere hacer transparente al programador.

El único problema que le veo al módelo elegido para Linux (hilos en espacio de kernel) es que un proceso con muchos hilos tendrá más probabilidades de ser planificado para ejecutarse con lo que sería posible realizar un thread bomb.




Los hilos de linux y alguna cosilla mas (2.50 / 2) (#8)
por Anónimo a las Tue Sep 24th, 2002 at 02:22:50 AM CET

[Que feo quedo antes, se me paso poner el Plain Text ]

> El programador escribe partes de su programa
> que se ejecutan en paralelo, y ...

Es en paralelo o de forma concurrente? Cual es la diferencia entre estos dos terminos? Yo creo que el termino correcto sereia concurrencia


> Esta técnica tiene algunas ventajas,
> especialmente máquinas multiprocesador

Esta frase, sacada de la parte de los hilos en espacio de usuario no la entiendo bien. Si el kernel no ve los distintos hilos, no puede planificarlos, asi que no puedes tener dos hilos de la misma tarea ejecutandose de forma concurrente, lo que no es deseable, asi que no veo la ventaja. Si te refieres al hecho de que la mobilidad de los hilos de un micro a otro traiga como consecuencia un incremento de los fallos de cache, creo que pare esto habia una caracteristica llamada CPU affinity que nos permitia evitar precisamente una alta movilidad en la planificacion de los hilos. El problema es que esta caracteristica no esta disponible en el kernel de linux de serie, sino como parche.
Eso si, una de las ventajas mas importantes que tiene es la portabilidad.



Hilos contra procesos (2.50 / 2) (#9)
por DopeRider a las Tue Sep 24th, 2002 at 03:03:47 AM CET
(Información Usuario)

En el debate en Slashdot, por cierto uno de los más divertidos que he leído nunca, salía el viejo tema: ¿es realmente necesario un buen sistema de hilos?. Los procesos en Linux se dice que son mucho menos costosos que por ejemplo en Windows.

No tengo experiencia directa. Lo único que sé es que mis colegas que pasaron de Delphi a Kylix han notado una mejora en el rendimiento de los programas de red (donde mayormente han aplicado los hilos). En Windows los mismos componentes usan hilos, mientras que en Linux usan procesos (compartiendo la imagen de memoria, pero procesos al fin).



Sobre los threads (2.00 / 2) (#1)
por Draco a las Mon Sep 23rd, 2002 at 05:18:24 PM CET
(Información Usuario)

Nunca he tenido demasiado claro el tema de los threads así que tengo algunas dudas y puntualizaciones que igual me podéis resolver o corregir/confirmar.

Lo primero de todo es las clases de Threads que hay. Has dicho que había Threads de Kernel y Threads de usuario e identificas LWN con Kernel threads. Yo tenía entendido que todos los LWN son Kernel threads, pero no al revés. De hecho un SO puede tener Kernel threads pero no darle LWN accesibles al programador ¿me equivoco?

las aplicaciones Java, que suelen utilizar masivamente los hilos.

¿Cómo maneja Java(mejor dicho el intérprete de Java) sus Threads? ¿Los mapea con procesos o threads? Yo pensaba que los representaba internamente, y que al virtualizar una máquina de pila los cambios de contexto eran muy rápidos(sólo hay que cambiar unos cuantos punterillos). Tengo más pero me las guardo. Ya tiraré de Google y biblioteca.
There are two major products to come out of Berkeley: LSD & BSD Unix. I don't believe this to be a coincidence.


Hilos en Linux | 16 comentarios (16 temáticos, editoriales, 0 ocultos)
Ver: Modo: Orden:

ecol Logo Powered by Scoop
Todas las Marcas Registradas y copyrights de esta página son propiedad de sus respectivos dueños.
Los comentarios son propiedad del que los escribe.
Los iconos de las noticias y el logotipo son propiedad de Javier Malonda.
El Resto © 2002 Escomposlinux.org y aledaños.

Puedes sindicar los contenidos de libertonia en formato RSS 1.0 y RDF 0.9. También se puede sindicar la cola de envíos pendientes de moderación.

El proyecto escomposlinux.org está dedicado a la memoria de tas

crear cuenta | faq | búsqueda