Tuning of OpenSim.ini
Here are some settings as they can be set in addition to the necessary region settings. This whole page contains optional settings only.
The async_call_method sets the method that OpenSim will use to fire asynchronous events. “SmartThreadPool” is reported to work well on Mono/Linux, but “QueueUserWorkItem” has been benchmarked with better performance on .NET/Windows. Default is “SmartThreadPool”.
; async_call_method = "SmartThreadPool"
If OpenSim runs on a powerful computer, the maximum number of threads can be increased. On old Mono versions the count eventually must be reduced. Defaults: MinPoolThreads = 2, MaxPoolThreads = 300.
MinPoolThreads = 32
; MaxPoolThreads = 300
Allow the simulator to start up even if in Regions.ini is no region configuration or the file is missing. If set to “false” (default) the OpenSim console on startup asks questions to create a Regions.ini with configuration for one first region. Setting it to “true” may help debugging serious startup problems.
; allow_regionless = false
If a telehub is defined in Region Details, avatars will always be teleported there, no matter which coordinates they use in the map. The following parameter allows avatars to alternatively teleport to landmarks from their inventory, thus avoiding the telehub. Default is “false”.
TelehubAllowLandmark = true
When a region crashed, it is recommended to not only restart that region, but the whole OpenSim application. This increases reliability, because sometimes the other regions of the same instance of OpenSim are affected by the crash. Default is “false”.
[Startup] InworldRestartShutsDown = true
This parameter is only necessary in case of failure! Some mono versions can’t cope with the cache for Sculpt Map collisions. This feature can be turned off, but this is paid for with additional requests to the asset server of the grid. In order to reduce stress on the asset server, set this to “false” only for testing purposes and then install another mono version. Default is “true”.
; CacheSculptMaps = true
If GenerateMaptiles is “true”, then maptiles are generated using the MapImageModule selected below. If “false”, then the texture referenced by MaptileStaticUUID is used instead. Details follow below, default is “true”.
; GenerateMaptiles = true
The module to use in order to generate map images, “MapImageModule” is the default. “Warp3DImageModule” is an alternative experimental module that actually generates the best images, but has a memory leak. Therefore do not use Warp3DImageModule together with MaptileRefresh!
; MapImageModule = "MapImageModule"
If desired, a running region can update the map tiles periodically to reflect building activity. This makes sense only if you have prims or other mesh on maptiles. Value is in seconds, default is zero meaning never.
[Map] ; MaptileRefresh = 0
Draw objects on maptile. This step might take a long time if you’ve got a large number of objects, so you can turn it off here if you’d like. Default is “true”.
; DrawPrimOnMapTile = true
Texture the faces of the prims that are rendered on the map tiles. Default is “true”, this is only relevant if DrawPrimOnMapTile is true.
; TexturePrims = true
Only texture prims that have a diagonal size greater than this number, default is 48 meter or pixel. Prims under this limit are shown in the median surface colour. This is only relevant if DrawPrimOnMapTile and TexturePrims are true.
; TexturePrimSize = 48
Relevant for Warp3DImageModule only: Experimental attempt to render meshes and sculpties on the map which makes the image even more beautiful. Default is “false”.
[Map] ; RenderMeshes = false
Instead of generating images from the region data, there are two alternatives. First you can use static maptiles uploaded as texture images to the grid. The edge length in pixel must correspond to the region size in meter. This may be overridden on a per region basis in Regions.ini, which would be the better method in case of more than one region on the server. If you choose this first alternative, green dots for avatars and other runtime map symbols are added to the map image. The second alternative would be to load an image directly from a directory on the region server (not uploaded to the grid). That method is not decribed here because would lack the generation of runtime map symbols.
[Map] ; MapImageModule = "MapImageModule" ; MaptileRefresh = 0 GenerateMaptiles = false ; MaptileStaticUUID = "00000000-0000-0000-0000-000000000000"
Permission modules to use, separated by comma. Possible selections actually are “DefaultPermissionsModule” or “DefaultPermissionsModule,PrimLimitsModule”. The first variant is the default. The second variant with two modules is explained at the bottom of this page.
; permissionmodules = "DefaultPermissionsModule"
This allows grid users with a UserLevel of 200 or more (“grid admins”) to assume god powers in the regions in this simulator. OpenSim default is “false”, but in the OpenSimDefaults.ini it is overwritten with “true”.
Policy of OSGrid: If you don’t trust grid admins, what are you doing there? => OSGrid default in OpenSim.ini is “true”.
[Permissions] allow_grid_gods = true
Set region_manager_is_god to “true” if region managers shall assume god powers in regions they manage. OpenSim default is “false”.
[Permissions] region_manager_is_god = true
The time to wait before disconecting an unresponsive client. The time is in seconds, default is 60 (one minute).
AckTimeout = 600
Quash and remove any light properties from attachments not on the hands. This allows flashlights and lanterns to function, but kills silly vanity “Facelights” dead. Sorry, head mounted miner’s lamps will also be affected. This is especially important in artistic builds that depend on lights on the build for their appearance, since facelights will cause the building’s lights to possibly not be rendered. Default is “false”.
[ClientStack.LindenUDP] ; DisableFacelights = false
Maximum outbound bytes per second for a single scene. This can be used to throttle total outbound UDP traffic for a home simulator with low bandwidth. The default value is 0, meaning no throttling at the scene level. Example for 20 megabits is 2500000. Most OpenSim traffic is TCP though.
; scene_throttle_max_bps = 0
Maximum bytes per second to send to any single client. This will override the user’s viewer preference settings to distribute the UDP traffic fairer between the avatars present on home simulators. The default value is 0, meaning no aggregate throttling on clients (only per-category throttling). Example for 1.5 megabits is 187500. Most OpenSim traffic is TCP though.
; client_throttle_max_bps = 0
Distance in meters that whisper, say and shout should travel. Defaults are 10 meters (whisper), 20 meters (say) and 100 meters (shout). On theater regions for example enlarging these values could be useful.
; whisper_distance = 10
; say_distance = 20
; shout_distance = 100
Control whether group messages are forwarded to offline users, default is “true”. On high traffic regions one may set this to “false” to reduce data load.
; ForwardOfflineGroupMessages = true
BulletSim can run on its own thread independent of the simulator’s heartbeat thread. Enabling this will not let the physics engine slow down avatar movement, etc. Default is “false”.
UseSeparatePhysicsThread = true
Enables the wind module, default is “true”.
[Wind] ; enabled = true
There are two wind plugins to choose between, “SimpleRandomWind” (default) and “ConfigurableWind”.
[Wind] ; wind_plugin = "SimpleRandomWind"
If you have chosen “SimpleRandomWind” above, you can set the strength only. Default is 1.0 and 0.0 would be no wind. (For ConfigurableWind see avg_strength instead.)
; strength = 1.0
The following settings are specific only to the “ConfigurableWind” plugin. Defaults: avg_strength = 5.0, avg_direction = 0.0, var_strength = 5.0, var_direction = 30.0, rate_change = 1.0. You can play around with the values which is fun with scripted sailing boats for example.
[Wind] ; avg_strength = 5.0 ; avg_direction = 0.0 ; var_strength = 5.0 ; var_direction = 30.0 ; rate_change = 1.0
If a region has severe problems with running scripts, disable both physics engines by setting “false” may be an emergency exit. In regular operation, exactly one physics engine must be activated. Default is YEngine, but Mareta has no experience with it. For this reason, only tuning tips for the XEngine can be shared here.
[YEngine] Enabled = false [XEngine] Enabled = true
How many threads to start at maximum load. Default is 100.
[XEngine] MaxThreads = 150
Time a thread must be idle (in seconds) before it dies. Default is 60. Scaling up may be useful if scripts are intentionally sleeping for long time.
[XEngine] ; IdleTimeout = 60
Thread priority (“Lowest”, “BelowNormal”, “Normal”, “AboveNormal”, “Highest”). Default is “BelowNormal”.
[XEngine] Priority = "Lowest"
Maximum number of events to queue for a script (excluding timers). Default is 300.
MaxScriptEventQueue = 100
Stack size per script engine thread in bytes. If you are experiencing StackOverflowExceptions you may want to increase this (e.g. double it). The trade-off may be increased memory usage by the script engine. Default is 262144.
; ThreadStackSize = 262144
Set AppDomainLoading to “true” to load each script into a separate AppDomain. At this time some mono versions seem to have problems with the “true” option, so default is now “false” until a fix is found. Setting this to “false” will load all script assemblies into the current AppDomain, which will significantly improve script loading times and 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 out of memory problem over time when avatars with scripted attachments move in and out of the region but should only be a issue if regions stay alive for a long time with lots of scripts added or edited.
; AppDomainLoading = false
Controls whether previously compiled script DLLs are deleted on sim restart. If you set this to “false”, then startup will be considerably faster since scripts won’t need to be recompiled. However, then it becomes your responsibility to delete the compiled scripts if you don’t replace the whole ../bin directory structure with each OpenSim update. Default is “true”.
DeleteScriptsOnStartup = false
Time a script can spend in an event handler before it is interrupted. Default is 30 seconds.
EventLimit = 90
If a script overruns it’s event limit, kill the script? Default is “false” but this will block memory with eventually many useless script instances.
KillTimedOutScripts = true
The factor the normally 10 meter distance limit is multiplied by for scripts communicating between different prims, factor 1.0 is the default. Increasing this may be useful to send messages within larger link sets.
; ScriptDistanceLimitFactor = 1.0
Maximal distance at which a VivoxVoice channel is silent. Values between 0 and 160 are allowed, default is 80.
; vivox_channel_max_range = 80
Distance before attenuation of a VivoxVoice channel applies. Values between 0 and 160 are allowed, default is 10.
; vivox_channel_clamping_distance = 10
Only message cached online users rather than all users, should make large groups with few online members messaging faster. Default is “false”, but OSGrid has set it to “true” in their example configuration.
MessageOnlineUsersOnly = true
If NoNPCGroup is “true”, NPCs will have no group title. If “false” for easy identification “- NPC -” is diplayed as group title. Default is “true”.
; NoNPCGroup = true
Allow to create NPCs by cloning any avatar in region, default is “true”. If for special reasons you allow NPC creation for normal residents or visitors (in osslEnable.ini), there is chance of misuse. You may set it to “false” in this case.
; AllowCloneOtherAvatars = true
With the default setting “pinhead-island” a new created region pops up with that silly circle island and many spikes in the water. Setting it to “flat” to get flat land on new regions.
InitialTerrain = "flat"
Finally here is shown a set of 3 settings to set prim limits analogue to Second Life. For this select additional the PrimLimitsModule and activate two limits. The section [PrimLimitsModule] does not exist in the sample file, so it must be added completely.
In the [Startup] section you can find several prim limits, here “NonphysicalPrimMax” is shown as example. Defaults of ClampPrimSize and EnforcePrimLimits are “false” meaning switched off.
Attention! If there are already objects built on the region, then check beforehand that all Prims meet the new limits! Existing Prims will be automatically resized if they don’t fit the constraints. If the maximum number of Prims on a region is exceeded, randomly selected objects are removed and sent to the owner’s inventory.
[Startup] ; NonphysicalPrimMax = 64 ClampPrimSize = true [Permissions] permissionmodules = "DefaultPermissionsModule,PrimLimitsModule" [PrimLimitsModule] EnforcePrimLimits = true
Continued: Configure OSSL function access