Soft-Timeouts auf dem Wettkampf-System

SvenK
Beiträge: 114
Registriert: Mo 17. Okt 2011, 08:40

Soft-Timeouts auf dem Wettkampf-System

Beitragvon SvenK » Fr 7. Mär 2014, 09:37

Vor einigen Tagen erhielten wir Meldungen von einigen Teilnehmern, dass sie Probleme mit Disqualifikationen ihrer Spieler Aufgrund von Soft-Timeouts (d.h. Ueberschreitung der zulaessigen Berechnungszeit von zwei Sekunden fuer einen Zug) haben.

Ich habe daraufhin das Wettkampfsystem auf derartige Probleme untersucht, konnte aber nichts feststellen. Ich gehe daher davon aus, dass die Ursache der Timeouts bei den Spielern liegen. Wenn jemand weiterhin der Meinung ist, dass sein Spieler unberechtigt wegen Timeouts disqualifiziert wird, moege sie/er hier etwas dazu schreiben oder sich direkt per eMail an mich wenden (svk@informatik.uni-kiel.de).

wussi
Beiträge: 3
Registriert: Fr 7. Mär 2014, 16:55

Re: Soft-Timeouts auf dem Wettkampf-System

Beitragvon wussi » Fr 7. Mär 2014, 17:03

Ich habe auch das Gefühl, dass der Server vor der Zeit ein Timeout signalisiert.
Wir verwenden den Delphi-Client und überwachen die Rechenzeit mit der Funktion gettickcount.
Bei einzelnen Spielen (über den Menüpunkt <neues Spiel>) tritt ein Timeout nicht auf, wählt man den Menüpunkt <Testspiele> tritt ein Abbruch praktisch bei jedem Spiel auf.
Momentan begrenzen wir die Rechenzeit auf unter eine Sekunde, um den Fehler zu vermeiden.

Eror
Beiträge: 7
Registriert: Fr 7. Mär 2014, 20:40

Re: Soft-Timeouts auf dem Wettkampf-System

Beitragvon Eror » Fr 7. Mär 2014, 21:02

Ich verwende ebenfalls den Delphi-Client und habe (auch durch Gettickcount) ermittelt, dass die Grenze für die Disqulifikation bei etwa 1250-1300ms liegt, also weit unter den angegebenen 2000ms. Allerdings gilt dies nur für Spiele auf dem Online-Server. Wenn ich an meinem eigenen Rechner spielen lasse, liegt der Grenzwert wie zu erwarten bei 1900-2000ms. Ich möchte hinzufügen, dass die letzten Jahre, in denen ich teilgenommen habe, es solche Probleme nicht gab. Damals kam man ganz gut mit ca. 200ms Sicherheitsabstand aus. Da dieses Problem anscheinend nur für Delphi-Clients gilt fühle ich mich nun natürlich benachteiligt.

bennofs
Beiträge: 16
Registriert: Fr 7. Mär 2014, 12:22

Re: Soft-Timeouts auf dem Wettkampf-System

Beitragvon bennofs » Sa 8. Mär 2014, 14:48

wussi hat geschrieben:Bei einzelnen Spielen (über den Menüpunkt <neues Spiel>) tritt ein Timeout nicht auf, wählt man den Menüpunkt <Testspiele> tritt ein Abbruch praktisch bei jedem Spiel auf.


Das liegt warscheinlich daran, dass bei einzelnen Spielen die Zeit der Animation m.W.n nicht herausgerechnet wird, d.h. der Client hat mehr Zeit.


Eror hat geschrieben:Ich verwende ebenfalls den Delphi-Client und habe (auch durch Gettickcount) ermittelt, dass die Grenze für die Disqulifikation bei etwa 1250-1300ms liegt, also weit unter den angegebenen 2000ms. Allerdings gilt dies nur für Spiele auf dem Online-Server. Wenn ich an meinem eigenen Rechner spielen lasse, liegt der Grenzwert wie zu erwarten bei 1900-2000ms. Ich möchte hinzufügen, dass die letzten Jahre, in denen ich teilgenommen habe, es solche Probleme nicht gab. Damals kam man ganz gut mit ca. 200ms Sicherheitsabstand aus. Da dieses Problem anscheinend nur für Delphi-Clients gilt fühle ich mich nun natürlich benachteiligt.


