Le prestazioni del gioco sono dimezzate con il mirroring dello schermo su macOS

2

Quando eseguo Portal sul mio MBP senza schermo esterno collegato, ottengo un solido 60 fps. Quando collego e specchio un altro schermo (stessa risoluzione e impostazioni di gioco) scende a 30 fps, a volte 20, e ha un impatto molto evidente sull'esperienza di gioco.

È lo stesso indipendentemente dalla porta di uscita video che uso. Il risparmio energetico della grafica è disabilitato.

Ho cercato di trovare conferma del fatto che il mirroring dello schermo influisce negativamente sulle prestazioni, ma sono incappato in affermazioni che non è e non dovrebbe. Ma l'ho provato molte volte ed è molto riproducibile.

  • Come viene implementato il mirroring / perché influisce così tanto sul rendimento?
  • L'unico modo per ottenere prestazioni di gioco decenti per acquistare una tastiera esterna e chiudere il coperchio / cassetta magnetica sullo schermo / usare un hack terminale?

MBP 15 "metà 2014

Aggiornamento su V-sync

Come Phong ha correttamente sospettato, è correlato a vsync. Senza di esso ottengo alcuni ridicoli 150+ fps e buona reattività, anche se sono riluttante a spegnerlo a causa dello strappo.

È comunque un po 'un mistero il modo in cui il mirroring dello schermo interagisce e influenza vsync.

Lo schermo MBP è 60 Hz e lo schermo esterno riceve anche un segnale a 60 Hz. Cambiare la risoluzione del gioco non influisce sul segnale video (sempre a 1080p), ma abbinare l'output e la risoluzione del gioco (ad esempio 720p @ 60) fornisce ancora sintomi simili.

    
posta Andreas 30.12.2016 - 17:38
fonte

2 risposte

6

Mi sembra che tu abbia Sincronizzazione verticale abilitato. Questa funzione blocca la frequenza dei fotogrammi a una frazione della frequenza di aggiornamento del display (1, ½, ⅓ ...) per evitare artefatti visivi (in particolare, "lacrimazione") e frequenze fotogrammi di fuga (che potrebbero danneggiare una GPU). Un'indicazione abbastanza buona di questo è una frequenza fotogrammi che salta da 30 a 60 FPS e viceversa, con niente di intermedio.

Il mirroring sta influenzando le prestazioni quel tanto che basta per far cadere la frequenza dei fotogrammi al di sotto dei 60 FPS. Anche se altrimenti avessi 59 FPS, Vertical Synchronization porterebbe la frequenza dei fotogrammi a 30 FPS.

Ciò può anche comportare un ritardo di input. Poiché il tuo schermo / cursore è ora ridisegnato metà (o un terzo) come frequentemente, il ritardo tra lo spostamento del mouse e la visualizzazione del risultato sullo schermo sarebbe due o tre volte più lungo.

Accedi alle impostazioni video di Portal e Disattiva Sincronizzazione verticale . Non gioco Portal, ma quasi ogni gioco ha quell'opzione. Potrebbe essere denominato V-Sync .

Potrebbe essere necessario passare dalla modalità Windowed a Schermo intero . Poiché macOS forza V-Sync per il desktop principale, V-Sync può ancora essere applicato durante la riproduzione in una finestra.

Per ridurre al minimo gli effetti negativi della disattivazione di V-Sync , molti giochi offrono la possibilità di limitare la frequenza dei fotogrammi. Se questa opzione è disponibile, prova a impostare un massimo di, ad es. 90 FPS o anche 60 FPS . Questo offre spesso il meglio di entrambi i mondi.

Verifica se una combinazione di queste soluzioni risolve il tuo problema.

Se preferisci mantenere V-Sync attivato, molti giochi offrono un'opzione per abilitare Triple-Buffering . Ciò contribuirà a ridurre i frame rate (quindi riducendo al minimo i bruschi cali di frame rate). Abilitarlo può anche comportare un aumento del ritardo di input, sebbene di solito non così grave come quello causato dalla caduta di 30 FPS.

Un ultimo suggerimento sarebbe cercare di estendere il desktop sullo schermo esterno come Spazio separato (possibile con Yosemite e sopra, credo). Il tuo caso d'uso richiede anche Mirroring ? Non sono così familiare con questo sul Mac, ma non vedo perché questo non sarebbe possibile.

