Hi Ben, Steph,

On Wed, Jul 16, 2014 at 4:31 AM, Ben Coman <b...@openinworld.com> wrote:

> stepharo wrote:
>
>> Hi eliot
>>
>> Thanks!
>> I'm really eager to read about the new become implementation.
>>
>
> There is this...
> http://www.mirandabanda.org/cogblog/2013/09/13/lazy-
> become-and-a-partial-read-barrier/


yes, but I've removed all the scanning of the class table post become.  So
that post is inaccurate now.
Steph, I plan to update the SpurMemoryManager class comment and that post
soon to reflect the current design.


> cheers -ben
>
>
>  I could not fully understand the following but this is exciting to know
>> that you removed complexity.
>>
>> Stef
>>
>> "The read barriers on method lookup (of the methodClass association in
>> super
>> sends, of the superclass link, of method dictionaries, method dictionary
>> arrays,
>> selectors and methods is cheap.  So replace scanning classes and method
>> dictionaries in the class table post become with read marriewrs on
>> methodClass,
>> superclass and method dictionary etc on lookup.
>>
>> The read barrier on an object from which we are going to fetch state
>> (such as a
>> class or method dictionary) is essentially free on modern machines
>> because the
>> class index and the state very likely share a cache line, and the
>> register code
>> for testing is so cheap compared to memory access.  Further the read
>> barrier on
>> selectors is cheap because the method lookup cache is effective in
>> reducing the
>> number of message lookups and because nil entries need no check.
>>
>> So nuke all the followNecessaryForwardingInMethod: machinery including
>> the
>> cmUsesMethodClass hack.  Nuke scanClassPostBecome:effects:."
>>
>>
>>
>>
>> On 15/7/14 21:58, Eliot Miranda wrote:
>>
>>> ...at http://www.mirandabanda.org/files/Cog/VM/VM.r3041/.
>>>
>>>
>>> The principal changes are fixing a performance regression in the 3040
>>> VMs, fixing some Spur bugs in primitiveClone/shallowCopy, and radically
>>> simplifying the Spur become implementation,
>>> trading the elimination of lots of post-become class table scanning for
>>> adding read barriers to class hierarchy method lookup.
>>>
>>>
>>> CogVM source as per VMMaker.oscog-eem.820/r3041
>>>
>>> Put the handling of the cloning of cogged methods in the clone:
>>> implementations,
>>> removing it from the primitive.  Add it to the pinning clone too.
>>>
>>> Specialize the store check trampoline generation.
>>> Move it down to the relevant object representations.
>>>
>>> Move setting of isRemembered flag to true into SpurGenerationScavenger>>
>>> remember:.  Inline possibleRootStoreInto: (given that remember: is /not/
>>> inlined.  Call remember directly from the ceStoreCheckTrampoline, and
>>> hence have remember: answer its argument.
>>>
>>> Fix localization bug.  Variables in initialize methods were not
>>> considered
>>> references (cuz there are excluded).  This caused VMMaker.oscog-eem.816's
>>> extraction of zero/false vars to StackInterpreter>>#initialize to cause
>>> nextPollUsecs to be localized to checkForEventsMayContextSwitch:.
>>>
>>> Spur:
>>> Fix bug in scanClassPostBecome:effects: with new lazy
>>> selector following policy by... throwing it all away.
>>>
>>> The read barriers on method lookup (of the methodClass association in
>>> super
>>> sends, of the superclass link, of method dictionaries, method dictionary
>>> arrays,
>>> selectors and methods is cheap.  So replace scanning classes and method
>>> dictionaries in the class table post become with read marriewrs on
>>> methodClass,
>>> superclass and method dictionary etc on lookup.
>>>
>>> The read barrier on an object from which we are going to fetch state
>>> (such as a
>>> class or method dictionary) is essentially free on modern machines
>>> because the
>>> class index and the state very likely share a cache line, and the
>>> register code
>>> for testing is so cheap compared to memory access.  Further the read
>>> barrier on
>>> selectors is cheap because the method lookup cache is effective in
>>> reducing the
>>> number of message lookups and because nil entries need no check.
>>>
>>> So nuke all the followNecessaryForwardingInMethod: machinery including
>>> the
>>> cmUsesMethodClass hack.  Nuke scanClassPostBecome:effects:.
>>>
>>> Rip out the forwardingCount: measurement code.  It causes
>>> bad performance regressions (due to failing inlines?)
>>>
>>> Clean up, e.g. replace followNonImmediateField:ofObject:
>>> uses with followObjField:ofObject:.
>>>
>>> canPinObjects can be inlined.
>>>
>>>
>>> --
>>> best,
>>> Eliot
>>>
>>
>>
>>
>>
>
>


-- 
best,
Eliot

Reply via email to