[Mono-dev] Mono tasklet memory issues
James Zhao
jameszhao00 at gmail.com
Sun Aug 30 00:45:34 EDT 2009
Hi,
I'm currently working on something that uses mono 2.6's
tasklet/continuations (similar to stackless python/'eve). However, I'm
experiencing some really bizzare memory issues. I tested on Windows and
Linux.
I modified the default Mono.MicroThreads library so each microthread reuses
continuations rather than allocating a new continuation every Start().
I'm experiencing high memory usage when calling Mono Continuation's
Continuation.store(). Every 4 or 5 seconds a huge GC op/spike happens.
Here's a comparison of memory/cpu for using Mono Continuations and directly
calling the method.
You can view the source code
http://code.google.com/p/mmo-test/source/browse/#svn/trunk/mmo_v2 .
EntityProcessor.cs/Run() runs the microthreads and
EntityProcessor.cs/AddQueuedEntities() adds the microthreads.
Here's some data.
Memory, ms spent in iteration
Using Mono Continuations (200k entities/MicroThreads)
367210496, 410
385441792, 418
405204992, 346
427053056, 363
444809216, 333
462483456, 339
423661568, 1559
441327616, 465
458985472, 305
403214336, 1338
419254272, 506
Not sing Mono Continuations (200k entities)
365662208, 67
365662208, 67
365662208, 66
365662208, 66
365662208, 67
365662208, 67
Thanks,
James
Here's my chat log with Rodrigo:
12:16 AM me: hey rodrigo. do u have a moment?
Rodrigo: yes
12:17 AM me: i'm currently working on something that uses mono 2.6's
tasklet/continuations (similar to stackless python/'eve). however, im
experiencing some really bizzare memory issues
Rodrigo: right
on linux, right?
12:18 AM me: i tested on linux and windows.
Rodrigo: ok
me: once i start using them, it causes memory usage to continue rising,
Rodrigo: what kind of problems are you having?
me: until at around 4-5 secs a huge gc op occur
i took a look at the source
12:19 AM *c source
Rodrigo: well, each tasklet holds onto a big block of memory
me: and it should be gcing each time store() is called, or it will
overwrite
and im reusing continuations across iterations
12:20 AM Rodrigo: why, it shouldn't be required
me: sorry. gc if current required > previous size
overwrite if otherwise
Rodrigo: I still fails to see a reason to trigger a gc on this case
12:21 AM me: hmm i guess im not too sure either
12:22 AM but the thing is, even if im reusing the continuation
the memory, (ms spent) is like this
87314432, 161
92131328, 128
91377664, 315
95244288, 88
93085696, 330
91824128, 319
89403392, 292
it keeps cycling
12:23 AM sorry. it's more like this
367210496, 410
385441792, 418
405204992, 346
427053056, 363
444809216, 333
462483456, 339
423661568, 1559
441327616, 465
458985472, 305
403214336, 1338
419254272, 506
Rodrigo: and 400mb is like the working set of your app?
12:24 AM me: at
423661568, 1559, there's a huge lag spike
lemme check
Rodrigo: those spike can happen
me: 530 ish on windows
thing is, im not reallocating anything major each iteration
*allocating
12:25 AM i allocate 1 new continuation per step, and call store() on 200k
others
Rodrigo: why are you calling store on those 200k other?
me: yield/sleep
12:26 AM Rodrigo: oh, ok
well, you realize that the working set is largely related to the living
set of the objects on the many stacks
and GC spikes are not really uncommon
12:27 AM me: but i tested another scenario
i also have a version of microthreads that doesnt use continuations
that just runs() and waits for it to return
and that one doesnt have any spikes on mono
12:28 AM and memory on that one barely increases
Rodrigo: do you mind emails the list with your code and CC Paolo Molaro
he's the maintainer of tasklets
I'm not familiar with the code
me: yea sure. do u mind if i link this chat?
Rodrigo: no problem
me: k. thank you
12:29 AM later
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.ximian.com/pipermail/mono-devel-list/attachments/20090830/5ef3749a/attachment-0001.html
More information about the Mono-devel-list
mailing list