[Vm-dev] free-chunk-management-in-the-cog-vm

Eliot Miranda eliot.miranda at gmail.com
Mon Jun 18 00:09:53 UTC 2018


Hi Ben,

On Sun, Jun 17, 2018 at 4:11 PM, Ben Coman <btc at openinworld.com> wrote:

>
> Hi Clement,
>
> Nice article...
> https://clementbera.wordpress.com/2018/06/07/free-chunk-
> management-in-the-cog-vm/
>
> A random thought, I wonder if size-1 chunks can be managed packed into
> size-2 chunks.
>

A key design feature of Spur is that every object has at least one field to
function as a forwarding pointer.  Hence even zero-sized objects occupy 128
bits.  Each object has a 64-bit header (large objects have a 128-bit
header).  The allocation unit is 64-bits.  All objects must have room for a
forwarding pointer.  Hence the minimum sized chunk is 128-bits.

Hence there isn't room for two size 1 chunks inside a size-2 chunk, only
inside a size three chunk.


>
> Have a variable size1_active_double initially nil.
> First size-1 allocation, grab a size-2 chunk into size1_active_double.
> First half returned as the size-1-chunk. Second half marked at "empty".
>
> Second size-1 allocation, return second half of size1_active_double
> as size-1-chunk.  Set  size1_active_double to nil.
>
> Releasing a size-1-chunk. Dependent on whether memory alignment can inform
> of which half of size-2-chunk is being released. Check if other half is
> empty ==> add it to the size-2-chunk-list.
>
> If other half not empty, add it to one of two singly-linked-lists
> depending on which half is empty, the empty half used for the linked-list.
> Next size-1 allocations made from these lists first to fill in the empty
> half.
>
> Considerations
> * Added complexity
> * Remaining size-1 singly-linked-list might have minimal impact - added
> complexity not worth the gain.
>
> ____________
> Or another random thought *grin* - and this is probably completely off
> base because of my limited understanding.
> Piggyback the size-1-chunk management on top of the size-3-chunk-list.
> Consider one end of the size-3-chunk-list to be "size1-filled-end" with
> references to free size-1-chunks, and the other end of the
> size-3-chunk-list to be "size1-empty-end".
>
> To release a size-1-chunk, move a size-3-chunk from the "size1-empty-end"
> to the "size1-filled-end" and store the size-1-chunk reference there.
>
> To allocate a size-1-chunk, get it from the "size1-filled" end of the
> size-3-chunk-list and move that size-3-chunk to the "size1-empty-end" of
> its list.
>
> To compact a size-3-chunk that refers to a size-1-chunk, copy that into
> another chunk from the size1-empty-end moved to the size1-filled-end.
>
>
> I wonder if that even makes sense.
> Anyway, it hurts less to let the ideas roam free...
>
> cheers -ben
>
>


-- 
_,,,^..^,,,_
best, Eliot
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/vm-dev/attachments/20180617/884dc42d/attachment.html>


More information about the Vm-dev mailing list