Desarrollador de juegos Malte Skarupke comparación del rendimiento de bloqueos basados en y al utilizar diferentes planificadores de tareas. Las pruebas mostraron retrasos anormalmente grandes al usar Spinlock con el planificador de tareas predeterminado en Linux. El autor de las pruebas concluyó que el planificador de tareas de Linux tiene problemas que afectan negativamente al rendimiento de los juegos creados para el servicio Google Stadia, donde los juegos se ejecutan en GPU en un entorno en la nube, y el contenido de la pantalla se transmite al cliente a una velocidad de hasta 60 cuadros por segundo. En tales condiciones, es necesario asegurar la entrega oportuna de los cuadros en la pantalla, y los retrasos que superan un milisegundo se vuelven notorios.
A discusión de las pruebas Linus Torvalds, quien las calificó de basura («pure garbage») y como un ejemplo de cómo se pueden obtener resultados que no reflejan la realidad, sin entender completamente el tema. Spinlock es un primitivo de bajo nivel que en el espacio de usuario debe utilizarse con gran precaución y con un entendimiento completo de los detalles; de lo contrario, se pueden obtener los resultados que el autor de la prueba demostró. Linus aconsejó a los desarrolladores de juegos no aplicar spinlock y no intentar crear sus propios sistemas de bloqueo basados en él, sino usar mecanismos existentes y probados que informen al sistema sobre la espera de liberación del bloqueo para excluir la influencia del planificador.
Las capas basadas en Spinlock solo se pueden utilizar cuando hay plena confianza de que el planificador no interrumpirá su ejecución. Los bloqueos utilizados en las pruebas basadas en spinlock se implementan a través de un envoltorio casero que funciona en el espacio de usuario. El planificador de tareas puede en cualquier momento aleatorio tomar el control durante la ejecución de esta envoltura y cambiar a la ejecución de otra tarea. Dado que la medición del rendimiento se realiza sobre la base de valores absolutos del temporizador, los retrasos específicos en las pruebas abarcan no solo los retrasos en el manejador de bloqueos, sino también el código que se ejecutó en otro contexto, es decir, miden no solo lo que el autor de la prueba intentó medir, sino también el
Autor de la prueba refutar a Linus señalando que el uso de sus propios sistemas de bloqueo basados en spinlock se utiliza a menudo en la práctica en los juegos, ya que al utilizar planificadores más simples que en Linux, las pruebas muestran un rendimiento más alto. Linus , que el planificador de Linux es universal, ha sido perfeccionado durante décadas y está optimizado no solo para el escritorio y los juegos, sino también para otros tipos de carga, por ejemplo, para sistemas de servidores, por lo que tiene en cuenta numerosos matices al planificar la ejecución de tareas.
Agregar optimizaciones específicas que reduzcan las latencias en juegos como Google Stadia puede mejorar la capacidad de respuesta en un caso particular, pero probablemente conducirá a una disminución de la eficiencia del planificador en general. Por ejemplo, el planificador de Windows se comporta mejor en las pruebas discutidas, ya que es significativamente más simple que el planificador de Linux y está optimizado principalmente para tareas específicas del escritorio.
Fuente: opennet.ru
