Tuning der OpenSim.ini

Hier sind einige Einstellungen, die zusätzlich zu den erforderlichen Regionseinstellungen vorgenommen werden können. Diese ganze Seite enthält nur optionale Einstellungen.

async_call_method legt die Methode fest, die OpenSim verwendet, um asynchrone Ereignisse auszulösen. „SmartThreadPool“ soll unter Mono/Linux gut funktionieren, mit „UnsafeQueueUserWorkItem“ wurde jedoch eine bessere Leistung unter .NET/Windows gemessen. Standard ist „SmartThreadPool“.

[Startup]
; async_call_method = "SmartThreadPool"

Wenn OpenSim auf einem leistungsstarken Computer ausgeführt wird, kann die maximale Anzahl von Threads erhöht werden. Bei alten Mono-Versionen muss die Anzahl eventuell reduziert werden. Standardeinstellungen: MinPoolThreads = 2, MaxPoolThreads = 300.

[Startup]
MinPoolThreads = 32
; MaxPoolThreads = 300

Erlaube den Simulator auch dann zu starten, wenn in Regions.ini keine Regionskonfiguration vorhanden ist oder die Datei fehlt. Bei der Einstellung „false“ (Standardeinstellung) stellt die OpenSim-Konsole beim Start Fragen, um eine Regions.ini mit der Konfiguration für eine erste Region zu erstellen. Dies auf „true“ zu setzen kann beim Debuggen schwerwiegender Startprobleme hilfreich sein.

[Startup]
; allow_regionless = false

Wenn ein Telehub in Region/Grundbesitz definiert ist, werden Avatare immer dorthin teleportiert, unabhängig davon, welche Koordinaten sie auf der Karte verwenden. Der folgende Parameter ermöglicht es Avataren, sich alternativ zu Landmarken aus ihrem Inventar zu teleportieren und so den Telehub zu umgehen. Standard ist „false“.

[Startup]
TelehubAllowLandmark = true

Wenn eine Region abgestürzt ist, wird empfohlen, nicht nur diese Region, sondern die gesamte OpenSim-Anwendung neu zu starten. Dies erhöht die Zuverlässigkeit, da manchmal auch die anderen Regionen derselben Instanz von OpenSim vom Absturz betroffen sind. Standard ist „false“.

[Startup]
  InworldRestartShutsDown = true

Dieser Parameter ist nur im Fehlerfall erforderlich! Einige Mono-Versionen können mit dem Cache für Sculpt-Map-Kollisionen nicht umgehen. Diese Funktion kann deaktiviert werden, das wird jedoch mit zusätzlichen Anfragen an den Asset-Server des Grids bezahlt. Um die Belastung des Asset-Servers zu verringern, setze dies nur zu Testzwecken auf „false“ und installiere dann eine andere Mono-Version. Standard ist „true“.

[Startup]
; CacheSculptMaps = true

Wenn GenerateMaptiles „true“ ist, werden Maptiles mit dem unten ausgewählten MapImageModule generiert. Bei „false“ wird stattdessen die von MaptileStaticUUID referenzierte Textur verwendet. Details folgen unten, Standard ist „true“.

[Map]
; GenerateMaptiles = true

Zum Generieren von Kartenbildern wird als Standard das Modul „MapImageModule“ verwendet. „Warp3DImageModule“ ist ein alternatives experimentelles Modul, das zwar die besten Bilder generiert, aber ein Memory-Leak hat. Verwende Warp3DImageModule daher nicht zusammen mit MaptileRefresh!

[Map]
; MapImageModule = "MapImageModule"

Falls gewünscht, kann eine laufende Region die Maptiles regelmäßig aktualisieren, um die Bauaktivitäten widerzuspiegeln. Dies ist nur dann sinnvoll, wenn ihr Prims oder andere Meshes auf den Maptiles habt. Der Wert wird in Sekunden angegeben, der Standardwert ist 0, was „niemals“ bedeutet.

[Map]
  ; MaptileRefresh = 0

Zeichne Objekte auf der Maptile. Dieser Schritt kann bei einer großen Zahl von Objekten sehr lange dauern. Ihr könnt ihn daher deaktivieren, falls gewünscht. Standard ist „true“.

[Map]
; DrawPrimOnMapTile = true

Texturiere die Oberflächen der Prims, die auf den Maptiles gerendert werden. Die Standardeinstellung ist „true“. Dies ist nur relevant, wenn DrawPrimOnMapTile true ist.

[Map]
; TexturePrims = true

Texturiere nur Prims, deren Diagonale größer als diese Zahl ist. Die Standardeinstellung ist 48 Meter oder Pixel. Prims unter diesem Grenzwert werden in der mittleren Oberflächenfarbe angezeigt. Dies ist nur relevant, wenn DrawPrimOnMapTile und TexturePrims true sind.

