themittani: Den Eve Online Server Tick verstehen

Es ist eine Situation die viele von uns kennen: Eure Allianz campt ein Gate, und der Gegner ist in euer Camp gesprungen. Jeder wirft seine Drohnen aus und weist sie dem schnellsten Aufschalter der Gang zu, um darauf zu warten „Point!“ auf den Comms zu hören. Der Gegner enttarnt sich, und es ist ein schnelles Schiff. Jeder fängt an ihn aufzuschalten, und du schaffst es sogar. Aber dein Punkt wird nie aktiv, das Spiel behauptet der Gegner wäre bereits im Warp.

(Dieser Beitrag von Namamai wurde von Kandoli übersetzt. Den Link zum Original gibt’s ganz unten.)

Gratulation: Du bist nur ein weiteres Opfer des 1Hz Destiny Server Ticks, jene Programmschleife die Tranquilitys schlagendes Herz darstellt.

 

Was ist der Destiny Server Tick?

Der Eve Server besteht aus mehreren Teilen, aber wenn es darum geht im All auf Dinge zu schießen, dann ist der entscheidende Teil: Destiny. Das ist der Teil der in der Eve Server Engine die Grids simuliert – er kümmert sich also darum die Physiksimulation von Eve umzusetzen (Schiffe, Drohnen und Raketen die herumfliegen) und Dinge an die Clients zu kommunizieren (Physik-Aktualisierungen, Modulaktivierungen, Zielaufschaltung, Gesundheit / Status und andere visuelle Elemente).

Jedes Sonnensystem auf dem Server hat eine Destiny-Schleife (Loop) der mit ihm verbunden ist. Dieser Loop läuft immer, und der Code im Loop sind ungefähr so aus:

  • Arbeit vor dem Tick
    • Bewege die Leute zwischen den Ticks, wenn sie zwischen Grids warpen oder die Grid-Grenzen überschreiten
    • Kümmere dich um einige Client-Aktionen, hauptsächlich mit Fliegen und Physik verbunden: „Ich möchte an Gate X warpen“, „Ich möchte Objekt Y auf 2 km umkreisen“, „Ich möchte Drohne X in meinen Bay zurückholen“
    • Kümmere dich um einige Server-Aktionen: „Drohne X ist gerade explodiert“, „Object Y hat soeben eine Rakete erzeugt“, etc.
    • Sende Pakete an die Clients die alles enthalten was sie wissen müssen um das Spiel für die nächste Sekunde darzustellen, einschließlich der Ergebnisse von Aktionen die nicht Teil des Ticks sind (Waffen abfeuern, Tackle aktivieren und so weiter)
  • Physik (auch bekannt als „Evolve“)
    • Auf jedem Grid: simuliere Schiffe, Drohnen und Raketen die sich bewegen. Kümmere dich um Bumps und Bounces.
  • Arbeit nach dem Tick
    • Räume auf, und leg dich bis zum nächsten Tick schlafen.

Das Ziel des Servers ist das ein Tick exakt eine Sekunde läuft (oder 1 Hertz). Wenn es weniger Zeit als 1 Sekunde braucht um die Arbeit des Ticks zu erledigen, dann ist das großartig – wir können uns den Rest der Sekunde schlafen legen. (Oder, häufiger erledigen wir den Tick für ein anderes System auf dem gleichen Knoten.) Wenn es aber länger braucht als eine Sekunde, dann müssen wir eine schwere Entscheidung treffen: entweder einige Arbeit in den nächsten Tick schieben, oder für den aktuellen Tick mehr Zeit zur Verfügung stellen. Hier kommt Time Dilation ins Spiel; es dehnt die Spieleraktivitäten so aus dass wir mehrere Sekunden Zeit haben um die Arbeit eines Ticks zu erledigen.

Heißt das, Eve ist eigentlich rundenbasiert?

Nein! Eigentlich sogar das Gegenteil.

