Liegen Daten verstreut im Speicher, muss die CPU jedes Mal bis zum langsamen RAM gehen und warten.
Warum Objekte über Zeiger verstreut, Zugriff ohne feste Reihenfolge → Folge Daten nicht im CPU-Cache, also jedes Mal Lesen aus dem RAM (rund 100-mal langsamer) → Auf dem Bildschirm Gleiche Arbeit kostet ein Vielfaches an Tick-Zeit, im schlimmsten Fall Zeitlupe
Häufig gemeinsam genutzte Daten zusammenhängend im Speicher anordnen (datenorientiertes Design).
Im Graphen
Von Anfang an dauerhaft hoch · Tick-Zeit, CPU-Auslastung
Wo nachsehen
perf stat -d -p PID an den Spielserverprozess hängen, Instruktionen pro Takt (insn per cycle) sowie L1- und LLC-Cache-Misses messen und zusammen mit Tick-Zeit und CPU-Auslastung auswerten
Spricht dafür
CPU dauerhaft ausgelastet, aber insn per cycle niedrig und viele LLC-Misses. Bestätigt, wenn ein Build mit geändertem Datenlayout die Tick-Zeit bei gleicher Spielerzahl deutlich senkt
Spricht dagegen
CPU-Auslastung niedrig, Ticks trotzdem langsam: Ursache, die außerhalb der CPU wartet, etwa Locks oder I/O-Wartezeiten
perf-stat(1) — Linux manual pageperf -p zählt Hardware-Events eines laufenden Prozesses und zeigt insn per cycle, -d ergänzt Events der L1- und LLC-Datencaches