[Map]
; TexturePrimSize = 48

Nur für Warp3DImageModule relevant: Experimenteller Versuch, Meshes und Sculpties auf der Maptile zu rendern, um das Bild noch schöner zu machen. Standard ist „false“.

[Map]
  ; RenderMeshes = false

Anstatt Bilder aus den Regionsdaten zu generieren, gibt es zwei Alternativen. Zunächst könnt ihr statische Maptiles verwenden, die als Texturbilder in das Grid hochgeladen wurden. Die Kantenlänge in Pixel muss der Regionsgröße in Meter entsprechen. Dies kann für einzelne Regionen in der Regions.ini überschrieben werden, was die bessere Methode ist, wenn der Server mehr als eine Region hat. Wenn ihr diese erste Alternative wählt, werden grüne Punkte für Avatare und andere Laufzeitsymbole dem Kartenbild hinzugefügt. Die zweite Alternative wäre, ein Bild direkt aus einem Verzeichnis auf dem Regionenserver zu laden (nicht in das Grid hochgeladen). Diese Methode wird hier nicht beschrieben, weil dann die Laufzeitsymbole auf der Karte fehlen würden.

[Map]
  ; MapImageModule = "MapImageModule"
  ; MaptileRefresh = 0
  GenerateMaptiles = false
  ; MaptileStaticUUID = "00000000-0000-0000-0000-000000000000"

Zu verwendende Berechtigungsmodule, durch Komma getrennt. Zur Auswahl stehen „DefaultPermissionsModule“ oder „DefaultPermissionsModule,PrimLimitsModule“. Die erste Variante ist die Standardeinstellung. Die zweite Variante mit zwei Modulen wird am Ende dieser Seite erklärt.

[Permissions]
; permissionmodules = "DefaultPermissionsModule"

Hiermit können Grid-Benutzer mit einem UserLevel von 200 oder mehr („Grid-Admins“) auf den Regionen dieses Simulators Allmacht erlangen. Der OpenSim-Standardwert ist „false“, aber in der OpenSimDefaults.ini wird er mit „true“ überschrieben.
Richtlinie von OSGrid: Wenn ihr den Grid-Administratoren nicht vertraut, was tut ihr dort? => OSGrid Standard in OpenSim.ini ist „true“.

[Permissions]
  allow_grid_gods = true

Setze region_manager_is_god auf „true“, wenn Region-Manager auf Regionen, die sie verwalten, Allmacht erlangen sollen. Die OpenSim-Standardeinstellung ist „false“.

[Permissions]
  region_manager_is_god = true

Die Wartezeit in Sekunden, bevor ein nicht reagierender Client getrennt wird, die Standardeinstellung ist 60 (eine Minute).

[ClientStack.LindenUDP]
AckTimeout = 600

Entferne alle Lichter von Attachments, die sich nicht an den Händen befinden. Dies ermöglicht funktionierende Taschenlampen und Laternen, aber unterdrückt alberne „Facelights“. Leider sind auch am Kopf montierte Minenlampen betroffen. Dies ist besonders wichtig bei künstlerischen Bauten, deren Erscheinungsbild von der Beleuchtung der Objekte abhängt, und wo Facelights die Beleuchtung stören würden. Standard ist „false“.

[ClientStack.LindenUDP]
  ; DisableFacelights = false

Maximal ausgehende Bytes pro Sekunde für eine einzelne Szene. Dies kann verwendet werden, um den gesamten ausgehenden UDP-Traffic für einen Heimsimulator mit geringer Bandbreite zu drosseln. Der Standardwert ist 0, was bedeutet, dass auf Szenenebene keine Drosselung erfolgt. Beispiel für 20 Megabits ist 2500000. Der meiste OpenSim-Traffic ist jedoch TCP.

[ClientStack.LindenUDP]
; scene_throttle_max_bps = 0

Maximale Bytes pro Sekunde, die an einen einzelnen Client gesendet werden können. Dadurch werden die Benutzereinstellungen im Viewer außer Kraft gesetzt, um den UDP-Traffic gerechter auf die Avatare auf Regionen von Heimsimulatoren zu verteilen. Der Standardwert ist 0, was bedeutet, dass auf Clients keine Gesamtdrosselung erfolgt (nur Drosselung nach Kategorie). Beispiel für 1,5 Megabits ist 187500. Der meiste OpenSim-Traffic ist jedoch TCP.

[ClientStack.LindenUDP]
; client_throttle_max_bps = 0

Entfernung in Metern, die geflüstert, gesagt und geschrien werden soll. Die Standardeinstellungen sind 10 Meter (flüstern), 20 Meter (sagen) und 100 Meter (schreien). In Theaterregionen beispielsweise kann es nützlich sein, diese Werte zu erhöhen.

