OpenSim 0.8/OpenSimIniTuning

Aus Hyperweb & OpenSim
Wechseln zu: Suche

Tuning der OpenSim.ini

Hier folgen einige Einstellungen, wie sie zusätzlich zu den notwendigen Regions-Einstellungen gesetzt werden können. In meiner Referenzversion der OpenSim.ini sind sie bereits berücksichtigt.

Wenn eine Region abstürzt, soll nicht nur die Region neu gestartet werden, sondern die ganze OpenSim-Applikation. Dies erhöht die Betriebssicherheit, weil manchmal auch die anderen Regionen der selben OpenSim-Instanz vom Crash in Mitleidenschaft gezogen werden.

[Startup]
  InworldRestartShutsDown = true

Wer administrativen Accounts des Gridbetreibers inworld alle Rechte auf seinem Land geben möchte, kann allow_grid_gods auf true setzen (Default ist false). Sollen Mieter auf dem Land nur die inworld vergebenen Rechte haben, muss parcel_owner_is_god auf false gesetzt werden. Außerdem wäre es möglich, dem region_owner die defaultmäßig vorhandenen Rechte wegzunehmen, oder einem region_manager die Rechte zu geben.

[Permissions]
  ; allow_grid_gods = false
  parcel_owner_is_god = false

Das Warp3DImageModule erzeugt derzeit die schönsten Landkarten-Oberflächen, belastet aber auch den Server stärker. Wird MaptileRefresh auf einen Wert größer Null gesetzt, dann wird alle X Sekunden (hier 3600) ein neues Kartenbild errechnet. Prims sollen auch auf der Karte angezeigt werden.

[Map]
  MapImageModule = "Warp3DImageModule"
  MaptileRefresh = 3600

Wenn ein Telehub auf dem Land ist, teleportieren Avatare immer dorthin, egal welche Koordinaten sie in der Map einstellen. Der folgende Parameter erlaubt Avataren aber, alternativ zu Landmarks aus ihrem Inventar zu teleportieren, und damit den Telehub zu umgehen.

[Startup]
  TelehubAllowLandmark = true

Dieser Parameter ist nur im Fehlerfall notwendig! Manche Mono-Versionen kommen mit dem Cache für Sculpt-Map-Kollisionen nicht klar. Der Cache kann ausgeschaltet werden, was aber zusätzliche Anfragen beim Assetserver des Grids verursacht. Setze den Wert deshalb nur zu Testzwecken auf "false", und installiere dann eine andere Mono-Version.

[Startup]
  ; CacheSculptMaps = true

Wenn OpenSim auf einem leistungsfähigen Rechner läuft, kann die Anzahl der maximalen Threads erhöht werden. Richtwerte: 15 bei einem Prozessorkern (Default), 30 bei zwei Kernen und 45 bei vier oder mehr Kernen. Das Minimum festzulegen soll die Mono-Performance erhöhen. Bei modernen Mono-Versionen ab 3.2 aufwärts sind erheblich größere Werte empfehlenswert, zum Beispiel MaxPoolThreads = 150 und MinPoolThreads = 48. Unter Windows mit .NET kann MaxPoolThreads = 300 oder mehr gewählt werden.

[Startup]
  MaxPoolThreads = 15
  MinPoolThreads = 10

Mit den folgenden Parametern können Datenraten limitiert werden. Default ist ohne Limit, und für Server in professionellen Rechenzentren ist das auch gut so. Wer aber seinen Server an einem privaten DSL-Anschluss betreibt, kann die verfügbare Bandbreite durch Experimentieren mit diesen Limits gerechter auf die anwesenden Avatare verteilen. (Details in der OpenSim.ini)

[ClientStack.LindenUDP]
  ; scene_throttle_max_bps = 2621440
  ; client_throttle_max_bps = 196608

Bugfix, nur mit der alten ODE wirksam: Der Defaultwert 80 für das Avatargewicht wird durch einen erheblich kleineren Wert überschrieben. Dies führt dazu, dass die Avatare beim Laufen und Stehen nicht mehr so tief im Boden einsinken.

[ODEPhysicsSettings]
  av_density = 3

Wer Tageslängen wie im realen Leben bevorzugt, kann das wie folgend anpassen:

[Sun]
  ;; Number of wall clock hours for an opensim day. 24.0 would mean realtime.
  day_length = 24

Segler und Piloten bevorzugen oft "ConfigurableWind" gegenüber zufälligem Wind:

[Wind]
  ;; The Default Wind Plugin to load
  wind_plugin = ConfigurableWind

  ;; These settings are specific to the ConfigurableWind plugin
  ;; To use ConfigurableWind as the default, simply change wind_plugin
  ;; to ConfigurableWind and uncomment the following.
  ; avg_strength = 5.0
  ; avg_direction = 0.0
  ; var_strength = 5.0
  ; var_direction = 30.0
  ; rate_change = 1.0

Windlight ist natürlich auch klasse! Mit enable_windlight und AllowLightShareFunctions können sich geeignete Viewer die Windlight-Einstellungen des Servers teilen, so dass alle Beteiligten das gleiche Wetter sehen.

[LightShare]
  enable_windlight = true
[XEngine]
  AllowLightShareFunctions = true