Der Server Tick hat ein paar einzigartige Beschränkungen. Er kann nichts tun was normalerweise direkt mit der Datenbank sprechen müsste, da diese lange Lags haben können. (Ein typischer Serverknoten kümmert sich um hunderte von Systemen, wenn demnach für jedes Grid ein Tick pro Sekunde stattfindet, könnte es nur 1/100 s haben um all die Arbeit eines einzelnen Grids zu erledigen. Das ist nicht genug Zeit um mit der Datenbank zu reden!)

Also wird die schwere Arbeit im Code in die Arbeitsvorräte anderer Threads gestellt; wenn diese Aufgabe erledigt ist, werden die Ergebnisse im nächsten Tick mitgeteilt. Es gibt eine hartnäckige Legende dass Eve single-threaded wäre, aber das ist ganz und gar nicht korrekt; jedoch ist die Kommunikation der Ergebnisse single-threaded.

Tatsächlich macht Destiny den Großteil der Arbeit außerhalb des Ticks. Wenn die meisten Client-Anweisungen – so wie „beginne ein Ziel aufzuschalten“ oder „aktiviere ein Modul“ – von Tranquility empfangen werden, arbeitet es diese normalerweise umgehend ab. Zum Beispiel:

  • Wenn du versuchst durch ein Gate zu springen, wird es dich als „springt durch das Gate“ markieren sobald es die Nachricht erhält, und es wird sofort eine Bestätigung senden dass du aktuell springst. Jedoch wird bis zum nächsten Server Tick keiner der anderen auf dem Grid wissen dass du springst.
  • Wenn du ein Turret Modul aktivierst, wird er sofort den Schaden berechnen und auch sofort auf das Ziel anwenden. Es wird sofort ein Paket zurückschicken, was dir sagt „Ich habe dieses Modul für dich aktiviert.“. Jedoch wirst du bis zum nächsten Tick nicht erfahren wie viel Schaden du gemacht hast — und auch dein Ziel wird das nicht. Ja, das bedeutet das du bis zu eine Sekunde lang tot sein kannst (oder bis zu zehn, bei schlimmem TiDi), ohne es zu merken! Das ist auch die Art wie Eve mit Waffen umgeht die mehrmals pro Tick feuern können; sie werden korrekt simuliert, und beide Schüsse erscheinen dann beim nächsten Tick.

Darüber hinaus sind einige Aufgaben vollständig getrennt vom Tick, und können jederzeit passieren; und sind daher nur eine Frage der Latenz zwischen dir und TQ; dazu gehört z.B. der Start von Scans mit Probes.

Der wichtigste Fall in dem dich diese Mechanik betrifft ist eine Reihe von eng verbundenen Aktionen; Ausrichten, Warpen und Ziel aufschalten. In beiden Fällen werden sie zum nächstgelegenen Server Tick „aufgerundet“.

Aufrunden: Warpen und Aufschalten

Wenn du „Warpe nach X“ in der UI klickst, wird dein Client umgehend eine Nachricht an den Eve Server senden: „Richte mich zum Celestial X aus, und warpe mich sobald wie möglich.“ Sobald er es erhält, wird der Server eine Aufgabe für den nächsten Server Tick in den Arbeitsvorrat einreihen. Beim nächsten Server Tick wechselt es deinen Status vom Impuls-Modus (normaler Grid-Flug) auf den Vor-Warp-Modus. Dann, direkt danach, und bei jedem nachfolgenden Server Tick wird es die folgende Prüfung durchführen: „Bist du über 75% deiner Maximalgeschwindigkeit, und korrekt ausgerichtet? Wenn ja, schalte umgehend in den Warp-Modus. Anderenfalls bewege dich weiter auf dem Grid wie von der Ausrichtung vorgeschrieben.“