[Chat]
; whisper_distance = 10
; say_distance = 20
; shout_distance = 100

ForwardOfflineGroupMessages steuert, ob Gruppennachrichten an Offline-Benutzer weitergeleitet werden. Die Standardeinstellung lautet „true“. In stark frequentierten Regionen kann dies auf „false“ gesetzt werden, um die Datenlast zu verringern.

[Messaging]
; ForwardOfflineGroupMessages = true

BulletSim kann unabhängig vom Heartbeat-Thread des Simulators auf einem eigenen Thread ausgeführt werden. Wenn ihr dies aktiviert, verlangsamt die Physik-Engine nicht die Bewegung des Avatars usw. Die Standardeinstellung ist „false“.

[BulletSim]
UseSeparatePhysicsThread = true

Anzahl der Stunden * 2 für einen OpenSim Tag, 12.0 würde Echtzeit bedeuten. Die Standardeinstellung ist 4. (Der Faktor 2 scheint ein Fehler zu sein, Feedback eines anderen Testers wäre sehr willkommen.)

[Sun]
  day_length = 12

Aktiviert das Windmodul, Standard ist „true“.

[Wind]
  ; enabled = true

Es stehen zwei Wind-Plugins zur Auswahl, „SimpleRandomWind“ (Standard) und „ConfigurableWind“.

[Wind]
  ; wind_plugin = "SimpleRandomWind"

Wenn ihr oben „SimpleRandomWind“ gewählt habt, könnt ihr nur die Stärke einstellen. Standard ist 1.0 und 0.0 wäre kein Wind. (Für ConfigurableWind siehe stattdessen avg_strength.)

[Wind]
; strength = 1.0

Die folgenden Einstellungen gelten nur für das Plugin „ConfigurableWind“. Standardwerte: avg_strength = 5.0, avg_direction = 0.0, var_strength = 5.0, var_direction = 30.0, rate_change = 1.0. Ihr könnt mit den Werten herumspielen, was zum Beispiel mit skriptbasierten Segelbooten Spaß macht.

[Wind]
  ; avg_strength = 5.0
  ; avg_direction = 0.0
  ; var_strength = 5.0
  ; var_direction = 30.0
  ; rate_change = 1.0

Wenn eine Region schwerwiegende Probleme mit der Ausführung von Skripten hat, deaktiviert „false“ hier die gesamte Physik-Engine. Dies kann eine Nothilfe sein, Standard ist natürlich „true“.

[XEngine]
  ; Enabled = true

Wie viele Threads sollen bei maximaler Last starten? Die Standardeinstellung ist 100.

[XEngine]
  MaxThreads = 150

Zeit, die ein Thread im Leerlauf sein darf (in Sekunden), bevor er stirbt. Die Standardeinstellung ist 60. Eine Vergrößerung kann hilfreich sein, wenn Skripte absichtlich längere Zeit schlafen.

[XEngine]
  ; IdleTimeout = 60

Thread-Priorität („Lowest“, „BelowNormal“, „Normal“, „AboveNormal“, „Highest“). Standard ist „BelowNormal“.

[XEngine]
  Priority = "Lowest"

Maximale Anzahl von Ereignissen in der Warteschlange eines Scripts (ohne Timer). Die Standardeinstellung ist 300.

[XEngine]
MaxScriptEventQueue = 100

Stack-Größe pro Skript-Engine-Thread in Byte. Wenn StackOverflowExceptions auftreten, möchtet ihr diese möglicherweise erhöhen (z. B. verdoppeln). Nachteilig kann der höhere Speicherverbrauch durch das Skript-Modul sein. Die Standardeinstellung ist 262144.

[XEngine]
; ThreadStackSize = 262144

AppDomainLoading auf „true“ lädt jedes Skript in eine separate AppDomain. Derzeit scheinen einige Mono-Versionen Probleme mit der Option „true“ zu haben. Daher ist die Standardeinstellung derzeit „false“, bis ein Fix gefunden wird. Wenn ihr diesen Wert auf „false“ setzt, werden alle Skriptassemblys in die aktuelle AppDomain geladen. Dadurch werden die Skriptladezeiten erheblich verkürzt und der Speicherverbrauch pro Skript verringert. Wenn ihr diesen Wert auf false setzt, wird jedoch auch verhindert, dass Skript-DLLs aus dem Speicher entladen werden, wenn das Skript gelöscht wird. Dies kann im Laufe der Zeit zu Speichermangel führen, wenn Avatare mit skriptbasierten Anhängen in die Region teleportieren. Es sollte jedoch nur dann zum Problem werden, wenn Regionen lange nicht neu gestartet werden und viele Skripte hinzugefügt oder bearbeitet wurden.

[XEngine]
; AppDomainLoading = false

