Desenvolvedor de jogos Malte Skarupke comparação de desempenho de bloqueios com base em e ao utilizar diferentes escalonadores de tarefas. Os testes mostraram latências anormalmente altas ao usar Spinlock com o escalonador de tarefas padrão do Linux. O autor dos testes concluiu que o escalonador de tarefas do Linux possui problemas que afetam negativamente o desempenho dos jogos desenvolvidos para o serviço Google Stadia, onde os jogos são executados em GPU em um ambiente de nuvem, e o cliente recebe apenas o conteúdo da tela em streaming a uma taxa de até 60 quadros por segundo. Em tais circunstâncias, é necessário garantir a saída oportuna dos quadros na tela, e latências que excedem um milissegundo se tornam perceptíveis.
Para discussão dos testes Linus Torvalds, que os chamou de lixo (‘pure garbage’) e um exemplo de como é possível, sem entender completamente o assunto, obter métricas que não refletem a realidade. Spinlock é um primitivo de baixo nível que no espaço do usuário deve ser usado com grande cautela e total compreensão dos detalhes, caso contrário, pode-se obter os resultados demonstrados pelo autor do teste. Linus aconselhou os desenvolvedores de jogos a não usar spinlock e a não tentar criar seus próprios sistemas de bloqueio com base nele, mas sim utilizar mecanismos já existentes e testados que informem ao sistema sobre a espera pela liberação do bloqueio, a fim de evitar a influência do escalonador.
Extensões baseadas em Spinlock só podem ser usadas com total certeza de que o escalonador não interromperá sua execução. Os bloqueios utilizados nos testes baseados em spinlock são implementados através de uma camada feita sob medida, funcionando no espaço do usuário. O escalonador de tarefas pode a qualquer momento aleatório retomar o controle durante a execução dessa camada e mudar para a execução de outra tarefa. Como a medição de desempenho é realizada com base em valores absolutos do temporizador, certas latências nos testes abrangem não apenas as latências no manipulador de bloqueio, mas também o código que foi executado em outro contexto, ou seja, medem não apenas o que o autor do teste tentou medir, mas também o
autor do teste contradizer Linus, apontando que o uso de sistemas de bloqueio baseados em spinlock é frequentemente aplicado na prática em jogos, uma vez que, com o uso de escalonadores mais simples do que os do Linux, os testes mostram um desempenho superior. Linus , que o escalonador do Linux é universal, refinado ao longo de décadas e otimizado não apenas para desktops e jogos, mas também para outros tipos de carga, como sistemas de servidores, considerando assim muitas nuances ao planejar a execução de tarefas.
A adição de otimizações específicas que podem reduzir a latência em jogos do Google Stadia pode aumentar a responsividade em casos específicos, mas provavelmente levará a uma diminuição da eficiência do escalonador como um todo. Por exemplo, o escalonador do Windows se comporta melhor nos testes debatidos, pois é significativamente mais simples do que o escalonador do Linux e é principalmente otimizado para tarefas específicas de desktop.
Fonte: opennet.ru
