한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Game-Lag-Whitepaper › L1 Spielprozess auf dem Client

Langsamer Datenträger bremst Asset-Streaming Slow storage stalls asset streaming

Ursachen-ID cg-asset-stream · Hauptzuständig Client-Entwicklung (Entwicklungsteam) · Beteiligt Extern (Extern)

In der interaktiven Fassung mit Grafiken und Experimenten öffnen →

Auf langsamen Datenträgern wie HDDs kommt das Einlesen von Texturen und Modellen in einer Open World der Bewegung nicht hinterher. Objekte erscheinen spät, oder das Spiel ruckelt, während es auf Lesevorgänge wartet.

Warum Schnelle Fortbewegung per Reittier oder Teleport oder Betreten eines belebten Orts, viele neue Texturen und Modelle auf einmal nötig → Folge Langsamer Datenträger wie eine HDD liest nicht schnell genug, Leseanfragen stauen sich, bei manchen Ladevorgängen wartet der Main-Thread bis zum Ende → Auf dem Bildschirm Texturen bleiben eine Weile unscharf, Gebäude und Charaktere erscheinen spät, Ruckeln oder Freeze, während auf Lesevorgänge gewartet wird

Symptome
Unsichtbar / Geisterobjekte, Ruckeln, Freeze
Faktoren
Stillstand
Wer ist betroffen
Nur ich
Wann
Beim Bewegen oder Zonenwechsel, Bei großem Andrang
Zuständigkeit
Hauptzuständig Client-Entwicklung (Entwicklungsteam) · Beteiligt Extern (Extern)
Aufgaben Entwicklungsteam
Asynchrones Streaming, bei dem der Main-Thread nicht auf Lesevorgänge wartet, vorausschauendes Laden anhand von Bewegungsrichtung und Tempo, zuerst niedrige Auflösung (Mipmaps) und einfache Modelle zeigen und später austauschen, bei Streaming-Rückstand während schneller Fortbewegung das Tempo kurz begrenzen oder einen Ladebildschirm zeigen, in Mindest- und empfohlenen Systemanforderungen angeben, ob eine SSD nötig ist.
Aufgaben Extern
Spielern empfehlen, das Spiel auf einer SSD zu installieren, und sie prüfen lassen, ob auf demselben Laufwerk Downloads oder Virenscans laufen.
Größenordnungen
Laut Microsoft lesen ältere Festplatten einige Dutzend MB pro Sekunde, NVMe-SSDs mehrere GB pro Sekunde. Spiele der vorigen Generation nutzten fürs Streaming etwa 50 MB pro Sekunde. Läuft ein Spiel, das auf SSD-Geschwindigkeit ausgelegt ist und weit mehr liest, auf einer HDD, hält das Lesen mit der Bewegung oft nicht Schritt.
Im Graphen
Nur einzelne Ausreißer · Anzahl der Frametime-Spikes (nach Datenträgertyp), Disk-Leselatenz
Wo nachsehen
Beim schnellen Fortbewegen in der Windows-Leistungsüberwachung PhysicalDisk\Avg. Disk sec/Read (durchschnittliche Dauer eines Lesevorgangs) und Current Disk Queue Length zusammen mit der Frametime aus PresentMon aufzeichnen. In Development-Builds unter Unreal stat Streaming und stat AsyncLoad, unter Unity die Profiler-Warnung AssetBundle.asset/allAssets prüfen (Ergebnis vor Ende des Ladevorgangs angefordert, Main-Thread wartet)
Spricht dafür
Beim schnellen Fortbewegen schießen Disk-Leselatenz und Warteschlange hoch, gleichzeitig schlägt die Frametime aus oder Texturen und Objekte erscheinen spät. Dieselbe Szene läuft auf einer SSD ohne das Problem
Spricht dagegen
Datenträger untätig, Texturen trotzdem unscharf: „Zu wenig Grafikspeicher (VRAM)“. Ab dem zweiten Besuch am selben Ort in Ordnung: „Synchrones Laden und Shader-Kompilierung im Main-Thread“
Prüfmittel
Prüfung in der Umgebung des Spielers
Mehr dazu
Hakt es nur beim ersten Mal und danach nicht mehr, passt eher „Synchrones Laden und Shader-Kompilierung im Main-Thread“. Wiederholt es sich bei jeder Bewegung und nur auf PCs mit langsamem Datenträger, ist es diese Ursache. Auch „Zu wenig Grafikspeicher (VRAM)“ führt zu unscharfen Texturen, weil Texturen aus dem Grafikspeicher entfernt und wieder geladen werden. Deshalb sind die Wartezeit beim Lesen vom Datenträger und die Auslastung des Grafikspeichers gemeinsam zu prüfen. Auch der Echtzeitschutz eines Virenscanners kann sich bei jedem Öffnen einer Spieldatei einschalten und das Lesen weiter verzögern.

Quellen

  1. DirectStorage is coming to PC Microsoft
    Ältere Festplatten lesen einige Dutzend MB pro Sekunde, NVMe-SSDs mehrere GB pro Sekunde, das Asset-Streaming-Budget von Spielen der vorigen Generation lag bei etwa 50 MB pro Sekunde, Open-World-Spiele lesen ferne Landschaft während der Bewegung in Echtzeit ein und verwerfen sie wieder
  2. Texture and mesh loading Unity
    Synchroner Upload liest und überträgt im Main-Thread innerhalb eines Frames und verursacht ein sichtbares Stocken, asynchroner Upload streamt über mehrere Frames
  3. Texture Streaming Overview for Unreal Engine Epic Games
    Der Streamer erhöht und senkt die Texturauflösung (Mip) passend zum Blickpunkt, rechnet größtenteils in asynchronen Worker-Threads und lädt zuerst die sichtbaren Mips
  4. Profiler markers reference Unity
    Warnung AssetBundle.asset/allAssets: Ergebnis vor Ende des Ladevorgangs angefordert, der Main-Thread hält an und wartet
  5. Stat Commands in Unreal Engine Epic Games
    stat Streaming (Speicher und Anzahl gestreamter Texturen), stat AsyncLoad (Statistik zum asynchronen Laden)
  6. Windows Performance Monitor Disk Counters Explained Microsoft
    Avg. Disk sec/Read ist die durchschnittliche Dauer eines Lesevorgangs (I/O-Latenz), Current Disk Queue Length die Länge der Disk-Warteschlange im Moment der Messung
  7. PresentMon Capture Application (README-CaptureApplication.md) Intel
    Aufzeichnung der Zeit pro Frame über FrameTime (CPU-Zeit zwischen Frames)
  8. About regular quick and full scans with Microsoft Defender Antivirus Microsoft
    Der Echtzeitschutz prüft Dateien bei jedem Öffnen und Schließen

Verwandte Ursachen

Gleiche Schicht: L1 Spielprozess auf dem Client

Ursachen aus anderen Schichten mit demselben Symptom (Unsichtbar / Geisterobjekte)

Karte in der interaktiven Fassung mit Grafiken und Experimenten ansehen