On 10/25/06, Robin Garner <[EMAIL PROTECTED]> wrote:

>    follows.  Comments, suggestions are welcome.   It would be much
>    appreciated if Steve Blackburn and Robin Garner would reply to the
> questions
>    below directed to the "MMTk guys".

Interleaved below.

>          - prepareCollector() method – Its not clear MMTk/DRLVM
>          needs to do anything. (MMTk folks please comment on what the
> VM is supposed
>          to do!)

The CollectorContext object is the per-thread context object for each GC
thread.  A uniprocessor, single-threaded java program will have one
MutatorContext and one CollectorContext.  A uniprocessor multithreaded
java program (ie all practical programs on a uniprocessor) will have one
CollectorContext and several MutatorContexts.

This method is provided so that the VM can do whatever it requires to a
collector thread.  If this is nothing (which in drlvm it could well be),
this can be a no-op.  Whether that is true or not requires DRLVM internals
knowledge I don't have.


Can we simply hardwire the number of CollectorContexts to be one?  At a
later date when this becomes a performance problem on a 4-way SMP, we can
fix this problem.  What do you think?

.

>          - scheduleFinalizerThread() – do nothing at this stage (It
>          will need to be fixed when MMTk/DRLVM is capable of running
> workloads that
>          need finalizers.)
>       - Lock class
>          - This looks complete.  (Can MMTk folks take a look and
>          confirm?)

Lets run through this together on Thursday.


Well, we did not get to this today in Portland Oregon.  Maybe you can tell
me what needs to be done over harmony-dev.


>          - getObjectType() returns an object of type MMTtype.  Currently
>          there is a very simple cache of MMType objects.  We need
>          to confirm this approach is functionally correct (MMTk guys,
> please
>          comment).  Then determine if a simple cache is good enough
>          to bring up work loads such as Dacapo and SpecJBB.  A
>          design issue that needs to be resolved – what part of the
> MMTk heap should
>          MMType objects be allocated from?  Maybe ImmortalSpace
>          (MMTk guys, is this correct?)

When a class is loaded, you should request an MMType from MMTk, then store
it somewhere that it can be returned by this call.  Allocating in
ImmortalSpace would be appropriate (or move before each GC using the
preCopyGCInstances hook).  JikesRVM does this (immortal allocation) using
compile-time allocation policy based on call site (by type) and object
type.


I think this means that MMTk has a requirement on JIT functionality.  That
is, the JIT must support compile-time allocation policy based on callsite.
Is this correct?

   - Project 5
>       - Debug and verify JIT support for MMTk's  "Uninterruptible"
>       class.  This basically means that the JIT needs to not insert GC
>       polling calls when JITing an MMTk class that extends
> "Uninterruptible".
>       This project depends on VM and JIT support for Back-branch
>       polling.  It probably does not need to be fully developed and
>       debugged until we try to run multithread java apps.  The reason
>       is because it requires two or more running Java thread to create
> a condition
>       where one thread want to arbitrarily suspend the other java
threads
> at GC
>       safepoints.

My feeling is multithreading is so fundamental to Java that this needs to
be done pdq.  I'm not sure how the helpers for GCV[45] are going to cope
without it.


Sorry for not being clear.  Yes, multithreading is fundamental to drlvm and
it works.  I simply want to turn it off for this stage of the MMTk/DRLVM
port.  Back-branch polling and Uninterruptible have to work for the ongoing
DRLVM vmmagic vm helper coding that is currently under way.

--
Weldon Washburn
Intel Enterprise Solutions Software Division

Reply via email to