[Sammelthread] Mikroruckler - Entstehung, Benches, Einfluss von GPU-Anzahl und CPU, Lösungsansatz

1. Einleitung

Da hier im Forum das Thema Mikroruckler immer mal wieder vorkommt, die wenigsten aber genau wissen, was das ist, woher es kommt und wie man damit umgeht, eröffne ich diesen Thread.

Das soll nun aber kein Monolog werden, sondern auch euer Wissen und eure Erfahrungen sind gefragt. Vieles ist auch mir noch unklar, und wenn ich irgendwo Quatsch schreibe, wäre ich für eine Richtigstellung (aber bitte mit Erklärung und evtl. Beleg) sehr dankbar. Wer gar ein paar Benchmarks beisteuern möchte, ist herzlich willkommen, dies zu tun.

Abkürzungen

MR: Mikroruckler
SGPU: Single-GPU, Rendering auf einer GPU
MGPU: Multi-GPU, Rendering auf mehreren GPUs (Crossfire/SLI)
SFR: Split Frame Rendering, mehrere GPUs rechnen immer an einem Bild
AFR: Alternate Frame Rendering, mehrere GPUs rechnen allein an aufeinanderfolgenden Bildern


2. Mikroruckler und ihre Entstehung

Normale Ruckler (oder auch Makroruckler) enstehen, weil man zu wenig fps hat. Für einen flüssigen Bildaufbau fehlen dann Einzelbilder. Diese Ruckler können sowohl bei Single-GPU als auch bei CF/SLI auftreten.

Mikroruckler treten auf, wenn man genügend Bilder in einer Sekunde hat, diese aber nicht gleichmäßig über dieses Zeitintervall verteilt sind. Das folgende Diagramm stellt dies anschaulich dar.
Von oben nach unten: SGPU, MPUG (AFR), MGPU (SFR) - Bild von Spasstiger aus dem 3DC



MR sind ein inhärentes Problem der AFR-Rendermethode. Wird gleichzeitig immer nur ein Bild bearbeitet, wie es bei SGPU und SFR der Fall ist, werden die Bilder einfach ausgegeben, wenn sie fertig sind (ohne VSync oder Triple Buffering). Bei AFR hingegen ist Synchronisationsarbeit nötig, wie das folgende Diagramme zeigen sollen:

50fps


40fps, 33fps:


Annahmen:

  • Es dauert 10 ms, bis die Daten für ein Bild bereit sind
  • Eine GPU rechnet deutlich länger an einem Bild (GPU-Limit)
  • Die Bildaufträge werden sequentiell abgearbeitet und herausgegeben, nicht auf einmal
  • Wir betrachten nur ein kleines Zeitintervall (< 1 Sekunde)

Alle zwei Bilder (bei zwei GPUs) tritt eine größere Verzögerung ein, weil die GPUs zu schnell hintereinander angefangen haben zu rendern. Dem Rendering voran geht die Datenverwaltung der Spieleengine, Berechnungen auf der CPU, Transfers zum RAM und per PCIe zur Hauptgrafikkarte.

Die Engine weiß nicht, wie lange dies alles dauert und wie lange die GPU(s) rendern werden. Sie kann also in der Regel die Geschwindigkeit, mit der sie die Daten rausgibt, nicht passend timen.
Hierzu auch Lars Weinand von Nvidia:

‪Nvidia - Mikro Ruckler - Die Erklärung - Patrick fragt!‬‏ - YouTube

Einen wichtigen Einfluss hat die CPU, die wohl maßgeblich die Vorbereitungszeit für ein Bild bestimmt.

Allerdings muss irgendeine Synchronisation stattfinden, denn wenn man das Diagramm weiterführen würde, würde der zeitliche Abstand zwischen vorausberechneten Daten und zugehörigem Bild immer größer werden (solange man im GPU-Limit bleibt).

Man misst MR mit Frametimeabständen, also der Zeit, die zwischen der Ausgabe der einzelnen Bilder liegt. In einem Graphen sieht das dann so aus:


