Sviluppatore di giochi Malte Skarupke comparazione delle prestazioni dei lock basati su e utilizzando diversi scheduler. I test hanno mostrato ritardi anomali quando si utilizzava Spinlock con lo scheduler di default di Linux. L'autore dei test ha concluso che lo scheduler di Linux presenta problemi che influenzano negativamente le prestazioni dei giochi sviluppati per il servizio Google Stadia, dove i giochi vengono eseguiti su GPU in un ambiente cloud e il contenuto dello schermo viene trasmesso in streaming al client a una frequenza di fino a 60 fotogrammi al secondo. In tali condizioni, è necessario garantire un output tempestivo dei fotogrammi sullo schermo e ritardi superiori a un millisecondo diventano percepibili.
In discussione dei test Linus Torvalds, che li ha definiti spazzatura («pure garbage»), e un esempio di come si possano ottenere risultati che non riflettono la realtà senza un'adeguata comprensione dell'argomento. Lo spinlock è un primitivo a basso livello che deve essere utilizzato con grande cautela nello spazio utente e richiede una comprensione approfondita dei dettagli; altrimenti, si rischia di ottenere ciò che è stato dimostrato dall'autore del test. Torvalds ha consigliato agli sviluppatori di giochi di non utilizzare gli spinlock e di non tentare di costruire i propri sistemi di locking basati su di essi, ma di utilizzare meccanismi già esistenti e collaudati, che informano il sistema in merito all'attesa del rilascio del blocco per escludere l'influenza dello scheduler.
Le implementazioni basate su Spinlock possono essere utilizzate solo con la piena certezza che il gestore non interromperà la loro esecuzione. I lock utilizzati nei test basati su spinlock sono implementati tramite un involucro personalizzato che opera nello spazio utente. Il gestore dei task può, in qualsiasi momento casuale, prendere il controllo durante l'esecuzione di questo involucro e passare all'esecuzione di un altro compito. Poiché la misurazione delle prestazioni è eseguita sulla base di valori assoluti del timer, i valori definiti nei test di latenza coprono non solo i ritardi nel gestore del lock, ma anche il codice eseguito in un altro contesto, ossia misurano non solo ciò che l'autore del test intendeva misurare, ma anche il "rumore" di altri calcoli nel sistema.
Autore del test ribattere a Linus, sottolineando che l'uso di sistemi di lock personalizzati basati su spinlock è frequentemente praticato nei giochi, poiché utilizzando pianificatori più semplici rispetto a Linux, i test mostrano prestazioni superiori. Linus , il pianificatore Linux è versatile, affinato per decenni e ottimizzato non solo per desktop e giochi, ma anche per altri tipi di carico, come i sistemi server, quindi tiene conto di molteplici sfumature nella programmazione delle attività.
Aggiungere ottimizzazioni specifiche che riducano la latenza nei giochi di Google Stadia può migliorare la reattività in determinati casi, ma probabilmente porterà a una diminuzione dell'efficienza del pianificatore nel complesso. Ad esempio, il pianificatore Windows si comporta meglio nei test discussi, poiché è notevolmente più semplice rispetto al pianificatore Linux ed è ottimizzato principalmente per attività specifiche del desktop.
Fonte: opennet.ru