Ich habe das selbe Problem, jedoch mit einem selbstgeschriebenen Client in der Programmiersprache Haskell. Ich verwende momentan ein timeout von 1800ms clientseitig, bekomme jedoch ab und zu timeouts.

SvenK
Beiträge: 114
Registriert: Mo 17. Okt 2011, 08:40

Re: Soft-Timeouts auf dem Wettkampf-System

Beitragvon SvenK » Mo 10. Mär 2014, 11:49

Wir wollen natuerlich nicht, dass es zu Ungerechtigkeiten kommt, die auf das Wettkampfsystem zurueckzufuehren sind. Grundsaetzlich ist das Wettkampfsystem das selbe wie letztes Jahr, wir haben keine grundlegenden Dinge veraendert. Ich suche auch weiter nach moeglichen Problemen, aber solange ich keine Hinweise auf einen Fehler im Wettkampfsystem finde, muss ich davon ausgehen, dass der Fehler im jeweiligen Client steckt.

Wenn ihr Ideen habt, wie ich die Probleme reproduzieren kann und mir Indizien geben koennt, die auf einen Fehler im Wettkampfsystem hindeuten, lasst sie mir bitte zukommen (hier im Forum, per PM oder per Mail an svk@informatik.uni-kiel.de, mein GPG-Schluessel ist auf den Servern).

@Eror: Ich werde deinen Client vom letzten Jahr nochmal auf dem Wettkampfsystem testen. Ist der neueste Client vom letzten Jahr auch so, dass er an die 2 Sekunden Grenze rangeht oder welcher waere da geeignet?

@bennofs, @wussi: Koennt ihr mir einen Link zu einem Spiel im Wettkampfsystem schicken, wo dein Client unrechtmaessig Timeouts produziert hat?

bennofs
Beiträge: 16
Registriert: Fr 7. Mär 2014, 12:22

Re: Soft-Timeouts auf dem Wettkampf-System

Beitragvon bennofs » Mo 10. Mär 2014, 12:57

SvenK hat geschrieben:Koennt ihr mir einen Link zu einem Spiel im Wettkampfsystem schicken, wo dein Client unrechtmaessig Timeouts produziert hat?


z.B: http://contest.software-challenge.de/sa ... nters/1326
Log: http://contest.software-challenge.de/sa ... type=match

Laut meinem Client benötige ich eine Zeit von 1.801634867s.

SvenK
Beiträge: 114
Registriert: Mo 17. Okt 2011, 08:40

Re: Soft-Timeouts auf dem Wettkampf-System

Beitragvon SvenK » Mo 10. Mär 2014, 13:57

Wie misst Du denn die Zeit? Laut Server-Log stimmen die von deinem Client gemessenen Zeiten mit einer Abweichung von etwa 10ms, aber bei dem Zug wo Dein Client disqualifiziert wurde, gibt der Server eine Zeit von 2276ms an. Vielleicht kannst Du mir mal Deinen Code schicken?

bennofs
Beiträge: 16
Registriert: Fr 7. Mär 2014, 12:22

Re: Soft-Timeouts auf dem Wettkampf-System

Beitragvon bennofs » Mo 10. Mär 2014, 16:13

Ich messe die Zeit im Prinzip mit `clock_gettime(CLOCK_MONOTONIC)` (ich verwende Haskell, deswegen ist der Call nicht direkt sichtbar). Der relevante Code sieht so aus:

Code: Alles auswählen

  -- Logging-Ausgaben
  liftIO $ putStrLn "Waiting for move request ..."
  waitForMoveRequest room

  -- Zeitmessung starten
  clock <- liftIO newClock

  -- ...
  -- Zug senden
  -- ...

  -- Zeitmessung stoppen
  liftIO endBlock
  t <- liftIO $ clockGetTime clock

  -- Ausgabe der Zeitmessung
  liftIO $ do
    startBlock "Timing"
    putStrLn $ "Total time: " ++ show t
    endBlock


Stimmen eigentlich die Anzahl der Züge, zu denen mein Client Zeiten ausgibt, mit denen auf dem Server überein? d.h. gehört die letzte Zeit auch zu dem Zug, der den Timeout verursacht hat?

SvenK
Beiträge: 114
Registriert: Mo 17. Okt 2011, 08:40

Re: Soft-Timeouts auf dem Wettkampf-System

Beitragvon SvenK » Di 11. Mär 2014, 07:41

Ja, der Timeout passierte beim dritten Zug Deines Clients, das passt mit dem Serverlog zusammen:

Code: Alles auswählen

13:36:26 INFO  sc.server.gaming.GameRoom - Started the game.
13:36:28 INFO  sc.framework.plugins.ActionTimeout - Time needed: 1811
13:36:28 INFO  sc.framework.plugins.ActionTimeout - HardTimout wasn't reached.
13:36:28 INFO  sc.framework.plugins.ActionTimeout - Time needed: 113
13:36:28 INFO  sc.framework.plugins.ActionTimeout - HardTimout wasn't reached.
13:36:30 INFO  sc.framework.plugins.ActionTimeout - Time needed: 1828
13:36:30 INFO  sc.framework.plugins.ActionTimeout - HardTimout wasn't reached.
13:36:30 INFO  sc.framework.plugins.ActionTimeout - Time needed: 110
13:36:30 INFO  sc.framework.plugins.ActionTimeout - HardTimout wasn't reached.
13:36:32 INFO  sc.framework.plugins.ActionTimeout - Time needed: 2276
13:36:32 INFO  sc.framework.plugins.ActionTimeout - HardTimout wasn't reached.
13:36:32 WARN  s.f.plugins.RoundBasedGameInstance - Client hit soft-timeout.


Log von Deinem Client (nur das Timing):

Code: Alles auswählen

Sent join game message. Awaiting begin of server response ...
Got protocol start from server.
Assigned color RED
Waiting for move request ...
Got move request
Total time: 1.806577456s
Waiting for move request ...
Got move request
Total time: 1.818918239s
Waiting for move request ...
Got move request
Total time: 1.801634867s


Aus dem Code-Auszug von Dir kann ich leider nicht viel herauslesen. Das sieht grundsaetzlich sinnvoll aus, aber ich sehe z.B. nicht, wie der Zug gesendet wird und ob das Senden beim Stoppen der Zeit bereits abgeschlossen ist. Wenn Du moechtest, kannst Du mir nochmal Deinen vollstaendigen Code schicken.

Eror
Beiträge: 7
Registriert: Fr 7. Mär 2014, 20:40

Re: Soft-Timeouts auf dem Wettkampf-System

Beitragvon Eror » Mi 12. Mär 2014, 18:20

Ist der neueste Client vom letzten Jahr auch so, dass er an die 2 Sekunden Grenze rangeht oder welcher waere da geeignet?


Also damals lag das Zeitlimit noch bei 4 Sekunden und dem war auch mein Client angepasst. Ich habe allerdings den Quelltext noch und kann ihn gerne auf 2 Sekunden umarbeiten. Falls die Notwendigkeit besteht sag einfach nochmal Bescheid.

Ich suche auch weiter nach moeglichen Problemen, aber solange ich keine Hinweise auf einen Fehler im Wettkampfsystem finde, muss ich davon ausgehen, dass der Fehler im jeweiligen Client steckt.


Naja, es kann ja auch gut sein, dass der Fehler schon im Delphi-SimpleClient steckt. Auch das sollte bitte überprüft werden.