Spiegazione a volo d'uccello di cosa sta causando il calo della frequenza fotogrammi con il mirroring: Con Mirroring , il tuo Mac deve visualizzare lo stesso frame sul display interno e sul display esterno. Oltre a far attendere i display l'uno sull'altro, ciò comporta un ulteriore "lavoro" che include il tempo di calcolo extra e la gestione del buffer (per assicurarsi che visualizzino la stessa cosa allo stesso tempo), così come il ritardo di andata e ritorno tramite cavo esterno o peggio, Wi-Fi / Bluetooth.

Mentre ciò accade, la tua GPU sta visualizzando il frame successivo nel suo buffer interno, ma non lo invia al tuo display finché non ottiene l'OK (a causa di V-Sync ). Durante questo periodo di attesa, la GPU viene effettivamente messa in pausa, non il rendering di frame aggiuntivi (a meno che non sia disponibile il Triple o N-Buffering), che riduce ulteriormente la frequenza dei fotogrammi. Quindi, a seconda di dove si trova il display più lento nel suo ciclo di aggiornamento, la visualizzazione del fotogramma successivo potrebbe essere posticipata di nuovo alla frazione successiva.

Devi tenere presente che per rendere il tuo gioco a 60 FPS, il tuo sottosistema grafico ha solo 33ms per eseguire tutto quel lavoro extra (meno il tempo necessario alla GPU per renderizzare quei frame in primo luogo). Il roundtrip da e verso il tuo display esterno da solo potrebbe richiedere un paio di millisecondi. Il lavoro di sincronizzazione è di per sé costoso (in termini di tempo). Non è imperscrutabile che la sincronizzazione di due schermi richieda più di 20 o 30 millisecondi.

Ora, nel paragrafo precedente stavo dando per scontato che la tua GPU fosse pronta con il fotogramma successivo al momento in cui i tuoi schermi erano stati disegnati quello corrente. Immagina che non lo fosse. Bene, ora i display sono affamati, e sono quelli che finiscono per aspettare sulla GPU. Probabilmente finirai per passare alla frazione successiva della tua frequenza di aggiornamento più lenta. Ciò che potrebbe significare un calo di FPS 1-2 V-Sync Off si trasforma in 30 FPS con On .

Quindi stai provando a sincronizzare due schermi (tramite Mirroring ), quindi prova a sincronizzarli contro la tua GPU (tramite V-Sync ). Il risultato è potenzialmente tanta, tanta, tanta attesa.

Non è raro che si verifichi un calo delle prestazioni durante la connessione di sottosistemi con livelli di prestazioni diversi. Ecco perché sono stati creati buffer e operazioni asincrone.

Durante la sincronizzazione, un ritardo ovunque provoca ritardi ovunque.

Per ottimizzare le prestazioni, lascia che ognuno faccia il suo lavoro nel suo tempo libero.

    
risposta data 30.12.2016 - 17:50
fonte
0

Condensing alcune informazioni su cosa ha funzionato alla fine:

  • Vsync abilitato
  • Separa i desktop su ciascun monitor
  • Sposta il desktop principale (il dock) sullo schermo su cui vuoi giocare. Portal può selezionare un monitor in-game, ma macOS si avvita comunque con il cursore, a meno che non giochi sulla schermata principale in modo che l'opzione sia inutile.
  • Diminuisci l'altro schermo

La stessa cosa per Portal 2. A differenza del primo gioco, supporta anche il buffering triplo.

Utilizzare app come DisableMonitor complica solo le cose. In qualche modo finisci con il sistema di coordinate del monitor disabilitato (e con lo sfondo del desktop) sovrapposto a quello abilitato, facendo apparire i cursori dove non lo sono. Lo sviluppatore sembra aver preso precauzioni dall'aspetto di questa linea: CGWindowListCopyWindowInfo(kCGWindowListExcludeDesktopElements, kCGNullWindowID) , ma non sembra proprio incollare, almeno non in macOS sierra.

    
risposta data 01.01.2017 - 00:36
fonte

Leggi altre domande sui tag