Diva Canto
52bb732692
Merge branch 'cpu-performance' of ssh://opensimulator.org/var/git/opensim into cpu-performance
2013-07-18 19:02:46 -07:00
Diva Canto
dc88ffc5b4
Delay the enqueueing of non-longpoll requests for 100ms. No need to have these requests actively on the processing queue if it seems they're not ready.
2013-07-18 17:17:20 -07:00
Justin Clark-Casey (justincc)
07420a3b4d
furhter shorten CheckAgentUpdateSignificance(). No real perf impact.
2013-07-19 01:00:38 +01:00
Justin Clark-Casey (justincc)
42e5856464
Remove some pointless code in CheckAgentUpdateSignificance()
2013-07-19 00:56:45 +01:00
Justin Clark-Casey (justincc)
3b8e7ff013
Make the check as to whether any particular inbound AgentUpdate packet is significant much earlier in UDP processing (i.e. before we pointlessly place such packets on internal queues, etc.)
...
Appears to have some impact on cpu but needs testing.
2013-07-19 00:51:13 +01:00
Justin Clark-Casey (justincc)
5c74f3ec9c
Add measure of number of inbound AgentUpdates that were seen as significant to "show client stats" (i.e. sent on for further processing instead of being discarded)
...
Added here since it was the most convenient place
Number is in the last column, "Sig. AgentUpdates" along with percentage of all AgentUpdates
Percentage largely falls over time, most cpu for processing AgentUpdates may be in UDP processing as turning this off even earlier (with "debug lludp toggle agentupdate" results in a big cpu fall
Also tidies up display.
2013-07-19 00:16:09 +01:00
Diva Canto
d1e9beead8
Revert "Now trying DoubleQueue instead of BlockingQueue for the PollServiceRequestManager."
...
This reverts commit 5f95f4d78e
.
2013-07-18 15:52:07 -07:00
Justin Clark-Casey (justincc)
35aa6c86fe
Hack in console command "debug lludp toggle agentupdate" to allow AgentUpdate in packets to be discarded at a very early stage.
...
Enabling this will stop anybody from moving on a sim, though all other updates should be unaffected.
Appears to make some cpu difference on very basic testing with a static standing avatar (though not all that much).
Need to see the results with much higher av numbers.
2013-07-18 23:05:45 +01:00
Justin Clark-Casey (justincc)
5cdc21aac7
minor: provide user feedback in the log for now when udp in/out bound threads are started/stopped
2013-07-18 22:54:10 +01:00
Justin Clark-Casey (justincc)
cbb47f8489
Merge branch 'cpu-performance' of ssh://opensimulator.org/var/git/opensim into cpu-performance
2013-07-18 22:43:15 +01:00
Justin Clark-Casey (justincc)
b2b29b7ec0
Fix up a temporary debugging change from last commit which stopped "lludp stop out" from actually doing anything
2013-07-18 22:42:25 +01:00
Diva Canto
27377194cd
Changed the timoeut of EQ 502s (no events) to 50 secs. The viewer post requests timeout in 60 secs.
...
There's plenty of room for improvement in handling the EQs. Some other time...
2013-07-18 13:48:56 -07:00
Justin Clark-Casey (justincc)
8c6761c152
Do some simple queue empty checks in the main outgoing udp loop instead of always performing these on a separate fired thread.
...
This appears to improve cpu usage since launching a new thread is more expensive than performing a small amount of inline logic.
However, needs testing at scale.
2013-07-18 21:28:36 +01:00
Diva Canto
553d9cc5d2
Applying the same fix here that dan lake applied to master -- unfortunately I can't cherry-pick because that commit has 2 parents...
2013-07-18 07:52:14 -07:00
Diva Canto
c685cc1799
Revert "This is a completely unreasonable thing to do, effectively defying the purpose of BlockingQueues. Trying this, to see the effect on CPU."
...
This reverts commit 5232ab0496
.
2013-07-17 20:42:38 -07:00
Justin Clark-Casey (justincc)
1ba5a05cf7
try Hacking in an AutoResetEvent to control the outgoing UDP loop instead of a continuous loop with sleeps.
...
Does appear to have a cpu impact but may need further tweaking
2013-07-18 01:17:46 +01:00
Justin Clark-Casey (justincc)
0af3b5ed9a
Revert "Put in temporary hack for performnace 'queue-empty' logic on a persistent thread rather than through fire and forget"
...
This reverts commit b402220dbb
.
Eliminating fire and forget here does not appear to make a significant difference.
2013-07-18 00:51:10 +01:00
Justin Clark-Casey (justincc)
a94a43d249
Revert "Properly remove the hack queue update thread when the voewr shuts down"
...
This reverts commit 7c544c0d4e
.
2013-07-18 00:50:16 +01:00
Justin Clark-Casey (justincc)
7c544c0d4e
Properly remove the hack queue update thread when the voewr shuts down
...
No functional change.
2013-07-18 00:39:28 +01:00
Justin Clark-Casey (justincc)
b402220dbb
Put in temporary hack for performnace 'queue-empty' logic on a persistent thread rather than through fire and forget
...
May not scale since this gives each client its own thread.
2013-07-18 00:30:22 +01:00
Diva Canto
5232ab0496
This is a completely unreasonable thing to do, effectively defying the purpose of BlockingQueues. Trying this, to see the effect on CPU.
2013-07-17 14:36:55 -07:00
Diva Canto
5f95f4d78e
Now trying DoubleQueue instead of BlockingQueue for the PollServiceRequestManager.
2013-07-17 14:09:04 -07:00
Diva Canto
1d3deda10c
I confuse myself. Let's try this variable name instead.
2013-07-17 13:26:15 -07:00
Diva Canto
af792bc7f2
Do the same trick that dahlia did for Dequeue(timeout)
2013-07-17 13:23:29 -07:00
Diva Canto
f4317dc26d
Putting the requests back in the queue while testing for count >0 is not the smartest move...
2013-07-17 12:57:34 -07:00
Diva Canto
0f5b616fb0
Didn't mean to commit this change in BlockingQueue.cs
2013-07-17 12:02:00 -07:00
Diva Canto
2b8de2c404
Merge branch 'master' of ssh://opensimulator.org/var/git/opensim
2013-07-17 11:19:56 -07:00
Diva Canto
e46459ef21
Cleared up much confusion in PollServiceRequestManager. Here's the history:
...
When Melanie added the web fetch inventory throttle to core, she made the long poll requests (EQs) effectively be handled on an active loop. All those requests, if they existed, were being constantly dequeued, checked for events (which most often they didn't have), and requeued again. This was an active loop thread on a 100ms cycle!
This fixes the issue. Now the inventory requests, if they aren't ready to be served, are placed directly back in the queue, but the long poll requests aren't placed there until there are events ready to be sent or timeout has been reached.
This puts the LongPollServiceWatcherThread back to 1sec cycle, as it was before.
2013-07-17 11:19:36 -07:00
Robert Adams
2c8bf4aaa6
BulletSim: fix small bug where everything looked like it was colliding
...
before the first simulator step.
2013-07-17 10:19:44 -07:00
Diva Canto
894554faf6
Removed the MapItems thread. Redirected the map items requests to the services throttle thread. Didn't change anything in how that processor is implemented, for better or for worse.
2013-07-16 20:28:48 -07:00
Diva Canto
9432f3c94d
Improvements to the ServiceThrottleModule: added a category and an itemid to the interface, so that duplicate requests aren't enqueued more than once.
2013-07-16 19:04:30 -07:00
Diva Canto
5f27aaa6dd
UserManagementModule: in the continuation, call the method that also looks up the cache, because the resource may be here in the meantime
2013-07-16 18:22:42 -07:00
Diva Canto
8bad56cb46
Merge branch 'master' of ssh://opensimulator.org/var/git/opensim
2013-07-16 17:53:49 -07:00
Diva Canto
d4720bd721
Added config var to fiddle with the Interval for the service throttle thread
2013-07-16 17:53:05 -07:00
Dan Lake
9f129938c9
Attachments module only registers when enabled. This enables alternative attachments module implementations. All calls to Scene.AttachmentsModule are checking for null. Ideally, if we support disabling attachments then we need a null attachments module to register with the scene.
2013-07-16 17:43:36 -07:00
Diva Canto
9f578cf0c8
Deleted a couple of verbose messages
2013-07-16 17:18:11 -07:00
Diva Canto
0419852598
Merge branch 'master' of ssh://opensimulator.org/var/git/opensim
2013-07-16 17:15:08 -07:00
Diva Canto
a006caabbc
Added IServiceThrottleModule.cs
2013-07-16 17:06:54 -07:00
Diva Canto
99a600753e
Changed the name to ServiceThrottle/ServiceThrottleModule in order to reflect its more generic nature.
2013-07-16 17:06:17 -07:00
Diva Canto
3fbd2c54bc
Eliminated the UserManagement/UserManagementModule throttle thread. Made the other one generic, taking any continuation.
2013-07-16 17:04:32 -07:00
Justin Clark-Casey (justincc)
cbc3576ee2
minor: Add warning method doc about possibly inconsistent results returned from BlockingQueue.Contains(), Count() and GetQueueArray()
2013-07-16 23:14:53 +01:00
Justin Clark-Casey (justincc)
50b8ab60f2
Revert "Revert "MSDN documentation is unclear about whether exiting a lock() block will trigger a Monitor.Wait() to exit, so avoid some locks that don't actually affect the state of the internal queues in the BlockingQueue class.""
...
This reverts commit 21a09ad3ad
.
After more analysis and discussion, it is apparant that the Count(), Contains() and GetQueueArray() cannot be made thread-safe anyway without external locking
And this change appears to have a positive impact on performance.
I still believe that Monitor.Exit() will not release any thread for Monitor.Wait(), as per http://msdn.microsoft.com/en-gb/library/vstudio/system.threading.monitor.exit%28v=vs.100%29.aspx
so this should in theory make no difference, though mono implementation issues could possibly be coming into play.
2013-07-16 23:00:07 +01:00
Justin Clark-Casey (justincc)
21a09ad3ad
Revert "MSDN documentation is unclear about whether exiting a lock() block will trigger a Monitor.Wait() to exit, so avoid some locks that don't actually affect the state of the internal queues in the BlockingQueue class."
...
This reverts commit 42e2a0d66e
Reverting because unfortunately this introduces race conditions because Contains(), Count() and GetQueueArray() may now end up returning the wrong result if another thread performs a simultaneous update on m_queue.
Code such as PollServiceRequestManager.Stop() relies on the count being correct otherwise a request may be lost.
Also, though some of the internal queue methods do not affect state, they are not thread-safe and could return the wrong result generating the same problem
lock() generates Monitor.Enter() and Monitor.Exit() under the covers. Monitor.Exit() does not cause Monitor.Wait() to exist, only Pulse() and PulseAll() will do this
Reverted with agreement.
2013-07-16 22:03:49 +01:00
Diva Canto
e0f0b88dec
In the pursuit of using less CPU: now trying to avoid blocking queues altogether. Instead, this uses a timer. No sure if it's better or worse, but worth the try.
2013-07-16 13:01:39 -07:00
Diva Canto
6da50d34df
Actually use DoubleQueue in UserManagement/UserManagementModule
2013-07-16 07:19:13 -07:00
Diva Canto
5a01ffa515
High CPU hunt: try a different blocking queue, DoubleQueue
2013-07-16 07:15:14 -07:00
dahlia
6dd454240f
revert last commit which seems to conflict with DoubleQueue internals. The random crash might be in DoubleQueue instead. See http://pastebin.com/XhNBNqsc
2013-07-16 02:03:01 -07:00
dahlia
70aa77f520
add locking to internal queue in WebFetchInvDescModule; lack of which caused a random crash in a load test yesterday
2013-07-16 01:31:09 -07:00
dahlia
42e2a0d66e
MSDN documentation is unclear about whether exiting a lock() block will trigger a Monitor.Wait() to exit, so avoid some locks that don't actually affect the state of the internal queues in the BlockingQueue class.
2013-07-16 01:12:56 -07:00
Justin Clark-Casey (justincc)
e8e073aa97
Simplify EventQueue cap setup so that it is also stat monitored.
...
Curiously, the number of requests received is always one greater than that shown as handled - needs investigation
2013-07-16 00:05:45 +01:00