Quelle: PCGH

3. Einfluss der CPU

Wie schon erwähnt, liegt die Ursache der MR wohl daran, dass die Bildaufträge an die Grafikkarten zu schnell herausgegeben werden. Als Lösungsansatz sei vorweggenommen, dass man nun entweder die Aufträge vor dem Rendering oder die Bildausgabe nach dem Rendering besser timen kann.

Im Optimalfall wartet keine Komponente auf die andere:



Braucht die CPU noch länger, befinden wir uns im "CPU-Limit":



Das Rechenzeitverhältnis CPU/GPU an einem Bild ist hier wichtig, weil es darauf ankommt wie stark die o.g. Bremsung ist, was die Wartezeit und damit die Mikroruckler beeinflusst. An obigem Beispiel (selbe Framerate, immer noch 33fps) sehen wir also:


  • Braucht die CPU/Engine nur 10 ms, mikroruckelt es
  • Braucht die CPU/Engine 30 ms, mikroruckelt es nicht

Die These ist also:
Eine langsamere CPU vermindert je nach Engine/Spiel Mikroruckeln (im GPU-Limit!!!)

fdsonne und ich haben hierzu ein paar vorläufige Benchmarks gemacht. Erst möchte ich seine Werte präsentieren, da bei meinen Messungen wohl irgendwas schiefgelaufen ist und die Ergebnisse keinen Sinn ergeben (obwohl wir dasselbe gemessen haben).

Unigine Heaven, VSync aus. Linksk 4,5 GHz, rechts 2,2 GHz


Man sieht zumindest in diesem Beispiel:
Mit sinkender CPU-Leistung (Annäherung das optimale Lastverhältnis) nehmen die Mikroruckler ab!

Hier eine eigene Messung mit GTA 4. System ist ein 2600K und zwei GTX580 3GB im SLI.
Das Ergebnis ist überdeutlich. Nicht vergessen: Wir befinden uns hier trotz nur 1600 MHz aufgrund der hohen Bildqualitätseinstellungen (Auflösung!) im GPU-Limit! Die fps ändern sich nicht/kaum.



Und hier Mafia 2:


3. Einfluss der GPU-Anzahl

Bei gleichen fps sollte ein Gespann mit mehr GPUs auch stärkere Mikroruckler produzieren:



Hier ein Benchmark aus Unigine Heaven, immer mit denselben fps und anderselben Stelle:



Es ist schwierig, hier einen Trend herauszulesen. Ich schau mal, ob mein Kumpel das noch mit Mafia 2 testen kann, da sieht man es glaub deutlicher.

4. Lösungsansatz

Dass bei höheren fps die Frametimes gleichmäßiger werden, ist kein Geheimnis. Zwar hat man je nach Spiel manchmal auch noch bei 60+ fps ein unrundes Spielerlebnis, aber in der Regel ist man ab ca. 50 fps gut dabei.

Jetzt gibt es aber auch solche Leute wie mich, die sich ein Multi-GPU-System anschaffen, um möglichst maximale Einstellungen zu fahren. Also SGSSAA, Downsampling, 3DVision, Eyefinity und was es noch alles gibt. Selbst mit den stärksten Systemen kann es vorkommen, dass man deutlich unter 60 fps fällt. Dann trüben Mikroruckler massivst das Spielerlebnis. Ein halbwegs aktuelles Worst-Case Beispiel ist Mafia 2, das unter 50 fps praktisch unspielbar ist mit mehr als einer GPU.

Aber es gibt Abhilfe, und zwar in Form eines Framelimiters. Die genaue Funktionsweise kenne ich leider nicht, jedoch vermute ich stark, dass neben der Begrenzung der Framerate die x Bilder pro Sekunde gepuffert und gleichmäßig ausgegeben werden. Sehr anschaulich sieht man das auch wieder bei Mafia 2:



Ohne Limiter bewegen wir uns bei 33fps und es ist alles andere als flüssig. Mit auf 30 fps gesetztem Limiter werden sämtliche Mikroruckler eliminiert - das Spiel ist komplett flüssig. Frametimes sagen nicht die ganze Wahrheit. Manchmal kann die Verteilung derselbigen sehr gleichmäßig aussehen und doch ist es "unrund". In ausnahmslos allen Spielen, die ich getestet habe, sorgt ein fps-Limiter für ein absolut flüssiges Spielerlebnis (in meinem Rahmen von 30-40 fps, in dem ich mich auch mit einer GPU bewegen würde). Es gab sehr positives Feedback auch von anderen Leuten, die mit einem Limiter experimentiert haben.

Welche Software ist also hier zu empfehlen?
Ich kenne mehrere Programme, aber nur eines funktioniert (soweit ich es bisher ausprobiert habe) in allen APIs, in 32 und 64bit und ist in der Testversion kostenlos: Dxtory 2.0

Dxtory.com | Home

Dxtory ist eigentlich ein Captureprogramm für Video/Audio/Screenshots in Spielen, doch es hat auch einen Limiter integriert, der einwandfrei funktioniert:



Zwei sehr angenehme Eigenschaften dieser Software sind, dass man
  • das Limit völlig frei einstellen kann und nicht an 30 oder 60 fps gebunden ist
  • das Limit nur einmal pro Spiel einstellen muss, weil es eine Profilverwaltung gibt

Die Testversion hat nur eine (meiner Ansicht nach verschmerzbare) Einschränkung:
A license purchase site is displayed, when a program is terminated.
 
Zuletzt bearbeitet:
da kreischen immer alle "für Multi-GPU brauch ich doch CPU-Leistung wie SAU" und jetzt kommst Du mit "Für Multi-GPU ist zu viel CPU-Leistung ein Garant für MR". Wie geil ist das denn? *g*

Danke für die Beobachtungen.

Mir wurde jetzt von anderer Seite untergeschoben das selbst bei vsync ON die Frametimes noch nicht wirklich geglättet sind. Was sagst Du dazu? Meine Messungen sagen: Sieht eher nach Messfehlern aus als nach unglatten Verläufen. Wobei ja theoretisch die Frametimes ja absolut gleichmäßig sein müssten, da der Buffer mit dem fertigen Bild erst beim erreichen der Sync-Lücke gewechselt wird. Was darauf hindeutet das Fraps nicht misst wann der Buffer ausgegeben wird, sondern wann das Bild fertig gerechnet ist.
 
Zuletzt bearbeitet:
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
meine erfahrung ist das Vsync absolt glättet aber nur wenn ich mich bei über 60FPS befinde und die FPS somit abgefangen werden!
Bei weniger als 60FPS merkt man dann ein leichtes ruckeln! Allerdings hat man bei AMD ja die möglichkeit vsync auf 30FPS zu beschrängen wodurch man dann ein sehr gutes spielgefühl hat wenns dann natürlich wieder unter 30FPS geht ist das natürlich wieder kacke!