Weil die Prüfung auf 75% als Teil des Ticks durchgeführt wird, wird deine Ausrichtungszeit effektiv zum nächsten Tick „aufgerundet“. Wenn EFT deine Ausrichtungszeit mit 4,5 Sekunden angibt, dann wird die tatsächlich Zeit zwischen 5-6 Sekunden schwanken. Wenn sich das schlecht anhört, dann keine Sorge – es ist sogar noch schlimmer für einen Möchtegern-Tackler.

Stell dir vor du sitzt am Gate mit einem „vorgeheizten“ Warp Disruptor – das bedeutet, du hast ihn vorab aktiviert und er blinkt bevor du aufgeschalten hast. Ein Hauler springt durch das Gate, und du willst ihn aufschalten und deinen Punkt anschalten. In der folgenden Reihenfolge wird es ablaufen.

  • Der Hauler-Pilot (sagen wir, das wäre ich) klickt auf „Warpe zum JITA Gate.“. Mein PC sendet ein „Warpe zum JITA Gate“ Paket zum Server; es kommt an, und die Arbeit für den Warp wird für den nächsten Server Tick vorgemerkt.
  • Ein Server Tick läuft; der Hauler enttarnt sich und beginnt sich auszurichten. Der Server schickt ein Paket zu deinem Client was dir sagt „Ein Badger-Pilot von Namamai ist gerade auf dem lokalen Grid L aufgetaucht, und er richtet sich Richtung JITA aus.“. Er wird das gleiche für das Ziel tun (lasst uns diesen Zeitpunkt T+0 nennen). Das Paket muss auf dem Weg zu deinem PC das Internet durchqueren – für europäische Spieler passiert das in 20 – 30 ms, für US Spieler 75-80 ms und für australische Spieler 150 – 200 ms.
  • Kurze Zeit später wird das „Ziel enttarnt“-Paket das Internet erfolgreich durchquert haben, und dein PC empfängt das Paket und verarbeitet es; die Badger taucht auf dem Overview auf.
  • Deine Augen und dein Gehirn sehen das Schiff auf dem Overview auftauchen, und du klickst auf „Aufschalten“. Dein PC sendet ein Netzwerkpaket an den Server: „Bitte beginne Namamais Badger aufzuschalten.“ Ein weiteres Paket quer durchs Internet!
  • Der Server empfängt dein „Ziel aufschalten“ Paket. Er arbeitet es umgehend ab und merkt ein „Aufschaltung abschließen“ Arbeitspaket vor, was exakt nach Ablauf deiner Aufschaltzeit auslöst – auch wenn das außerhalb des Server Ticks passiert. Es sendet dir auch umgehend ein Paket zurück, zur Bestätigung dass die Aufschaltung begonnen hat.
  • Einige Zeit vergeht. Egal was in dieser Zeit mit den Server Ticks passiert, der „Aufschaltung abgeschlossen“ Timer löst aus, und das Arbeitspaket wird ausgeführt. Es sagt „Okay, haltet fest dass dieser Spieler die Badger aufschaltet. Beim nächsten Tick gebt X Bescheid dass die Aufschaltung erfolgreich war, und gebt Y Bescheid dass er von X aufgeschaltet wurde.“ Der Server merkt die Information vor.
  • Nach dem nächsten Server Tick – was sofort im Anschluss, aber auch eine Sekunde später passieren kann – sendet der Server ein Paket an deinen Client, was da sagt „Du hast Namamais Badger aufgeschaltet; es hat 70% Schild, 100% Panzerung und 100% Hülle. Übrigens, es hat begonnen sich Richtung JITA auszurichten.“ Das Paket muss das Internet durchqueren! (Zur gleichen Zeit sendet es ein Paket an mich um mir wegen der YellowBox Bescheid zu geben, und es prüft ob ich die 75% Geschwindigkeitsmarke erreicht habe um in den Warp zu gehen.)
  • Dein PC bekommt ein „Aufschaltung abgeschlossen“ Paket. Er sendet ein Paket zurück mit dem Inhalt „Ok, aktiviere meinen Warp Disruptor auf X.“ Noch eine Internetdurchquerung!
  • Der Server bekommt dein „Tackle ihn“ Paket. Er aktiviert es umgehend, und merkt die „Du hast X‘ Warp unterbrochen“ Nachricht vor. Ich bin getackled.

