Monday, December 12, 2011

Importante bug solucionado en la migración de threads

A continuación  describiré brevemente acerca del problema descubierto en la migración de thread y como fue solucionado, no ahondaré en detalles.
En las versiones anteriores de Toro, cuando un thread intentaba crear otro thread remoto, la función ThreadCreate era ejecutada localmente y eran alocadas las estructuras: TThread, TLS y el Stack. Luego la   estructura completa era migrada al core remoto. 
El problema en este procedimiento era que los bloques de memoria TThread, TLS  y Stack ya no eran locales lo cual significa una grave infracción en el modelo NUMA
De este modo, se reemplazó la migración de la estrucutura TThread por la migración de un conjunto de parametros tales como: tamaño de pila, puntero al código de ejecución, etc. Así, ThreadCreate es ejecutado remotamente y le son pasados los parámetros guardados en esta estructura. Como antes, se retorna al thread padre el ThreadID del recien nacido.
Se puede observar que mientras la creación de un thread local es instantánea, la creación de un thread remoto involucra dos pasos: primero se migran los parámetros y luego se retorna el identificador de thread.