[Vm-dev] Re: [Pharo-project] [squeak-dev] CogVM binaries as per
VMMaker.oscog-eem.157/r2550.
Mariano Martinez Peck
marianopeck at gmail.com
Fri Apr 27 18:12:02 UTC 2012
On Fri, Apr 27, 2012 at 7:37 PM, Eliot Miranda <eliot.miranda at gmail.com>wrote:
>
>
>
> On Fri, Apr 27, 2012 at 12:57 AM, Mariano Martinez Peck <
> marianopeck at gmail.com> wrote:
>
>>
>>
>>
>> On Thu, Apr 19, 2012 at 6:06 PM, Eliot Miranda <eliot.miranda at gmail.com>wrote:
>>
>>>
>>>
>>>
>>> On Thu, Apr 19, 2012 at 12:55 AM, Mariano Martinez Peck <
>>> marianopeck at gmail.com> wrote:
>>>
>>>>
>>>>
>>>> On Thu, Apr 19, 2012 at 6:08 AM, Eliot Miranda <eliot.miranda at gmail.com
>>>> > wrote:
>>>>
>>>>> http://www.mirandabanda.org/files/Cog/VM/VM.r2550/
>>>>>
>>>>> CogVM binaries as per VMMaker.oscog-eem.157/r2550.
>>>>>
>>>>> Stack/CoInterpreter/Cogit:
>>>>> Implement proper bounds checking for byte access to compiled
>>>>> methods. Raise errors for accesses outside initialPC to size.
>>>>>
>>>>> CoInterpreter:
>>>>> Provide a thorough flush primitive for CompiledMethods that discards all
>>>>> machine code and makes sure that any contexts using the method have bytecode
>>>>> pcs. Primitive #215 (same as 116 in the Stack VM). This is much slower than
>>>>> 116 (flushCache) since it has to enumerate over all heap contexts.
>>>>>
>>>>>
>>>> Excellent. Does it mean we should implement something like this:
>>>>
>>>> CompiledMethod >> flushCache
>>>> "Tell the interpreter to remove all references to this method from
>>>> its method lookup cache, if it has one. In addition, it provides a thorough
>>>> flush primitive for CompiledMethods that discards all machine code and
>>>> makes sure that any contexts using the method have bytecode
>>>> pcs.
>>>> This primitive must be called whenever a method is redefined or
>>>> removed."
>>>> <primitive: 215>
>>>> self simpleFlushCache
>>>>
>>>>
>>>> CompiledMethod >> simpleFlushCache
>>>> "Tell the interpreter to remove all references to this method from
>>>> its method lookup cache, if it has one. This primitive must be called
>>>> whenever a method is redefined or removed."
>>>>
>>>> <primitive: 116>\
>>>>
>>>
>>> No. 215 is extremely expensive, because it scans the entire heap
>>> looking for contexts using the method, and in the common case of redefining
>>> a method it is unnecessary. It is only necessary if you modify a method
>>> still in-use; read the comment of the attached method.
>>>
>>> Further, I would prefer to update the Interpreter to implement primitive
>>> 215 using primitive 116, i.e. in the Interpreter's primitive table have both
>>>
>>> (116 primitiveFlushCacheByMethod)
>>> ...
>>> (215 primitiveFlushCacheByMethod) "primitiveVoidVMStateForMethod in the
>>> CoInterpreter"
>>>
>>> This is what I've done in the StackInterpreter. In fact, we need to put
>>> in time to bring the Interpreter's primitive set into agreement with Cog.
>>>
>>>
>>
>> Ok, I understand. Now, primitive 215 #primitiveVoidVMStateForMethod
>> receives a CompiledMethod so we implement #voidCogVMState there. However, I
>> see there is also primitive 214 #primitiveVoidVMState. Should we ALSO add
>> something like
>>
>> voidCogVMState
>> "Void all internal VM state in the stack and machine code zones
>> <primitive: 214>
>> ^self primitiveFailed
>>
>>
>> But implemented in SmallttalkImage/VirtualMachine ??
>>
>
> Yes. Find attached.
>
>>
>>
Thanks. I did slice for Pharo.
http://code.google.com/p/pharo/issues/detail?id=5728
>
>> thanks!
>>
>>
>>>
>>> So I'm expecting we will have
>>>
>>> voidCogVMState
>>> "Tell the VM to remove all references to any machine code form of the
>>> method.
>>> This primitive must be called whenever a method is in use and
>>> modified. This is
>>> more aggressive (and *much* more costly) than flushCache since it must
>>> search
>>> through all context objects, making sure that none have a (hidden)
>>> machine code pc
>>> in the receiver. Since modifying a method will likely change the
>>> generated machine code,
>>> modifying a method (rather than redefining it) requires this more
>>> aggressive flush."
>>>
>>> <primitive: 215>
>>> ^self primitiveFailed
>>>
>>> flushCache
>>> "Tell the interpreter to remove all references to this method from its
>>> method lookup cache, if it has one. This primitive must be called whenever
>>> a method is defined or removed.
>>> NOTE: Only one of two selective flush methods needs to be used.
>>> Squeak 2.2 and earlier uses 119 (See Symbol flushCache).
>>> Squeak 2.3 and later uses 116 (See CompiledMethod flushCache)."
>>>
>>> <primitive: 116>
>>>
>>> or
>>>
>>> voidCogVMState
>>> "Tell the VM to remove all references to any machine code form of the
>>> method.
>>> This primitive must be called whenever a method is in use and
>>> modified. This is
>>> more aggressive (and *much* more costly) than flushCache since it must
>>> search
>>> through all context objects, making sure that none have a (hidden)
>>> machine code pc
>>> in the receiver. Since modifying a method will likely change the
>>> generated machine code,
>>> modifying a method (rather than redefining it) requires this more
>>> aggressive flush."
>>>
>>> <primitive: 215>
>>> ^self flushCache
>>>
>>> flushCache
>>> "Tell the interpreter to remove all references to this method from its
>>> method lookup cache, if it has one. This primitive must be called whenever
>>> a method is defined or removed.
>>> NOTE: Only one of two selective flush methods needs to be used.
>>> Squeak 2.2 and earlier uses 119 (See Symbol flushCache).
>>> Squeak 2.3 and later uses 116 (See CompiledMethod flushCache)."
>>>
>>> <primitive: 116>
>>>
>>>
>>>>
>>>>
>>>> If you have a better name for #simpleFlushCache please let me know.
>>>> if you agree, I will open an issue for this.
>>>>
>>>> Cheers
>>>>
>>>>
>>>>
>>>>>
>>>>> Provide an xray primitive for CompiledMethod that answers if a method has
>>>>> machine code, and if so if it's machine code is frameless, and/or refers
>>>>> to a young object. No primitive number. Used to test the above.
>>>>>
>>>>> Make printOopShort: print Association keys. Useful for
>>>>> longPrintOop:, and hence printReferencesTo: etc.
>>>>>
>>>>> Mac OS: add fflush to debug printing in sqMacUIEventsUniversal.c so output
>>>>> appears promptly.
>>>>>
>>>>> Fix the annoying bogus error messages from the mprotect calls by getting the
>>>>> length arg to mprotect right.
>>>>>
>>>>> Add version infor for the Cross/plugins tree. Add a -version switch to win32
>>>>>
>>>>> --
>>>>>
>>>>> best,
>>>>>
>>>>> Eliot
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>>
>>>> --
>>>> Mariano
>>>> http://marianopeck.wordpress.com
>>>>
>>>>
>>>
>>>
>>> --
>>> best,
>>> Eliot
>>>
>>>
>>>
>>
>>
>> --
>> Mariano
>> http://marianopeck.wordpress.com
>>
>>
>>
>
>
> --
> best,
> Eliot
>
>
>
--
Mariano
http://marianopeck.wordpress.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20120427/1aa309d1/attachment-0001.htm
More information about the Vm-dev
mailing list