"Pura basura". Así ha calificado Linus Torvalds las acusaciones vertidas el pasado día 3 de enero por el desarrollador Malte Skarupke desde su blog, en las que señala al planificador de procesos del kernel de Linux como responsable de los problemas de rendimiento mostrados por la plataforma de cloud gaming Google Stadia, puesto que sus servidores funcionan con el sistema operativo libre por excelencia.
Skarupke relata que, en su lugar de trabajo, oyó a alguien "quejándose de unos misteriosos problemas surgidos mientras trataba de portar 'Rage 2' a Google Stadia. Lo único que tenían en común esos misteriosos problemas era que todos ellos utilizaban spinlocks".
Pero ¿qué es un spinlock? ¿Reside realmente ahí el problema?
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 del recurso.
"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".
Cuando leí el primer post acusando al scheduler de Linux pensé ¿qué coño hace usando spinlocks en espacio de usuario sin estar seguro de lo que hace? Pensé que algo me perdía, pero Linus Torvalds dice lo mismo https://t.co/CuzGvA3PI3
— Ricardo Galli 🏴 🗣️ (@gallir) January 6, 2020
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".
Imagen | Marcos Merino, basada en original de Marco Verch
Ver 38 comentarios