Ich spiele da mit 2. Server V 5.1.0 herum, und habe den warningstream Zeile 1382 aus serverenvoirenment.cpp mal immer zum Ende anzeigen lassen,
"took ... of 40 ms" berechnet sich aus Zeile 1366:
- Code: Select all
u32 max_time_ms = m_cache_abm_interval * 1000 / 5;
40 * 5 / 1000 = 0.2 (jupp, ist so gesetzt)
Fragen, denen ich gerade nachgehe:
* wie stellt man für seinen Server am Besten die max_time_ms (abm_interval) fest, um seltenst den break in Zeile 1386 zu erhalten = nicht alle abm ausgefuehrt ) aber doch nicht unnoetig Zeit zu verschwenden gegenueber meist ms Nutzung.
** was passiert mit den nicht ausgeführten abm nach break ?
*** später also wieder 1 sek erneut ? ja, siehe shuffle oberhalb in code ...
* was und wo machen da die settings aus minetest.conf
** abm_interval :
*** get in "m_cache_abm_interval" und setzt so auch
*** "max_time_ms" : wichtige break abm time !
--> setzt Wiederholungszeitraum abm Berechnung, da aber abm interval meist 1 reicht 1
--> wird als Marke mit 20% der Zeit für "max_time_ms" genutzt.
** active_block_mgmt_interval :
*** zu "m_cache_active_block_mgmt_interval" und dann mal
*** finde da nur "if (m_active_blocks_management_interval.step(dtime, m_cache_active_block_mgmt_interval)" mit
ABER keine Verbindung von set in mt.conf zu dann "m_active_blocks_management_interval"
** dedicated_server_step :
*** wird zu via "g_settings" zu "m_lag" (server.cpp Z 2229, 2752, 3737)
--> damit ist die Anzeige in der Serverliste ja nicht echter lag ... ?
** server_step: zu
*** "m_recommended_send_interval" und dann ?
** nodetimer_interval :
*** zu "m_cache_nodetimer_interval" und gefunden dann in
*** "if (m_active_blocks_nodemetadata_interval.step(dtime, m_cache_nodetimer_interval)) {" Z 1308,
*** wird dann zu dtime
bin da noch dran, erst noch suchen wo die genutzt werden, und dabei teils schon herum probieren ...
Testaufbau: 2 eigentlich identische Server (hardware, gleiche DB(welt))
* aktiver MTS offen lauft
** mit V 5.0.1,
** 3 Spieler (Siriphron, Thailand, Thomas) ... Thomas in home mit Maschinen
** "meine" .conf Werte,
*** dedicated_server_step = 0.033
*** server_step = 0.05
*** active_block_mgmt_interval = 0.5
*** abm_interval = 0.2
*** nodetimer_interval = 0.1
= lag 0.19 - 0.21
* und test MTS
** mit V 5.1.0,
** 1 Spieler, Siriphorn , standart werte .conf
= started mit lag 1.31, min_lag 0.30 - 0.33
** dann 2 Spieler (Siriphorn, Thomas an gleichen Positionen)
= lag kaum unter 0.44
** test mit
*** dedicated_server_step = 0.033 (sonst 0.09)
*** server_step = 0.05 (kein default ?)
= lag bisher 0.46 und seit 3 Minuten
** test mit (plus)
*** active_block_mgmt_interval = 1.0 (statt 2.0)
--> eine Änderung sieht man sofort, "abm took xms out of 100ms" jetzt (vorher 200ms)
= lag auch nur bis 0.45 runter
** test mit (plus)
*** abm_interval = 0.5
--> auch hier sofort zu erkennen, dann jetzt immer 2 abm Berechnungen je Sekunde laufen, aber eine davon eher leer.
= lag not under 0.45
= auch mit korrekter Anzeige min lag 0.44
einen Fehler gefunden, jetzt zeigt es korrekt die vollen ABM an, also wenn eine Runde fertig
- Code: Select all
2019-11-09 13:25:18: WARNING[Server]: abm took 38ms of 100ms (processed 278 of 278 active blocks)
2019-11-09 13:25:18: WARNING[Server]: abm took 0ms of 100ms (processed 278 of 278 active blocks)
2019-11-09 13:25:19: WARNING[Server]: abm took 40ms of 100ms (processed 278 of 278 active blocks)
--> da sollte ich wohl annehmen, dass
* entweder die Einstellung abm_interval 0.5 sinnlos ist (weil eben alle abm meist auf 1 oder mehr eingestellt sind)
* oder es nur dann Sinn macht, wenn abm interval von weniger 1 haben, oder nicht GENAU 1, so würde sich die Bearbeitung der abm langsam auf die 2 Zyklen jetzt verteilen ?
** test mit
*** active_block_mgmt_interval = 0.5
*** abm_interval = 1.0
--> klar, nur noch jede Sek und wieder mit 200ms Zeitfenster
= lag wie vorher min 0.45
** test mit
*** nodetimer_interval = 0.1 (rest belasen)
= lag auch nicht unter 0.45
somit muesste ich also jetzt dort den V 5.0.1 compilieren und alles genau so starten ... und sehen ob dort ?
aber erst habe ich einen anderen Versuch gemacht:
* minetest.conf: abm_interval = 0.5
* mod/pipeworks/sandtube: interval 0.5
und das sieht man offensichtlich jetzt, den die sonst leere Ausführung abm mit 0 ms hat jetzt zu tun ...
also läuft Sandtube jetzt nur doppelt so oft, aber man muss das so einstellen können, dann die ABMs sich auftrennen, also nicht immer ALLE genau nach einer sek laufen ... mhh
= abm_interval auf 0.1 (dann aber auch die % ändern) und die set in mod alle krumm, also nicht 1.0 sondern je nach Wichtigkeit 0.5 bis 0.9 denke ich,
= die laufen dann schon auch häufiger, aber sollten nicht immer zusammen aktiv berechnet werden. Das sollte die abm Zeit verkürzen, mehr verteilen ... denn Zeit genug ist ja ... meist hier bis so 60ms, und das in 1000 ms, gehen also locker 10 mal rein, sind dann aber schneller ...
Richtig: im Prinzip funktioniert das: Ich habe switching_station auf 0.9 gesetzt, und 3 weitere krumm interval. Ich sehe klar, wie dann bei 10 abm Durchläufen je Sek die doch auffällige Switching_station abm, "durch wandert", und dann nur alle 9 sek wieder den Hauptablauf abm trifft (also so nur alle 9 sek evtl. took too long, und break !)
= lag aber unverändert auf der 5.1.0 mit 0.45
==> Anteile der unter internal 1.0 getunten abm dürfte dann ja auch höher werden (/profiler save), aber wenns sonst hilft
UND zum Abschluss eben noch:
V 5.0.1 kompiliert mit 70ms Zeit, und gleichen Settings .conf und Intervall wie letzter Test ... V5.1.0
--> lag startete gleich viel tiefer fast nur 1.2, sonst unter 5.1.0 bei grob 1.6
= aber hängt auch bei 0.45 fest ... (und gucke auf produktiven Server uns sehe 0.2 bis 0.24 ... ???)
damit stehe ich erst mal in einer Sackgasse ... wieso ... ?
Dennoch: 2 Ergebnisse :
* Die Frage 1 kann ich doch beantworten, die abm Zeit zu ändern macht nur Sinn mit einer Anpassung/Änderung der Intervall Einstellungen in einigen "harten" ABMs die unbs weitgehend bekannt sind.
--> Entzerrung der NUR auf 1 Sek abm Berechnungshäufung ALLER abm = seltener Break und Verluste, und wohl dem Vorteil mit geringer Änderung (switching_station 0.9) evtl. schneller Antwort zu haben, aber weniger Peaks ?
* und mir fällt noch was auf: auf dem 5.0.1 Test habe ich bisher trotz nur 70 ms (5.1.0 gab ich 75ms) keine Warnmeldung abm Break gesehen habe. Unter 5.1.0 gab es die aber ! (gleiche Config sonst)
und nicht
* ich konnte so auch keinen höheren lag unter 5.1.0 nachweisen, auch wenn der auf dem Produktivserver mit dem Radius 70 Emitter klar zu erkennen war. Evtl. wirkt das erst bei mehr Arbeit und dann eben proportional verstärkt?
Server: still up, see some gamer - but there is a new 1st important thread "climate change" for me. Something I know since 1992 - had seen the melting glacier in Switzerland.