Geistlande.de

Geistlande Forum (https://www.geistlande.de/forum/)
-- Geistlande Foren (https://www.geistlande.de/forum/forum,1,1,geistlande-foren.html)
  -- Rund um den Geistlande Server (https://www.geistlande.de/forum/forum,4,1,rund-um-geistlande-server.html)
    -- Hopper essen CPU auf (https://www.geistlande.de/forum/thread,680,1,hopper-essen-cpu.html)


Seiten (3): [1] 2 3 »
 
kaahne
Administrator
Hopper essen CPU auf
Hoppers sind bis auf Weiteres erlaubt, aber in größere Reihe geschaltet belegen sie sehr viele Systemressourcen.

Dabei kommen offenbar schnell über eine Million (!) Events zusammen, die innerhalb von 25sec an LWC geschickt werden. LWC ist schon von seinem Entwickler Hidendra optimiert worden, in den neuen Dev-versionen damit halbwegs klarzukommen. Sonst würde das ganze schlimmer aussehen und sich vor allem hochschaukeln. Von dieser Seite sind also keine Wunder mehr zu erwarten (vor Hidendras Fixes / danach).

Ab 1,5 Millionen Events wird es einfach bei jeder CPU eng und der Server verpasst seine Ticks (=lag). D

Folgende Zahlen sind von unserem Server:

Hoppers relativ inaktiv:

Code:
1
2
3
4
5
6
7
Total duration: 70.588 ms / 500 ticks
Average duration: 0.141 ms/tick
Selected event: InventoryMoveItemEvent[NORMAL]
Plugin: LWC
Location: class com.griefcraft.listeners.LWCPlayerListener
Execution count: 13972
Cancelled: 0 (0.0%)


Hoppers an einem (nur einem!) "Hotspot" aktiv:

Code:
1
2
3
4
5
6
7
Total duration: 9746.231 ms / 500 ticks
Average duration: 19.492 ms/tick
Selected event: InventoryMoveItemEvent[NORMAL]
Plugin: LWC
Location: class com.griefcraft.listeners.LWCPlayerListener
Execution count: 1630546
Cancelled: 1637 (0.1%)

Execution count: 13972 ---> Execution count: 1630546


Es ergeben sich also folgende Schlußfolgerungen, wenn Hoppers nicht gänzlich aus dem Programm genommen werden sollen:

  1. Keine reihengeschalteten Hopper in der Nähe von Spawns und öffentlichen Warps (weil deren Chunks auch ohne Spieler in der Nähe länger im Speicher bleiben).
  2. ZUR UNTERSUCHUNG DIESER MASSNAHMEN SIEHE UNTEN im THREAD: Ein großer Teil des Lags (sagen wir mal idealtypisch 50%, messen können wir nur den LWC Anteil) entsteht bei der und durch die Weitergabe des Events von Bukkit an LWC. Wenn für größere Teile der Anlage die LWC Protections entfernt werden (/cremove), könnte das einen positiven Effekt haben. Vielleicht baut man stattdessen einfach einen Tresor drumrum und schließt die Tür ab.
  3. ZUR UNTERSUCHUNG DIESER MASSNAHMEN SIEHE UNTEN IM THREAD: Alle Spieler welche in Reihe geschaltete Hopper benutzen und sich nicht für Option 2 entscheiden können sollen bitte sobald möglich eine Art Zentralschalter einbauen, der bei Serverlag dann auch konsequent von ihnen betätigt wird (wenn sie online sind -- wenn sie nicht online sind, werden die chunks mit den hoppern hoffentlich inaktiv, siehe punkt 1).
  4. Das Hopper Flag kann nur noch von Trusted Usern gesetzt werden (analog zu Pistons).

_________________________
kaahne - Geistlande Administrator
Bitte keine Anfragen per PM, nutzt das entsprechende Forum!
Zuletzt bearbeitet 25.01.2014 - 18:31:50 Uhr von kaahne
 
Couchracer
Wenn ich das richtig verstehe, kommen die Events nur auf, wenn ein Hopper auf eine LWC protection zugreift, oder ?

Das Lager der Freefarm fällt ja sicherlich auch unter "In Reihe geschaltete Hopper", allerdings habe ich eine Schaltung angebracht, so dass das Lager selbst die meiste Zeit inaktiv bleibt, außerdem werden nie mehr als 2,5 Items pro Sekunde (im ganzen Gebäude insgesamt) in Kisten gelegt.

Die 64 Doppelkisten laufen momentan noch auf /cpublic mit der Hopperflag.

Die Protection könnte ich ohne weiteres entfernen. Soll ich dort sonst noch etwas unternehmen ?
_________________________
* Signatur auf Abwegen *
 
DjEKI18
Staff
Dass die Trichter ein Rechner in die Knie zwingen, ist logisch. Aber dass der Server damit zu tun hat, war mir noch nicht so klar. Aber gut zu wissen. Ich dachte, alle Schaltungen, Trichter und Kolben werden auf dem client gerechnet und den effekt zum Server übergeben. Der Server teilt es den anderen Spieler mit, der in der Nähe steht. Das es umgekehrt läuft hätte ich nie gedacht. Ich hatte mal nen krasses Beispiel gemacht, 1000 Kolben in Bewegung zu bringen, der Client hat am meisten gearbeitet und der Server war nicht ganz in voller Auslastung. Aber logisch ist es eigentlich, wenn der Kolben nicht mehr synchron läuft, dann sagt es uns, dass der Server laggt und somit es ja vom Server berechnet werden muss. Tja, einmal nicht richtig nachgedacht xD
 
doctor_albertio
Staff
Mir war schon einmal aufgefallen, das der Server selber "laggt" und hatte es auch mb erzählt, das es jedoch so schlimm ist hätte ich nicht gedacht. (Selber hatte ich 50 fps, jedoch haben die Hopper nicht gleichmäßig gepumpt.)

Das mit einem Generalschalter bringt kaum etwas, da die Hopper wohl trotzdem die Signale senden. Ganz im Gegenteil setzen diese eher noch den Clienten unter Druck. (Hab mal große Teile meines Lagers unter Spannung gesetzt).

Es kann natürlich sein, das nur manche Hopper diese Zahlen erzeugen, Wenn diese zum Beispiel randvoll sind und evt. hatte ich diese nicht unter Spannung gesetzt. Dies werde ich auch noch mal untersuchen :) = Normaler Smile .
_________________________
In meinem Gerichtssaal gibt es keine Unschuldsbeteuerungen.
Eine Unschuldsbeteuerung ist schuldig der Vergeudung meiner Zeit. Schuldig!
+++ Großinquisitor Fjodor Karamasow +++
 
mb80
Staff
Also ich find mein Lager sehr gut wie es ist - 4 Trichter hab ich, keine automatische Sortierung.
Kann jemand 4 Trichter unterbieten *gut* = Sehr gut!
_________________________
Wer Rechtschreibfehler findet darf sie behalten.
 
kaahne
Administrator
Weil diese Zahl von - heute sogar - 1,85 Millionen Events pro 25 Sekunden einfach astronomisch ist, rufe ich mal das Milchmädchen zur Hilfe:

1850000 Events / 25 Sec = 74000 Events/sec.

Nehmen wir aus heuristischen Gründen mal an es geht nur um einen Itemstack:

74000 / 64 = 1156

Man kann davon ausgehen, dass das Events jedesmal zweifach von Bukkit (oder von minecraft_server.jar) aufgerufen wird, beim Ausgang aus einem Container und beim Eingang, also

1156 / 2 = 578

Dann würde eine Kette von 578 Hoppern mit nur einem Itemstack reichen um auf diese Event-Millionen zu kommen.

Oder eben zwei Ketten von 289 Hoppern mit je einem Itemstack.

Sicher ist der Minecraft-Server darauf ausgelegt, auch mal 100000 Events/sec bearbeiten zu können. Laggt halt.
Und dass schon eine Anlage das bewirken kann, ist schon auch ein grundsätzliches Problem. Irgendeine Lösung werden wir finden müssen. Wobei ich es OK finde, wenn wir uns für die Analyse noch ein wenig Zeit nehmen.
_________________________
kaahne - Geistlande Administrator
Bitte keine Anfragen per PM, nutzt das entsprechende Forum!
Zuletzt bearbeitet 25.01.2014 - 19:16:22 Uhr von kaahne
 
doctor_albertio
Staff
So ich bau mir jetzt gerade erstmal ein Zweites Lager zusammen. Damit bei Stoßzeiten mein Lager nicht geladen werden muss. Dann kann ich dies noch nutzen und Unweltfreundlicher machen, wenn kein Hochbetrieb herrscht.

Dazu noch eine Frage, machen Enities immer noch solche Probleme, denn ich würde gerne mit Frames arbeiten?
_________________________
In meinem Gerichtssaal gibt es keine Unschuldsbeteuerungen.
Eine Unschuldsbeteuerung ist schuldig der Vergeudung meiner Zeit. Schuldig!
+++ Großinquisitor Fjodor Karamasow +++
 
Joey_Crafter
Frames können auch großen Lag verursachen.
_________________________
Slow down, take your time, drink some weed, smoke some wine.
 
doctor_albertio
Staff
Hmmm bei der oben gegebenen Rechnung liegt ein Rechenfehler vor.
Denn die Endergebnisse sind Zeitdimensionslos und die dafür benutzten Daten nicht.
Im Klartext auf dem Server gibt es unendliche viele Evente, wenn man nicht die Zeit definiert wo man misst. Die Messung hier läuft 25 Sekunden. also kommen die 74000 Events pro Sekunde raus. Da ein Hopper im Idealfall 2.5 Items in der Sekunde pumpt. Also bräuchte man ca. 29k Hopper um diesen Wert zu erzeugen. bei Doppelter auslese sind es immernoch 15k. Soviele Hopper hat hier niemand laufen. Ich komme nur auf ca. 10% davon.

Weiteres Beispiel um 1 item 500 Hopper weit zu pumpen, braucht man 200 Sekunden. bei einem Stack sind es ca. 226 Sekunden, das Sind über 3.5 Minuten.

Niemand kann solche Werte erzeugen auf diesem Server unter Vorgabe der bisherigen Ursache. Vorallem, wei mein Lager solche Werte erzeugt, wenn es gerade nicht pumpt. Kann es also sein, das auch leere Hopper Werte senden. Nein, denn dann müsste das Freefarmlager 1Mio werte senden, das tut es aber nicht. es sind jediglich 120k in einem Zustand, in dem garnichts gepumt wurde. (mein Lager hat ca. doppelt soviele Hopper). Was unterscheidet dann die Beiden Lager. Es sind die Anzahl der Vollgestopften Hopper, die sind bei mir viel mehr.

Durch mein 2. lager und der recht abgeschieden Lage meines Haublagers wird dieses kaum geladen. Es stört also nicht. Ich werde mich mal bei Zeiten rann machen und die Vollgestopften Hopper aussortieren.
Mal gucken ob es hilft.*gut* = Sehr gut!

Ps: Ich bin nicht immer dran Schuld, wenn euer MC laggt, es kann immernoch auch an eurem Clienten oder an der Internetleitung liegen. Solange nicht 3-4+ Spieler on sind merkt man davon kaum etwas. Vorallem nicht, wenn ihr nicht gerade mit Hoppern spielt.
_________________________
In meinem Gerichtssaal gibt es keine Unschuldsbeteuerungen.
Eine Unschuldsbeteuerung ist schuldig der Vergeudung meiner Zeit. Schuldig!
+++ Großinquisitor Fjodor Karamasow +++
 
kaahne
Administrator
Also schön. Es ist eine Milchmädchenrechnung, das habe ich gesagt. Und dass jegliches weiterrechnen nur heuristisch erfolgt, also um Einschätzungen finden zu können, obwohl man einen Zwischenwert in der Praxis nie so wiederfindet. Vieles ist reine Spekulation. Man kann sich vermutlich auch nicht den Code angucken, weil das Teile vom Mojang-Code betrifft, den nur die Bukkit Leute ansehen können. Das Problem ist aber seit fast einem halben Jahr bekannt (siehe links) und es wird kaum einfach so "gefixt" werden, weil wie es so schön heißt: "working as intended". Hopper waren von Mojang vermutlich nie als Förderbänder gedacht, sondern eben als Trichter.
Es ist möglich, dass die fünf internen Slots des Hoppers als Fifo-Pipeline geführt werden und jedes weiterrücken ein Event auslöst. Dann müsste man auch in Deiner Rechnung die Zahlen mit 5 oder 6 multiplizieren (bzw. wären ein fünftel oder sechstel der hopper notwendig, von denen Du ausgehst). Dann sind wir schon wieder bis auf etwa 50% an die 74000 ran.

Bei Dir liefen bei der letzten Zählung 2087 Hopper.

Und die lasten den Server weit über Gebühr aus. An dieser Ursache gibt es auch gar keinen Zweifel, wie auch immer die interne Struktur der Hopper aussehen mag. Und seit wir das Thema das erste Mal angerissen haben, hat sich die Auslastung auch nicht nach unten, sondern sogar noch nach oben bewegt (von 1,5 Mio auf unfaßbare 1,85 Mio Events).

Ich gehe momentan davon aus, dass wir eine Regelung brauchen, die die maximale Zahl der Hopper pro Anlage/Grundstück auf 100 oder eher weniger begrenzt und jede Anlage mit mehr als 30 Hoppern im Forum angemeldet sein muß, damit wir gelegentlich prüfen können, ob es von dort her laggt.
_________________________
kaahne - Geistlande Administrator
Bitte keine Anfragen per PM, nutzt das entsprechende Forum!
Seiten (3): [1] 2 3 »

22.11.2024 - 20:25:02