Das ist eine lange Liste! Wichtig ist, es braucht vier Schritte durch das Internet zwischen deinem PC und dem Server. Mindestens wird bis zum nächsten Server Tick gerundet – und es kann schlimmer sein wenn du an einer Verbindung mit hoher Latenz hängst. Aus der Sicht eines US Spielers brauchte es 4 Sekunden zum Aufschalten; wenn wir weitere 100ms Latenz hinzufügen (z.B. durch Umzug nach Australien) würden wir eine ganze Sekunde zur endgültigen Aktivierung deines Punkts hinzufügen, womit es eine 5-sekündige Aufschaltung wäre! Besonders auf Verbindungen mit hoher Latenz kann deine Aufschaltung auch auf den übernächsten Server Tick geschoben werden, was eine weitere Sekunde hinzufügt bevor sich dein Punkt aktiviert.

Um zum Ursprungsthema zurückzukommen, das passiert wenn du die Aufschaltung aktivierst, aber keinen Punkt bekommst: es heißt das Schiff hat die 75% zum gleichen Server Tick erreicht zu dem deine Aufschaltung abgeschlossen wurde, und damit begonnen zum Ziel zu warpen bevor du dein Paket für die Aktivierung des Punkts senden konntest.

Praktische Anwendung: Instalock Gatecamps

Die Rundungseffekte sind besonders schmerzhaft wenn es um schnell aufschaltende und schnell ausrichtende Schiffe geht. Der 1Hz Tick des Servers erzeugt einige krasse Schwellwerte, und nach den Informationen oben ist es recht einfach ein Tool zu schreiben das mit den Verzögerungen bei Server Ticks spielt und die Latenz vom TQ beeinflusst, und Schiffe simuliert die versuchen andere Schiffe aufzuschalten.

Stellt euch vor ihr habt eine Keres mit zwei Sensor Boostern, beide auf Scanauflösung gescripted. Das gibt der Keres eine errechnete Aufschaltzeit von 1,2s für die meisten Interceptoren. Zum Vergleich beträgt die Ausrichtungszeit für die meisten Interceptoren zwischen 1,9 und 3s, abhängig vom Fitting und den Skillpunkten des Spielers. Theoretisch sollte die Keres also in der Lage sein alle Interceptoren mit ordentlich Puffer zu fangen. Oder?

In der Praxis: nein –  wegen Latenz und Server Tick Rundung. Der Schwellwert ist 2s; jeder Interceptor mit einer Ausrichtungszeit unter 2s wird der Keres entwischen können. (Im besten Fall kann die Keres zwar aufschalten, der Punkt wird sich aber nicht aktivieren können bevor der Interceptor in den Warp geht.)

Also lasst uns mal auf Nano-Fit Interceptoren schauen. Welche Aufschaltzeit brauchen wir für die Keres um ein Schiff mit 1,9s Ausrichtungszeit zu fangen? Die Antwort hängt von deiner Latenz zum TQ Server ab:

  • Mit 100 ms Latenz zum TQ braucht die Keres eine Aufschaltzeit von höchstens 0,725s – erreichbar mit drei Sensor Boostern. Und außerdem ist der Schwellwert auch hier entscheidend, alle unter 0,725s werden alles fangen, alle bei 0,725s oder darüber werden alles verpassen (aufgrund der nicht rechtzeitigen Aktivierung).
  • mit einer 150 ms Latenz braucht die Keres eine offizielle Aufschaltzeit von unter 0,625s um einen 1,9s Interceptor aufzuschalten und festzuhalten.
  • Und so weiter. Grundsätzlich brauchen alle 50ms Latenz zum TQ eine 100ms (0,1s) Verringerung der Aufschaltzeit um es auszugleichen.