Steuert, ob zuvor kompilierte Skript-DLLs beim Neustart der Sim gelöscht werden. Wenn ihr diesen Wert auf „false“ setzt, wird der Start erheblich beschleunigt, weil Skripte nicht neu kompiliert werden müssen. Es liegt dann jedoch in eurer Verantwortung, die kompilierten Skripte zu löschen, wenn ihr nicht eh bei jedem OpenSim-Update die gesamte Verzeichnisstruktur ../bin ersetzt. Standard ist „true“.

[XEngine]
DeleteScriptsOnStartup = false

Zeit, die ein Skript in einem Eventhandler verbringen kann, bevor es unterbrochen wird. Die Standardeinstellung ist 30 Sekunden.

[XEngine]
EventLimit = 90

Soll das Script abgebrochen werden, wenn es sein Eventlimit überschreitet? Der Standardwert ist „false“, dies blockiert jedoch den Speicher mit möglicherweise vielen nutzlosen Skriptinstanzen.

[XEngine]
KillTimedOutScripts = true

Der Faktor, mit dem die standardmäßige 10-Meter-Distanz multipliziert wird, über die Scripte zwischen verschiedenen Prims kommunizieren können. Das Erhöhen dieses Multiplikators kann nützlich sein, um Nachrichten innerhalb größerer Linkgruppen zu senden. Standard ist 1.0.

[XEngine]
; ScriptDistanceLimitFactor = 1.0

Maximale Entfernung, ab der ein VivoxVoice-Kanal stumm ist. Zulässig sind Werte zwischen 0 und 160, Standard ist 80.

[VivoxVoice]
; vivox_channel_max_range = 80

Entfernung, ab der die entfernungsabhängige Dämpfung eines VivoxVoice-Kanals startet. Zulässig sind Werte zwischen 0 und 160, Standard ist 10.

[VivoxVoice]
; vivox_channel_clamping_distance = 10

Schicke Gruppennachrichten nur an Online-Benutzer anstatt an alle Benutzer. Dadurch sollten große Gruppen mit wenigen Online-Mitgliedern schneller Nachrichten senden können. Der Standardwert ist „false“, aber das OSGrid hat ihn in ihrer Beispielkonfiguration auf „true“ gesetzt.

[Groups]
MessageOnlineUsersOnly = true

Wenn NoNPCGroup „true“ ist, haben NPCs keinen Gruppentitel. Bei „false“ wird zur einfachen Identifizierung „- NPC -“ als Gruppentitel angezeigt. Standard ist „true“.

[NPC]
; NoNPCGroup = true

Erlaubt durch Klonen eines Avatars auf einer Region NPCs zu erstellen. Die Standardeinstellung ist „true“. Wenn ihr aus besonderen Gründen die NPC-Erstellung für normale Einwohner oder Besucher (in osslEnable.ini) erlaubt, besteht die Möglichkeit diese Option zu missbrauchen. Ihr könnt sie in diesem Fall auf „false“ setzen.

[NPC]
; AllowCloneOtherAvatars = true

Mit der Standardeinstellung „pinhead-island“ erscheint eine neu erstellte Region mit dieser albernen Kreisinsel und vielen Stacheln im Wasser. Setzt dies auf „flat“, um in neuen Regionen flaches Land zu erhalten.

[Terrain]
InitialTerrain = "flat"

Schließlich wird hier eine Reihe von 3 Einstellungen gezeigt, mit denen Prim-Limits analog zu Second Life eingestellt werden können. Dafür wählt ihr zusätzlich das PrimLimitsModule und aktiviert zwei Limits. Der Abschnitt [PrimLimitsModule] ist in der Beispieldatei nicht vorhanden und muss daher vollständig hinzugefügt werden.

Im Abschnitt [Startup] findet ihr mehrere Prim-Limits, hier wird als Beispiel „NonphysicalPrimMax“ gezeigt. Die Standardwerte für ClampPrimSize und EnforcePrimLimits sind „false“ (deaktiviert).

Achtung! Wenn es in der Region bereits Objekte gibt, prüfe vorher, ob alle Prims die neuen Grenzwerte einhalten! Bestehende Prims werden automatisch in der Größe angepasst, wenn sie nicht den Vorgaben entsprechen. Falls die Maximalzahl von Prims auf einer Region überschritten ist, werden zufällig ausgewählte Objekte entfernt und ins Inventar des Besitzers geschickt.

[Startup]
  ; NonphysicalPrimMax = 64
  ClampPrimSize = true

[Permissions]
  permissionmodules = "DefaultPermissionsModule,PrimLimitsModule"

[PrimLimitsModule]
  EnforcePrimLimits = true

Weiter: Konfiguration der Berechtigungen für OSSL Funktionen

Nach oben