Hinweis: Ab OpenSim 0.8.2 (siehe nächsten Absatz) wird "AllowLightShareFunctions" in der Datei "osslEnable.ini" gesetzt. Technisch ist es egal, ob der Wert hier gesetzt wird oder dort, aber um mögliche Fehlerquellen zu vermeiden setze ihn nicht zweimal!

Die OpenSim Script Engine versteht neben den LSL Funktionen auch noch unzählige OSSL Funktionen. Die Konfiguration geschieht bis OpenSim 0.8.1 in der Sektion [XEngine] der OpenSim.ini Datei. Ab OpenSim 0.8.2 werden die OSSL Konfigurationen in eine separate Datei ausgelagert. Sofern in der OpenSim.ini nicht anders konfiguriert, findet ihr die Datei im Verzeichnis "config-include" mit dem Namen "osslEnable.ini". Wird keine Datei angegeben, und auch nicht nach der alten Methode in der Sektion [XEngine] von OpenSim.ini konfiguriert, dann bleibt OSSL abgeschaltet.

[OSSL]
  ;; Ab OpenSim 0.8.2
  Include-osslEnable = "config-include/osslEnable.ini"

In OpenSim-Versionen vor 0.8.1 ist für "Script Stop Strategy" der Defaultwert "abort". Inzwischen hat sich die Strategie "co-op" als besser etabliert, und ist nun der neue Defaultwert. Mit der folgenden Einstellung kann dies auch in älteren OpenSim Versionen nachgeholt werden.

[XEngine]
  ScriptStopStrategy = co-op

Die nächste Einstellung ist ziemlich diffizil. Ich lasse mal den Original-Kommentar stehen, selber empfand ich "false" als die bessere Variante.

[XEngine]
  ;; Set this to true (the default) to load each script into a separate
  ;; AppDomain.
  ;;
  ;; Setting this to false will load all script assemblies into the
  ;; current AppDomain, which will significantly improve script loading times.
  ;; It will also reduce initial per-script memory overhead.
  ;;
  ;; However, setting this to false will also prevent script DLLs from being
  ;; unloaded from memory if the script is deleted. This may cause an OutOfMemory
  ;; problem over time when avatars with scripted attachments move in and out of
  ;; the region.
  ;; Some Windows users have also reported script loading problems
  ;; when AppDomainLoading = false
  AppDomainLoading = false

Wenn Scripte wegen Lag instabil werden, hilft es manchmal, für "MaxThreads" und "EventLimit" die Werte zu erhöhen.

[XEngine]
  ;; How many threads to start at maximum load
  MaxThreads = 300

  ;# {EventLimit} {} {Amount of time a script can spend in an event handler} {} 30
  ;; Time a script can spend in an event handler before it is interrupted
  EventLimit = 90

Wird OpenSim nicht auf dem Server neu compiliert, sondern die gesamte ../bin Verzeichnisstruktur bei jedem Update komplett ausgetauscht, dann müssen die Scripte auf den Regionen nicht bei jedem Programmstart neu compiliert werden.

[XEngine]
  DeleteScriptsOnStartup = false

Dies ist sehr von den persönlichen Vorlieben abhängig. Mit der hier gewählten Option werden zuerst die Objekte gerezzt, die dem Avatar am nächsten sind. Oft wird auch der Defaultwert "BestAvatarResponsiveness" bevorzugt, mit weniger Lag aber eventuell schlechterer Sicht.

[InterestManagement]
  UpdatePrioritizationScheme = FrontBack

Hiermit werden die vieldiskutierten NPCs (Nichtspieler-Figuren) aktiviert. Es können Kopien von Avataren inclusive Kleidung erzeugt und als Puppen auf das Land gerezzt werden. Diese lassen sich dann mit Hilfe von Scripten animieren, um beispielsweise Rollenspielszenarien mit Statisten zu beleben.

[NPC]
  Enabled = true

Die folgenden Abschnitte sind experimentelle Settings, die die Performance verbessern sollen.

[ServiceThrottle]
  Interval = 4000
[Attachments]
  ThrottlePer100PrimsRezzed = 500
[BulletSim]
  UseSeparatePhysicsThread = true

Abschließend können Prim Limits analog zu Second Life eingestellt werden. Dazu wird das PrimLimitsModule ausgewählt, und zwei Limits verändert.

[Startup]
  NonphysicalPrimMax = 64
  ClampPrimSize = true
[Permissions]
  permissionmodules = DefaultPermissionsModule,PrimLimitsModule

Nun muss das eben konfigurierte Modul noch aktiviert werden. In der Original-Beispieldatei ist die folgende Sektion nicht enthalten, muss also dann noch komplett hineinkopiert werden:

[PrimLimitsModule]
  ;# {EnforcePrimLimits} {} {Enforce parcel prim limits} {true false} false
  ;; Enable parcel prim limits. Off by default to emulate pre-existing behavior.
  ;; Effective only if PrimLimitsModule is selected in [Startup] section.
  EnforcePrimLimits = true

Achtung! Wenn das Land bereits bebaut ist, vergewissere dich vorher, dass alle Prims die neuen Limits erfüllen! Vorhandene Prims werden ggf. automatisch verkleinert. (In meiner Referenzdatei ist EnforcePrimLimits deshalb noch auf "false" gesetzt.)



Weiter: Konfiguration der Berechtigungen für OSSL Funktionen