Um es klar zu sagen, wenn du Instawarp-Interceptoren fangen willst, ist das Wichtigste in London zu leben. Das, oder du hast eine Menge Sensor Booster – welche, unglücklicherweise von Stacking-Strafen betroffen sind.

Bedenkt dass dieses Prinzip nur in Gatecamps funktioniert. Das Campen von Station-Abdockpunkten ist etwas komplizierter, dein Client weiß bereits von der Existenz des Schiffs, und das Zusammenspiel zwischen Aufschaltung beginnen und Abdock-Unverwundbarkeit ist nicht 100% klar.

Kann CCP das beheben?

Ironischerweise kann CCP das, ja – aber nicht indem sie die Interceptor-Mobilität einschränken. Das Erhöhen der Server-Tick-Rate auf zwei Mal pro Sekunde (statt nur ein Mal) würde die meisten dieser Störungen vollständig eliminieren – und, was wesentlich wichtiger ist, es würde das Eve-Spielen zu einer viel besseren Erfahrung machen für Leute wie Australier oder Neuseeländer mit hohen Ping-Zeiten.

Die Server Tick Zeit im TQ ist tatsächlich ein Compiler-Zeit-Schalter. Den umzustellen ist so einfach wie den Server zu rekompilieren und die neue Kompilierung scharf zu schalten. Jedoch rechnet nicht damit dass das in naher Zukunft passiert. Die Server-Tick-Rate verdoppeln bedeutet einen starken Anstieg der CPU Last für jeden Knoten. In einer Welt in der JITA normalerweise schon TiDi hat wenn die Spieler nur normal spielen, ist die Erhöhung der Server-Tick-Rate wahrscheinlich nicht möglich. Um die Tick-Rate zu erhöhen müsste CCP eine enorme Verringerung der offenen Arbeit pro Tick erreichen. (Das Brain-in-a-Box/Dogma Projekt ist ein Schritt in diese Richtung.)

Ein anderer Weg zur Behebung wäre es, die voraktivierten Module zu Paketen zu machen die ihr zum Server schicken könnt – es würde zwei Round Trips eliminieren, was den Modulen erlauben würde im gleichen Tick automatisch vom Server aktiviert zu werden wie der in dem die Aufschaltung abgeschlossen wird.

Auf kurze Sicht gibt es keine einfache Lösung. Aber es ist nützlich zu verstehen was der Server tatsächlich tut, und warum diese Schiffe euch durch die Lappen gehen. Und das Problem ist nicht auf Interceptor begrenzt: so gut wie jedes Schiff folgt diesem Modell. Gebt euch immer ein bisschen mehr Scanauflösung als ihr denkt das ihr braucht! Im Besonderen braucht ihr ungefähr 2800 mm Scanauflösung um eine Frigate die sich in unter 2 s ausrichtet zuverlässig zu fangen.

 

Danke an CCP Veritas für seine Präsentation von Server Ticks, die dabei half das Tick System zu verstehen.

 

Understanding the Eve Online Server Tick | Eve Online News | TheMittani.com.

One thought on “themittani: Den Eve Online Server Tick verstehen

  1. Ich finde solche Infos immer sehr interessant, wahrscheinlich eine berufsbedingte IT-Störung 🙂 Ich denke wir als Spieler – wenn wir mit Grids voller Drohnen genervt auf den lahmarschigen Server schimpfen – vergessen gern was im Hintergrund alles funktionieren muss damit wir überhaupt abdocken konnten.

    Die Komplexität ist aufgrund von Mechanik, Spielerverhalten und „one shared universe“ äußerst hoch, das sieht man am einfachen Beispiel Lock and Tackle hier sehr schön.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert