Wie entstehen Warps?

Probleme oder Fragen zur DCS-Serie, Tipps, Tricks, Anleitungen und Tutorials.

Moderator: JaBoG32 Stab

Antworten
Benutzeravatar
BOSSHOG
Schaut öfter mal vorbei
Beiträge: 33
Registriert: 25. Mär 2012, 17:48

Wie entstehen Warps?

Beitrag von BOSSHOG » 12. Jul 2012, 12:16

Bei der Analyse der Warps sind mir folgende Ergebnisse aufgefallen:
Radar.lua fragt all 200 ms die Position des Ownships ab. DCS liefert die Lat/Long Position und einen Zeitstempel für diese Position. In der Radarapplikation wird daraus die Groundspeed errechnet. Dabei ist aufgefallen, das die Groundspeed im Mehrspielermodus manchmal um bis zu 300% springt. Das ist immer nur bei bestimmten Teilnehmern zu beobachten. Es liegt also eine Diskrepanz zwischen Position und Zeitstempel vor. Da diese Werte 1:1 zum Radar durchgereicht werden, ist die Ursache beim DCS des sendenden Teilnehmers einzuordnen. Das Netzwerk hat absolut keinen Einfluss auf diese Art Fehler. Die andere Beobachtung ist, dass ein Warp nie beim eigenen Flugzeug zu beobachten ist. Es sind immer die Anderen... Daraus kann man folgern, dass ein Warp lokal durch fehlerhafte Zeit/Positionsdaten für das eigene Flugzeug erzeugt wird. Der Fehler wirkt sich lokal nicht aus, da die Daten erst bei den anderen Teilnehmern ausgewertet werden. Beim Empfänger werden die fehlerhaften Daten zur Extrapolation benutzt (siehe Erklärung am Ende). Das bedeutet, dass die nächste darzustellende Position eines Fremdflugzeugs geschätzt wird, basierend auf Position, Fluglage und Zeitstempel. Wenn nun Zeitstempel und Position/Fluglage nicht zusammenpassen, dann wird eine unrealistische Geschwindigkeit errechnet die die nächste Position bestimmt. Da bei der Extrapolation nicht nur die Position betrachtet wird, sondern alle sechs Freiheitsgrade, so ist auch die unnatürliche Bewegung um die Flugzeugachsen erklärbar. Aus meiner Erfahrung weiß ich, das der Fehler zu 99% bei der Erzeugung des Zeitstempels zu suchen ist. Die aerodynamische Berechnung kann nicht sporadisch aus dem Ruder laufen. Das ist ein inkrementeller Vorgang bei dem ein Fehler dauerhaft kumulieren würde.
Es bleib die Frage nach der Ursache. Da beim Warp immer heftige Bewegungen mit hoher Geschwindigkeit zu beobachten sind, kann man schließen, dass der zeitliche Abstand zwischen zwei Zeitstempeln zeitweise zu kurz ist. Es ist also anzunehmen, dass zuerst ein Zeitstempel erzeugt wird, und dann die Berechnung der dazugehörigen Position beginnt. Wird nun der Berechnungsprozess durch einen Taskwechsel oder einem anderen Umstand unterbrochen, dann kann es vorkommen, dass die Position erst später errechnet wird, wenn das Flugzeug bereits weitergeflogen ist. Damit ist der Fehler erzeugt, da Position und Zeitstempel nicht mehr zusammenpassen. Eine Unterbrechung (Taskwechsel) wird wahrscheinlich wenn die Rechnerbelastung steigt. Ein gut programmierter Thread ist normalerweise so angelegt, dass er die Kontrolle sofort weitergibt, wenn seine Aufgabe nach einem Durchlauf erledigt ist. Falls die Bearbeitung aber 2 ms übersteigt, so sorgt das Betriebssystem dafür, dass der Thread einfach unterbrochen wird und der nächste Thread die Kontrolle erhält. Je mehr Prozesse gleichzeitig laufen, um so länger ist die Zeitspanne bis der unterbrochene Thread wieder die Kontroller erhält. Erschwerend kommt noch hinzu, dass die Applikation bestimmte Threads priorisieren kann. Das bedeutet, das ein weniger wichtiger Thread auch dann unterbrochen werden kann, wenn er die 2 ms noch nicht überschritten hat.
Die Rechnerbelastung steigt immer dann wenn komplizierte grafische Berechnungen anliegen. Das sind:

- Hohe Anzahl von Flugzeugen und statischen Objekten.
- Raucherzeugung
- Wolken
- Lichtquellen
- Spiegelungen
- Schattenberechnung

Nach meiner Beobachtung treten Warps immer dann auf wenn eine oder mehrere Bedingungen, wie oben angeführt, auftreten.

Fazit:
Wenn Warps auftreten, dann sollte der Teilnehmer, der die springende Maschine fliegt, darüber informiert werden. Er sollte prüfen, ob sein Rechner langsam in die Knie geht. Abhilfe schaffen könnte das Schließen aller nicht benötigten Programme auf dem Rechner. Die meisten Viren Scanner überprüfen alle eingehenden und ausgehenden Netzwerksdaten und die Laufenden Prozesse. Man muss eine Einstellung finden, die den Rechner am wenigste belastet. Es wäre von großem Nutzen, wenn ein Warper nach Ende der Übung einen kurzen Bericht posten würde, der die Rechnerausstattung, Konfiguration und die 'Options' Einstellung von DCS beinhaltet. Ich glaube, dass nach einer gewissen Zeitspanne die Konstellation sichtbar wird, die zur Warp Erzeugung führt. Leider wird es für A10-Warthog keine Verbesserung durch DCS geben. Wir könnten aber einen Beitrag zur Abhilfe leisten wenn in DCS-World die gleichen Probleme auftreten. Die obige Darstellung erhebt nicht den Anspruch auf Richtigkeit. Es soll ein Denkanstoß sein für weiter Meinungen und Beobachtungen.

Extrapolation
Wenn ein Objekt, wie ein Flugzeug in einer Simulation grafisch dargestellt werden soll, so treten Probleme auf, wenn die Positionsberechnung und grafische Darstellung auf unterschiedlichen Rechnern erfolgt. Bei der Positionsberechnung werden z.B. 100 Positionen pro Sekunde errechnet. Davon werden aber aus Belastungsgründen nur 20 Positionen pro Sekunde über das Netz and den Grafikrechner geschickt. Der Grafikrechner stellt aber 40 Frames pro Sekunde dar. Ohne Anpassung würde der Grafikrechner bei 40 Frames jeweils zwei mal die gleiche Position darstellen. Findige Programmierer haben dafür zwei Verfahren erdacht um doch auf die 40 Frames mit 40 unterschiedliche Positionen zu kommen. Bei der Interpolation wird eine oder mehrere zusätzliche Positionen zwischen zwei Positionen aus dem Netzupdate errechnet und als Frame dargestellt. Der Nachteil dieses Verfahrens ist, dass die grafische Darstellung um eine definierte Verzögerung hinterherhinkt. Bei der Extrapolation wird auf Grund von Position, Geschwindigkeit und Beschleunigungsdaten in Die Zukunft gerechnet, wo der Flieger zu einem bestimmten Zeitpunkt positioniert würde. Man erreicht in Grenzen eine beliebig hohe Frame Rate auf dem Grafikrechner und erhält eine Glättung der Flugbahn. Beide Verfahren sind eine Wissenschaft für sich und können endlos verfeinert werden. DCS hat auf diesem Gebiet eine hervorragende Arbeit abgeliefert. Es ist absolut nicht selbstverständlich, dass ein Fremdflieger derart ruhig beim Formationsflug dargestellt werden kann. Beide Verfahren hängen zu 100% vom exakten Zeitstempel bei der Datenberechnung ab.

BOSSHOG

Jack
Advanced Member
Beiträge: 506
Registriert: 29. Jul 2010, 19:49

Re: Wie entstehen Warps?

Beitrag von Jack » 12. Jul 2012, 15:20

Einspruch:
Also,man muss unterscheiden zwischen Warp und Ruckler durch die Grafikkarte.
Niedrige Frames sind zurückzuführen auf ein überlastetes System/ uberlastete Grafikkarte. Da das menschliche Auge erst eine Bildfrequenz ab 25 Bildern/s als fliessende Bewegung wahrnimmt, ensteht bei unter 25fps ebend eine ruckelnde Bewegung, die zeitlich aber korrekt abläuft. Diese ruckeln kann deshalb auch beim Offline-Modus auftreten.
Anders dagegen beim Warp. Der Hostrechner ist der Oberboss im Multiplayermodus, er synchronisiert alle anderen Rechner nach seinem Zeitablauf und verarbeitet dazu alle bei ihm eintreffenden Information. Und dabei spielt sowohl die Netzwerkanbindung(schlechte Qualität,niedrige Übertragungsrate, überlastetes System) und die unterschiedlichen Entfernungen der einzelnen Rechner zum Hostrechner(die Laufzeit des Signals,auch Ping genannt) die entscheidene Rolle.
Fehlen diese Informationen von einem einzelnen Rechner oder kommen diese bei ihm zu spät an,errechnet er diese aus den letzten ihm zur Verfügung stehenden Daten(Warp) und sendet diese an die anderen Rechner. Bekommt er dann wieder neuere Daten, korrigiert er nach(Warp). In der selben Zeit errechnet aber jeder Rechner für sich selbst und korrigiert dann nach den Vorgaben des Hostrechners ebenfalls nach(Warp).
Bild

Mea culpa :P

My Englisch is not the yellow from the egg ...^^

Benutzeravatar
BOSSHOG
Schaut öfter mal vorbei
Beiträge: 33
Registriert: 25. Mär 2012, 17:48

Re: Wie entstehen Warps?

Beitrag von BOSSHOG » 12. Jul 2012, 17:21

@Jack
Rückspruch:
Bei den Rucklern kann ich Dir nur zustimmen. Ich habe aber in meiner Karriere noch kein vernetztes Simulationssystem gesehen das so funktioniert wie Du das beschreibst (kann aber gut sein, dass ich noch nicht alles gesehen habe). Die Korrekturen können nicht im Hostrechner entstehen, da jeder Client unterschiedlich konfiguriert ist. Das heißt, auf Grund der unterschiedlichen Hardwareausstattung fährt jeder Rechner mit einer anderen Frame Rate. Die Korrekturen können nur vor Ort im Zielrechner durchgeführt werden. Der Host schaufelt die Daten lediglich durch. Jeder Client sendet so genau wie möglich seine Positionsdaten in einem vorgegebenen Takt. Dieser Takt hat mit der lokalen Frame Rate nichts zu tun und ist ausschließlich auf das Netz abgestimmt. Im Zielrechner müssen diese asynchronen Daten auf die lokale Frame Rate angepasst werden. Das geschieht mit Hilfe der Extrapolation. Dabei ist es wichtig zu wissen, dass kein einziger Frame auf einem Zielrechner die Position so darstellt wie sie im Quellrechner berechnet wurde. Es ist immer die Position wo das Flugzeug zur augenblicklichen Zeit sein müsste. Das Schlüsselwort ist die Zeit. Wenn die nicht stimmt, ist das Chaos perfekt. Das Netzwerk weist immer erhebliche Schwankungen auf. Würde man die Frames so verarbeiten wie sie vom Netzt kommen, dann würde man nach zwei Minuten laut schreiend die Simulation stoppen. Die wichtigste Information aus meinem Post sind die Geschwindigkeitsschwankungen. Die kommen bewiesenermaßen vom Client Simulationsrechner da ich aus der gesendeten Position und dem Zeitstempel die Geschwindigkeit errechne. Die Schwankung entsteht dadurch, weil der sendende Simulationsrechner einen falschen Zeitstempel zur Position liefert. Dieser Zeitstempel wird auch in der Extrapolation verwendet und verursacht nach meiner Erkenntnis deshalb die Warps. Ich habe exakt die gleichen Effekte auf zwei T1 Simulatoren der US Navy in Pensacola gehabt. Ich konnte das nur beheben indem ich die falschen Zeitstempel in unserer Simulation angepasst habe. Danach lief alles ruhig und normal. Warum letztlich die Zeitstempel falsch sind kann nur vermutetet werden. Eins ist jedoch gewiss, selbst wenn das Netzwerk glüht und der Hostrechner an Krücken geht, kann die Extrapolation einen flüssigen Simulationsablauf gewähren; solang Zeit und Position in den Datenpaketen aufeinander abgestimmt sind.
BOSSHOG

Antworten