... at http://www.mirandabanda.org/files/Cog/VM/VM.r3732
CogVM binaries as per VMMaker.oscog-eem.1873/r3732
General: Make primitiveDoPrimitiveWithArgs usable as a mirror primitive, such that no message needs to be sent to the receiver to evaluate a primitive on it. This would make possible Context>>receiver: obj tryPrimitive: idx withArgs: args.
Spur: Fix ephemerons (at least for Gule's test case).
The mournQueue is of course a root for the scavenger and so must be visited at the start of a scavenge. Fix bug in markAllUnscannedEphemerons, enumerating correctly.
Both fireEphemeronsInRememberedSet and fireEphemeronsOnEphemeronList must check for an ephemeron being fireable. An as-yet-firable ephemeron might get added to the ephemeron list and later its key may get tenured, rendering the ephemeron unfirable in that cycle.
Fix marking of obj stack contents (markAndTraceObjStack:andContents:). Again tenuring could cause contents to be forwarded and hence read barrier is needed.
Fix two bugs in ephemerons (found by Gille Polito - thanks!).
1. obj stack extension must happen with marking set to true if new pages aren't to be GC'ed. So move the assignments to marking out into markObjects: where they can surround nilUnmarkedWeaklingSlots.
2. fireAllUnscannedEphemerons needs to enumerate the unscannedEphemerons set properly, an oop at a time.
Fix asserts that check for ephemerons so that the change in an ephemeron's format once it gets added to the mournQueue doesn't break the asserts; isMaybeFiredEphemeron[Format]: answer true for ephemerons and ephemerons in the mournQueue.
Fix the Spur implementation of becomeForward:copyHash: for becomming immediates with copyHash false. Fix the scavenger's referenceCountRememberedReferents: for forwarding to immediates, and add a printRememberedSet convenience.
Make pushLiteralVariable: store unfollowed literals back into the literal frame. Do so in a function off to the side, not inlined into the interpreter loop.
With the above ephemeron changes Guille's test case passes: | e | Smalltalk supportsQueueingFinalization: true. e := (1 to: 200000) collect: [:i| Ephemeron key: (ObjectFinalizer receiver: 'test', 'asd' selector: #logCr) value: Object new]. Smalltalk garbageCollect!
Plugins: Simplify the arg validation in FloatArrayPrims>>prmNormalize & primLength.
Fix the configuration of the gdb-7.x support for for the GdbARMPlugin (COG=1). Put #if COG around a couple of changes to the gdb-7.10 code. Allow assert to be used in the plugin on MacOS X (-undefined dynamic_lookup)
_,,,^..^,,,_ best, Eliot
Cool!
I've just tested also your last version both on the simulator and in a compiled vm (with both edens of 4M and 2M) and we could not reproduce the crash anymore :).
We pushed a bit more the case by creating 2M ephemerons and everything worked smoothly ;).
I'll continue now working on the image side support of Ephemerons.
Thanks!! Guille
-------- Original Message --------
... at http://www.mirandabanda.org/files/Cog/VM/VM.r3732
CogVM binaries as per VMMaker.oscog-eem.1873/r3732
General: Make primitiveDoPrimitiveWithArgs usable as a mirror primitive, such that no message needs to be sent to the receiver to evaluate a primitive on it. This would make possible Context>>receiver: obj tryPrimitive: idx withArgs: args.
Spur: Fix ephemerons (at least for Gule's test case).
The mournQueue is of course a root for the scavenger and so must be visited at the start of a scavenge. Fix bug in markAllUnscannedEphemerons, enumerating correctly.
Both fireEphemeronsInRememberedSet and fireEphemeronsOnEphemeronList must check for an ephemeron being fireable. An as-yet-firable ephemeron might get added to the ephemeron list and later its key may get tenured, rendering the ephemeron unfirable in that cycle.
Fix marking of obj stack contents (markAndTraceObjStack:andContents:). Again tenuring could cause contents to be forwarded and hence read barrier is needed.
Fix two bugs in ephemerons (found by Gille Polito - thanks!).
- obj stack extension must happen with marking set to true if new
pages aren't to be GC'ed. So move the assignments to marking out into markObjects: where they can surround nilUnmarkedWeaklingSlots.
- fireAllUnscannedEphemerons needs to enumerate the
unscannedEphemerons set properly, an oop at a time.
Fix asserts that check for ephemerons so that the change in an ephemeron's format once it gets added to the mournQueue doesn't break the asserts; isMaybeFiredEphemeron[Format]: answer true for ephemerons and ephemerons in the mournQueue.
Fix the Spur implementation of becomeForward:copyHash: for becomming immediates with copyHash false. Fix the scavenger's referenceCountRememberedReferents: for forwarding to immediates, and add a printRememberedSet convenience.
Make pushLiteralVariable: store unfollowed literals back into the literal frame. Do so in a function off to the side, not inlined into the interpreter loop.
With the above ephemeron changes Guille's test case passes: | e | Smalltalk supportsQueueingFinalization: true. e := (1 to: 200000) collect: [:i| Ephemeron key: (ObjectFinalizer receiver: 'test', 'asd' selector: #logCr) value: Object new]. Smalltalk garbageCollect!
Plugins: Simplify the arg validation in FloatArrayPrims>>prmNormalize & primLength.
Fix the configuration of the gdb-7.x support for for the GdbARMPlugin (COG=1). Put #if COG around a couple of changes to the gdb-7.10 code. Allow assert to be used in the plugin on MacOS X (-undefined dynamic_lookup)
_,,,^..^,,,_ best, Eliot
thanks guille for all this cool energy!
Le 27/5/16 à 15:17, Guille Polito a écrit :
Cool!
I've just tested also your last version both on the simulator and in a compiled vm (with both edens of 4M and 2M) and we could not reproduce the crash anymore :).
We pushed a bit more the case by creating 2M ephemerons and everything worked smoothly ;).
I'll continue now working on the image side support of Ephemerons.
Thanks!! Guille
-------- Original Message --------
... at http://www.mirandabanda.org/files/Cog/VM/VM.r3732
CogVM binaries as per VMMaker.oscog-eem.1873/r3732
General: Make primitiveDoPrimitiveWithArgs usable as a mirror primitive, such that no message needs to be sent to the receiver to evaluate a primitive on it. This would make possible Context>>receiver: obj tryPrimitive: idx withArgs: args.
Spur: Fix ephemerons (at least for Gule's test case).
The mournQueue is of course a root for the scavenger and so must be visited at the start of a scavenge. Fix bug in markAllUnscannedEphemerons, enumerating correctly.
Both fireEphemeronsInRememberedSet and fireEphemeronsOnEphemeronList must check for an ephemeron being fireable. An as-yet-firable ephemeron might get added to the ephemeron list and later its key may get tenured, rendering the ephemeron unfirable in that cycle.
Fix marking of obj stack contents (markAndTraceObjStack:andContents:). Again tenuring could cause contents to be forwarded and hence read barrier is needed.
Fix two bugs in ephemerons (found by Gille Polito - thanks!).
- obj stack extension must happen with marking set to true if new
pages aren't to be GC'ed. So move the assignments to marking out into markObjects: where they can surround nilUnmarkedWeaklingSlots.
- fireAllUnscannedEphemerons needs to enumerate the
unscannedEphemerons set properly, an oop at a time.
Fix asserts that check for ephemerons so that the change in an ephemeron's format once it gets added to the mournQueue doesn't break the asserts; isMaybeFiredEphemeron[Format]: answer true for ephemerons and ephemerons in the mournQueue.
Fix the Spur implementation of becomeForward:copyHash: for becomming immediates with copyHash false. Fix the scavenger's referenceCountRememberedReferents: for forwarding to immediates, and add a printRememberedSet convenience.
Make pushLiteralVariable: store unfollowed literals back into the literal frame. Do so in a function off to the side, not inlined into the interpreter loop.
With the above ephemeron changes Guille's test case passes: | e | Smalltalk supportsQueueingFinalization: true. e := (1 to: 200000) collect: [:i| Ephemeron key: (ObjectFinalizer receiver: 'test', 'asd' selector: #logCr) value: Object new]. Smalltalk garbageCollect!
Plugins: Simplify the arg validation in FloatArrayPrims>>prmNormalize & primLength.
Fix the configuration of the gdb-7.x support for for the GdbARMPlugin (COG=1). Put #if COG around a couple of changes to the gdb-7.10 code. Allow assert to be used in the plugin on MacOS X (-undefined dynamic_lookup)
_,,,^..^,,,_ best, Eliot
vm-dev@lists.squeakfoundation.org