Un 'spinlock' es un mecanismo del sistema que evita que un recurso compartido pueda ser modificado por dos más procesos del software simultáneamente; su papel es hacer que, si está 'ocupado', los nuevos procesos entren en un bucle de espera hasta que el primer proceso lo deje libre.
Según Skarupke, tras meses de investigación ha llegado a la conclusión de que la implementación de los spinlock del planificador de Linux es "bastante mala", y provoca que los procesos tengan que esperar varios milisegundos para tomar el control de un spinlock.
"En un videojuego, donde tienes que generar una imagen en pantalla cada 16 o 33 milisegundos (dependiendo de si se está ejecutando a 60Hz o a 30Hz), que algo así lleve más de un milisegundo es terrible".
Ante la gran difusión que han tenido, Torvalds, creador y responsable del desarrollo del kernel de Linux, ha querido contestar personalmente a Skarupke, de forma bastante contundente:
"Todo el post parece estar mal planteado, y pretende medir algo totalmente diferente al tema que el autor está abordando. [...] El código usado está lleno de basura".
Para solucionar el problema que denuncia Skarupke, Torvalds sugiere que los desarrolladores usen
"un sistema de bloqueo que le diga al sistema que queda a la espera, en el que el hilo de desbloqueo le haga saber cuándo está listo. Así el planificador [de procesos] trabajará con ellos, en lugar de en su contra. Repito: no utilicéis spinlocks en el espacio de usuario, a menos que realmente sepas lo que estás haciendo. Y debes tener en cuenta que la probabilidad de que lo sepáis tiende a cero".
Fuente : genbeta
- Visto: 858