diff --git a/OpenSim/Region/ScriptEngine/YEngine/XMREngine.cs b/OpenSim/Region/ScriptEngine/YEngine/XMREngine.cs index d2b4ebd7b6..5dcaa8fc39 100644 --- a/OpenSim/Region/ScriptEngine/YEngine/XMREngine.cs +++ b/OpenSim/Region/ScriptEngine/YEngine/XMREngine.cs @@ -207,8 +207,8 @@ namespace OpenSim.Region.ScriptEngine.Yengine if(!m_Enabled) return; - numThreadScriptWorkers = m_Config.GetInt("NumThreadScriptWorkers", 1); - + numThreadScriptWorkers = m_Config.GetInt("NumThreadScriptWorkers", 2); + string priority = m_Config.GetString("Priority", "Normal"); m_TraceCalls = m_Config.GetBoolean("TraceCalls", false); m_Verbose = m_Config.GetBoolean("Verbose", false); m_ScriptDebug = m_Config.GetBoolean("ScriptDebug", false); @@ -250,9 +250,31 @@ namespace OpenSim.Region.ScriptEngine.Yengine return; } + ThreadPriority workersPrio = ThreadPriority.Normal; + switch (priority) + { + case "Lowest": + workersPrio = ThreadPriority.Lowest; + break; + case "BelowNormal": + workersPrio = ThreadPriority.BelowNormal; + break; + case "Normal": + workersPrio = ThreadPriority.Normal; + break; + case "AboveNormal": + workersPrio = ThreadPriority.AboveNormal; + break; + case "Highest": + workersPrio = ThreadPriority.Highest; + break; + default: + m_log.ErrorFormat("[YEngine] Invalid thread priority: '{0}'. Assuming Normal", priority); + break; + } m_SleepThread = StartMyThread(RunSleepThread, "Yengine sleep", ThreadPriority.Normal); for(int i = 0; i < numThreadScriptWorkers; i++) - StartThreadWorker(i); + StartThreadWorker(i, workersPrio); m_log.InfoFormat("[YEngine]: Enabled, {0}.{1} Meg (0x{2}) stacks", (m_StackSize >> 20).ToString(), diff --git a/OpenSim/Region/ScriptEngine/YEngine/XMRScriptThread.cs b/OpenSim/Region/ScriptEngine/YEngine/XMRScriptThread.cs index f68fd51cd1..c71eb81648 100644 --- a/OpenSim/Region/ScriptEngine/YEngine/XMRScriptThread.cs +++ b/OpenSim/Region/ScriptEngine/YEngine/XMRScriptThread.cs @@ -56,13 +56,13 @@ namespace OpenSim.Region.ScriptEngine.Yengine } } - public void StartThreadWorker(int i) + public void StartThreadWorker(int i, ThreadPriority priority) { Thread thd; if(i >= 0) - thd = Yengine.StartMyThread(RunScriptThread, "YScript" + i.ToString(), ThreadPriority.BelowNormal); + thd = Yengine.StartMyThread(RunScriptThread, "YScript" + i.ToString(), priority); else - thd = Yengine.StartMyThread(RunScriptThread, "YScript", ThreadPriority.BelowNormal); + thd = Yengine.StartMyThread(RunScriptThread, "YScript", priority); lock(m_WakeUpLock) m_RunningInstances.Add(thd.ManagedThreadId, null); } diff --git a/bin/OpenSim.ini.example b/bin/OpenSim.ini.example index 33b2819914..04a4f7d551 100644 --- a/bin/OpenSim.ini.example +++ b/bin/OpenSim.ini.example @@ -933,17 +933,12 @@ ; PriceGroupCreate = 0 [YEngine] - ;; experimental engine ;; implements non preemptive microthreading, so fixing problems like llSleep or long events handlers ;; but those will suffer from timeslicing, so will be slower. ;; warning: scripts state is lost on TP or cross to Xengine regions (cars stop, etc) ;; ignore its extensions (subset of original XMRengine), those are still undefined. - Enabled = false - ScriptStackSize = 256 - ScriptHeapSize = 256 - UseSourceHashCode = true - MinTimerInterval = 0.1 - ;ScriptBasePath="ScriptEngines" + ; Enabled = false + [XEngine] ;# {Enabled} {} {Enable the XEngine scripting engine?} {true false} true diff --git a/bin/OpenSimDefaults.ini b/bin/OpenSimDefaults.ini index d5a13cfa5b..5d9911015e 100644 --- a/bin/OpenSimDefaults.ini +++ b/bin/OpenSimDefaults.ini @@ -1750,6 +1750,33 @@ ; MeshModelAllowTextureToInventory = true +[YEngine] + ;; implements non preemptive microthreading, so fixing problems like llSleep or long events handlers + ;; but those will suffer from timeslicing, so will be slower. + ;; warning: scripts state is lost on TP or cross to Xengine regions (cars stop, etc) + ;; ignore its extensions (subset of original XMRengine), those are still undefined. + ;Enabled = false + + ; maximum stack a script can use in KB + ;ScriptStackSize = 2048 + + ; maximum heap memory a script can use in KB + ;ScriptHeapSize = 1024 + + ; number of threads to execute script. Too many threads can have negative impact on other region operations + ;NumThreadScriptWorkers = 2 + + ; Priority of those threads (Lowest, BelowNormal, Normal, AboveNormal or Highest). Higher priorit can have negative impact on other region operations + ;Priority = Normal + + ; to reuse binary compare sources using a hash codes of them or full text + UseSourceHashCode = true + + MinTimerInterval = 0.1 + + ; scripts states and cache parent folder location + ;ScriptBasePath="ScriptEngines" + [XEngine] ; Enable this engine in this OpenSim instance