@LD teste mal nochmal Downsampling bei Crysis 2 und gib folgenden befehl ein "sys_maxfps 30" (ohne " ) und schon rennt es bomben weich!
 
Zuletzt bearbeitet:
Was darauf hindeutet das Fraps nicht misst wann der Buffer ausgegeben wird, sondern wann das Bild fertig gerechnet ist.

genau genommen sollte fraps messen wann die cpu der gpu den rechenauftrag erteilt. (denn dann steht der inhalt des bildes fest)
wann es ausgegeben wird ist doch egal. wenn die bilder zwar gleichmaessig ausgegeben werden, deren inhalt aber uralt ist, hast trotzdem mikroruckler :(
 
da kreischen immer alle "für Multi-GPU brauch ich doch CPU-Leistung wie SAU" und jetzt kommst Du mit "Für Multi-GPU ist zu viel CPU-Leistung ein Garant für MR". Wie geil ist das denn? *g*

Danke für die Beobachtungen.

Mir wurde jetzt von anderer Seite untergeschoben das selbst bei vsync ON die Frametimes noch nicht wirklich geglättet sind. Was sagst Du dazu? Meine Messungen sagen: Sieht eher nach Messfehlern aus als nach unglatten Verläufen. Wobei ja theoretisch die Frametimes ja absolut gleichmäßig sein müssten, da der Buffer mit dem fertigen Bild erst beim erreichen der Sync-Lücke gewechselt wird. Was darauf hindeutet das Fraps nicht misst wann der Buffer ausgegeben wird, sondern wann das Bild fertig gerechnet ist.

Wobei ich die Erfahrung gemacht habe dass VSync oft das input lag stark erhöht, deswegen ist es oft besser es ausgeschaltet zu lassen.
 
Wobei ich die Erfahrung gemacht habe dass VSync oft das input lag stark erhöht, deswegen ist es oft besser es ausgeschaltet zu lassen.

Dann teste das mal mit Crysis 2 + sys_maxfps 30 dazu und auf einmal ist kaum ein lag vorhanden!
 
genau genommen sollte fraps messen wann die cpu der gpu den rechenauftrag erteilt. (denn dann steht der inhalt des bildes fest)
wann es ausgegeben wird ist doch egal. wenn die bilder zwar gleichmaessig ausgegeben werden, deren inhalt aber uralt ist, hast trotzdem mikroruckler :(

Dann hat man input lag, Mikroruckler entstehen ausschließlich wegen unregelmäßigen Frametimes.
 
Wobei ich die Erfahrung gemacht habe dass VSync oft das input lag stark erhöht, deswegen ist es oft besser es ausgeschaltet zu lassen.

Eigentlich kommt das nur Zustande wenn man unter Vsync das Mousesmoothing aktiviert. Vsync allein kann keinen Inputlag verursachen.
 
Update mit neuem Kapitel und Mafia 2 als CPU-Mikrorucklertest :)
 
Ich habe bei mir auch den Limiter Dxorty installiert und auf eine konstante FPS eingestellt.
Allerdings scheint das nicht zu funktionieren.
Muss man noch irgendwas beachten?

Ich habs getestet mit AvA (Alliance of Valiant Arms) wo ich mittels MSI Afterburner mir die FPS im OSD ausgeben lasse.

Die Framerate schwankt da so wie immer.

Sys:
Win7 x64
2x HD 5850 im Crossfire
 
Zuletzt bearbeitet:
Mit DXTory hat man dann ein Grünes FPS symbol in der linken ecke oben!
Der limitiert die FPS sehr erfolgreich !
 
Der Prozess muss erkannt worden sein - das merkt man daran, dass Dxtory dann ein Profil für die exe anlegt. Und im ersten Tab sieht man den laufenden Prozess. Manchmal ist es ein bisschen hakelig bei der Erkennung, dann vielleicht erst das Tool und dann das Spiel starten.
 
Dann hat man input lag, Mikroruckler entstehen ausschließlich wegen unregelmäßigen Frametimes.

nope
wenn der inhalt des bildes2 - dasselbe ist wie der des bildes davor. dann hast von bild 2 zu 3 wieder nen fetten sprung. merkst dann als mikroruckler wenn du z.b. um ne wand strafst.

der inhalt der bilder muss sich gleichmaessig veraendern. hilft nichts wenn du zwar 60fps hast, die auch mit schoenen frametimes angezeigt werden, jedes 2. bild aber quasi keinen neuen inhalt bietet. dann hast du, fuers auge, erst wieder nur 30fps.
 
Zuletzt bearbeitet:
nope
wenn der inhalt des bildes2 - dasselbe ist wie der des bildes davor. dann hast von bild 2 zu 3 wieder nen fetten sprung. merkst dann als mikroruckler wenn du z.b. um ne wand strafst.

der inhalt der bilder muss sich gleichmaessig veraendern. hilft nichts wenn du zwar 60fps hast, die auch mit schoenen frametimes angezeigt werden, jedes 2. bild aber quasi keinen neuen inhalt bietet. dann hast du, fuers auge, erst wieder nur 30fps.

Aber wieso sollte so etwas passieren wenn die Grafikkarte gleichmäßig die Bilder berechnet und man genug FPS hat. Oder meinst du es so wenn die CPU kein neues Bild vorgibt rechnet bei CF und SLI die 2. GPU einfach das selbe Bild nochmal? Das passiert auf jeden fall nicht, die GPUs rechnen nur wenn die CPU etwas neues vorgibt.
 
eben.
deshalb sollte man messen wann die cpu der gpu den rechenauftrag erteilt. 2 gleich schnelle gpus werdn auch meistens gleich lang zum rendern vom frames brauchen die direkt hintereinander kommen. ungleiche frametimes kommen davon, dass die cpu die frames ungleichmaessig an die gpus zum rendern verteilt.
wenn die cpu schon die frames in diesem abstand raushaut:
0ms - 2ms - 10ms - 12ms - 20ms - 22ms
dann ists egal ob die frames die die gpus gerendert haben dann mit
0ms - 5ms - 10ms - 15 ms - 20ms - 25ms
angezeigt werden, mikroruckeln hast dann trotzdem - weil der inhalt des bildes mikroruckelt (nicht die ausgabe an sich)
 
eben.
deshalb sollte man messen wann die cpu der gpu den rechenauftrag erteilt. 2 gleich schnelle gpus werdn auch meistens gleich lang zum rendern vom frames brauchen die direkt hintereinander kommen. ungleiche frametimes kommen davon, dass die cpu die frames ungleichmaessig an die gpus zum rendern verteilt.
wenn die cpu schon die frames in diesem abstand raushaut:
0ms - 2ms - 10ms - 12ms - 20ms - 22ms
dann ists egal ob die frames die die gpus gerendert haben dann mit
0ms - 5ms - 10ms - 15 ms - 20ms - 25ms
angezeigt werden, mikroruckeln hast dann trotzdem - weil der inhalt des bildes mikroruckelt (nicht die ausgabe an sich)

Ja aber in dem Fall ist wäre es auch egal ob man mehrere oder nur 1 Karte hat. Aber generell kommen Mikroruckler wie man hier sehen konnte eher davon dass die CPU viel schneller Aufgaben austeilen kann als die GPU-s es rechnen können und somit muss die CPU immer wieder auf die GPU-s warten nachdem es schnell nacheinander die Aufgaben ausgeteilt hat.
 
Der Prozess muss erkannt worden sein - das merkt man daran, dass Dxtory dann ein Profil für die exe anlegt. Und im ersten Tab sieht man den laufenden Prozess. Manchmal ist es ein bisschen hakelig bei der Erkennung, dann vielleicht erst das Tool und dann das Spiel starten.

Es besteht anscheinen ein conflict mit anderen GPU Tools, die Hook Injections zum Erzeugen von Overlay OSDs benutzen (Rivatuner, Afterburner).

Dxtory doesn't work anymore

Ich lasse jedenfalls MSI Afterburner incl. OSD laufen, was dxtory wohl nicht verträgt.

Ich teste das heute Abend nochmal, vlt. reicht es ja das OSD vom Afterburner bzw. von Dxtory auszuschalten.

UPDATE

Der Konflikt besteht definitiv zwischen dem OSD Server vom MSI Afterburner und Dxtory.
Sobald dieser aktiv ist, funktioniert Dxtory nicht mehr.
Laut MSI Afterburner Doku wird der Server immer gestartet wenn folgendes benutzt wird: On-Screen Display, screen capture and automatic profiles management.
Man kann auch erkennen das der Server läuft, an einem kleinen zusätzlichen Tray Icon, was sich manuell nicht deaktivieren lässt, sondern nur durch das deaktivieren der oben genannten Funktionen im Afterburner.

Andere Komponenten des Afterburner sollten aber gehen: Lüftersteuerung, OC und sonstiges Monitoring.

So wie es aussieht besteht dieser Konflikt auch bei der Nutzung mit anderer Tools, die Hook Injections benutzen: dem ATITrayTool, RivaTuner oder dem EVGA Precision Tool.
Vlt. ist es besser diese Info noch in den ersten Post bei der Dxtory Sektion mit zu integrieren. OC Tools werden ja recht häufig genutzt.
 
Zuletzt bearbeitet:
Greift der limiter bei euch in Dragon Age2? Geht hier ums verrecken nicht...
 
Hm, manchmal ist Dxtory etwas zickig. Nicht oft, kann aber vorkommen. Hast es vor dem Spiel gestartet? Und auch mal während?
Der laufende Prozess sollte im Übersichtsfenster aufgelistet sein, dann ist er erkannt. EVGA-Precision/Afterburner aus?
 
Habe seit 2 Wochen nen 6970 Crossfire, habe bis jetzt absolut nix von irgendwelchen Mikrorucklern gemerkt und ich bin was Ruckler oder unsmoothes Bild angeht wirklich empfindlich. Habe aber auch nicht wirklich irgendwas gezockt, was unter 60FPS war. Aber es gibt auch kein Spiel zur Zeit was mein Gespann so ausreizt das man Ruckler merken würde.
 
DX9 läuft....DX11 nicht...

---------- Beitrag hinzugefügt um 21:26 ---------- Vorheriger Beitrag war um 21:25 ----------

Habe seit 2 Wochen nen 6970 Crossfire, habe bis jetzt absolut nix von irgendwelchen Mikrorucklern gemerkt und ich bin was Ruckler oder unsmoothes Bild angeht wirklich empfindlich. Habe aber auch nicht wirklich irgendwas gezockt, was unter 60FPS war. Aber es gibt auch kein Spiel zur Zeit was mein Gespann so ausreizt das man Ruckler merken würde.

Dann sei froh...

Vorallem geht es aber um temp und auslastung..mit limiter hab ich 20 Grad weniger, wozu brauch ich 80FPS max wenns 40min auch tun?
 
"""habe bis jetzt absolut nix von irgendwelchen Mikrorucklern gemerkt und ich bin was Ruckler oder unsmoothes Bild angeht wirklich empfindlich"""...

jo du bist schon ein richtiges Wunderkind *lach...
event. sollteste mal ein paar Grafikdetail anstellen... :-)
 
Habe seit 2 Wochen nen 6970 Crossfire, habe bis jetzt absolut nix von irgendwelchen Mikrorucklern gemerkt und ich bin was Ruckler oder unsmoothes Bild angeht wirklich empfindlich. Habe aber auch nicht wirklich irgendwas gezockt, was unter 60FPS war. Aber es gibt auch kein Spiel zur Zeit was mein Gespann so ausreizt das man Ruckler merken würde.

Das ist der Grund. Würdest du Downsampling oder SGSSAA zuschalten, sähe das ganz anders aus ;)
 
naja mit 60FPS max hat er da wohl wenig Chancen :fresse:

---------- Beitrag hinzugefügt um 21:47 ---------- Vorheriger Beitrag war um 21:42 ----------

Hm, manchmal ist Dxtory etwas zickig. Nicht oft, kann aber vorkommen. Hast es vor dem Spiel gestartet? Und auch mal während?
Der laufende Prozess sollte im Übersichtsfenster aufgelistet sein, dann ist er erkannt. EVGA-Precision/Afterburner aus?

nö geht nur unter DX9 hier bei dem Spiel.
 
naja mit 60FPS max hat er da wohl wenig Chancen :fresse:

---------- Beitrag hinzugefügt um 21:47 ---------- Vorheriger Beitrag war um 21:42 ----------



nö geht nur unter DX9 hier bei dem Spiel.

Was krieg ich, wenn ich mir die Demo lade und es hinbekomme? :d
Edit: Du machst irgendwas falsch, bei Blaire gehts. Vielleicht stellt er dir mal nen Screenie rein :)
Hab keinen Bock jetzt 2GB zu saugen für nix.
 
Zuletzt bearbeitet:
mach mal, wüßte jetzt nicht was ich da machen sollte, außer FPS und Haken setzen...
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh