Moin Moin in die Runde,
viele von euch haben sicherlich mitbekommen, dass unser Event von der Arma Nacht gestern Abend durch Serverprobleme leider nicht stattfinden konnte.
Inzwischen glauben wir das Problem weiter eingegrenzt zu haben und nun möchte ich gerne euren Input. (Ihr wollt wissen, was diese Basic.cfg ist? Hier entlang)
Generell sind fast alle Netzwerkseitigen Probleme auf eine fehlerhafte basic.cfg zurück zu führen. Ich persönlich habe es als problematisch empfunden Informationen zu dem Thema zu finden und best practices - gerade bei sehr großen Missionsgrößen zu finden. Beispiele gibt es kaum - meist nur ein paar Informationen, die man via Google findet².
Das große Problem an diesen Einstellungen ist, dass man diese Erfahrungen nur durch Trial and Error sammeln kann. Man muss eine recht große Spielerbasis haben um die Werte entsprechend zu konfigurieren - und um die Auswirkungen festzustellen. Aus diesem Grund möchte ich hier einmal dazu aufrufen die einzelnen Werte zu diskutieren und die basic.cfg's eurer Clans zu posten - damit wir alle aus den Erfahrungen lernen können.
Ich mache mal den Anfang mit ein paar der Konfigurationen der letzten Arma Nächte.
Das ist die Basic.cfg der 3. Arma Nacht und 5. Rocket Beans Arma Nacht:
language="English";
adapter=-1;
3D_Performance=1.000000;
Resolution_W=0;
Resolution_H=0;
Resolution_Bpp=32;
terrainGrid=25;
viewDistance=3000;
MinBandwidth = 131072;
MaxBandwidth = 655360000;
MaxMsgSend = 512;
MaxSizeGuaranteed=384;
MaxSizeNonguaranteed=256;
MinErrorToSend = 0.001;
MinErrorToSendNear = 0.1;
MaxCustomFileSize=100;
class sockets{maxPacketSize = 1300;};
Hier war einer der Fehler, die jedoch erst bei einer späteren Mission aufgetreten ist, dass die MTU (maxPacketSize) zu klein war.
Der folgende Fehler ist später aufgetreten, was aber den Server nicht zum disconnecten aller peers gebracht hat:
ZitatNetServer: trying to send a too large non-guaranteed message (len=1348/1372) to
Hier die kaputte Basic.cfg, die wir auf dem Testserver verwendet hatten. (ACHTUNG, WICHTIGE LESSION LEARNED)
// These options are created by default
language="English";
adapter=-1;
3D_Performance=1.000000;
Resolution_W=800;
Resolution_H=600;
Resolution_Bpp=32;
terrainGrid=25;
viewDistance=3500;
// These options are important for performance tuning
MinBandwidth = 131072;// Bandwidth the server is guaranteed to have (in bps). This value helps server to estimate bandwidth available. Increasing it to too optimistic values can increase lag and CPU load, as too many messages will be sent but discarded. Default: 131072
MaxBandwidth = 10000000000;// Bandwidth the server is guaranteed to never have. This value helps the server to estimate bandwidth available.
MaxMsgSend = 128;// Maximum number of messages that can be sent in one simulation cycle. Increasing this value can decrease lag on high upload bandwidth servers. Default: 128
MaxSizeGuaranteed = 512;// Maximum size of guaranteed packet in bytes (without headers). Small messages are packed to larger frames. Guaranteed messages are used for non-repetitive events like shooting. Default: 512
MaxSizeNonguaranteed = 256;// Maximum size of non-guaranteed packet in bytes (without headers). Non-guaranteed messages are used for repetitive updates like soldier or vehicle position. Increasing this value may improve bandwidth requirement, but it may increase lag. Default: 256
MinErrorToSend = 0.001;// Minimal error to send updates across network. Using a smaller value can make units observed by binoculars or sniper rifle to move smoother. Default: 0.001
MinErrorToSendNear = 0.01;// Minimal error to send updates across network for near units. Using larger value can reduce traffic sent for near units. Used to control client to server traffic as well. Default: 0.01
MaxCustomFileSize = 0;// (bytes) Users with custom face or custom sound larger than this size are kicked when trying to connect.
class sockets{
maxPacketSize = 1480;
initBandwidth = 6250000; // 50 mbit undocumented
MinBandwidth = 10485760;
MaxBandwidth = 104857600;
};
Hier gab es mehrere Punkte, die es zu lernen galt. Aber dafür müssen wir zuerst einen kleinen Abstecher Richtung Netzwerktechnik machen.
Die Default-MTU einer normalen Netzwerkverbindung ohne Konfigurationsänderung beträgt 1500 (bytes). Soll heißen, jedes Netzwerkpaket, welches diese Größe überschreitet wird durch den Router in kleinere Pakete aufgespalten. Bei TCP geht das über einen MSS-Fix, bei UDP wird das einfach hart gemacht, da die Pakete sowieso nicht garantiert in der Reihenfolge und/oder der Größe ankommen.
Nun ist es so, dass durch diverse Tunnel, die fast jede Consumer-Internetleitung hat die MTU reduziert werden muss. Das ursprüngliche Datenpaket wird in ein anderes Datenpaket eingebettet, wodurch die Daten von dem neuen größeren Paket trotzdem in die 1500er MTU passen müssen. Hier ein Beispiel der Telekom mit Hybrid (MTU von 1440).
Lustigerweise haben nicht alle Provider ein Problem damit. Normalerweise wird das Paket aufgespalten und der Client bekommt davon erst einmal nichts mit.
Hier gibt es aber Probleme bei Unitymedia (inzwischen Vodafone in West-Deutschland). Aus einem nicht erkennbaren Grund konnten Spieler dort sich nicht mehr verbinden.
Solltet ihr das Problem haben, dass einzelne Spieler zwar in die Slotliste kommen, dann aber beim Durchladen die Mission-File nicht herunterladen können. Schaut euch die MTU an.
Der Zweite Punkt:
In dieser Config wird pro Client mit einer Minimalen Bandbreite von 100mbit gerechnet. (Rechenweg: 1024*1024*100 = 104857600)
Puh. Das war ganz schön dumm konfiguriert. Es stellte sich heraus, dass ich von einem Test mit einem unserer Teammitglieder eine Dev-Config übernommen hatte und diese nicht wieder durch unsere ursprüngliche ersetzt hatte.
Hier ist die Konfirguration, mit der wir das nächste AN-Event durchführen wollen:
language="English";
adapter=-1;
3D_Performance=1.000000;
Resolution_W=800;
Resolution_H=600;
Resolution_Bpp=32;
terrainGrid=25;
viewDistance=2500;
MinBandwidth = 768000;
MaxBandwidth = 524288000;
MaxMsgSend = 640;
MinErrorToSend = 0.001;
MinErrorToSendNear = 0.01;
MaxCustomFileSize=0;
class sockets{
maxPacketSize = 1420;
initBandwidth = 1250000; // 10 mbit
MinBandwidth = 65536;
MaxBandwidth = 10485760;
};
Hier ist die Konfiguration des AW-Teams für eines ihrer Events:
MinBandwidth=107374182;
MaxBandwidth=1073741824;
MaxMsgSend=384;
MaxSizeGuaranteed=512;
MaxSizeNonguaranteed=256;
MinErrorToSendNear=0.022;
MinErrorToSend=0.004;
MaxCustomFileSize=0;
adapter=-1;
3D_Performance=1;
Resolution_W=0;
Resolution_H=0;
Resolution_Bpp=32;
Windowed=0;
serverLongitude=9;
serverLatitude=50;
serverLongitudeAuto=9;
Im Nachhinein ist man immer schlauer. Das Event hat 94 Spielern den Abend versaut - und das vermutlich durch effektiv zwei Konfigurationszeilen. Nun im Nachhinein so sehr die Hose hier herunter zu lassen ist sehr demütigend. Aber uns ist wichtig, dass andere aus unseren Fehlern lernen können. Wir möchten alle Events mit vielen Spielern spielen, das funktioniert aber nur mit Wissensaustausch. Lasst uns gemeinsam ein wenig näher zusammenrücken und uns gegenseitig helfen. Wir alle können einen Teil dazu beitragen dass die Missionen bei allen Spielern besser laufen.
Unsere Lessions learned:
1. Änderungen an der Basic.cfg immer Dokumentieren. Warum hat man eigentlich eine bestimmte Änderung vorgenommen?
2. Missionstests können nicht alle Fehler aufdecken. Bis 60 Spielern lief alles mit dieser Konfiguration ohne nennenswerte Probleme.
3. Uns fehlt noch ganz viel Wissen über bestimmte Teilbereiche von der Engine.
4. BENUTZT NIEMALS EINE DEVELOPMENT CONFIG FÜR EIN EVENT.
Ich habe einen Channel in unserem Arma Nacht Discord eröffnet, in dem es um die Serveradministration von Arma Servern geht. Lasst uns dort einen Austausch schaffen und uns gegenseitig weiter voran bringen.
Discord:
² Hier einmal die Linkliste, der Dinge die man groß öffentlich zu dem Thema findet:
https://forums.bohemia.net/for…=comments#comment-2355045
https://www.reddit.com/r/armad…p/understanding_basiccfg/
https://gist.github.com/vetera…262df808780fbcd4aeda0c03a (siehe auch den kommentar von https://armaworld.de/index.php?user/1663-dedmen/)