From: jacko on
On Jul 15, 4:48 pm, George Neuner <gneun...(a)comcast.net> wrote:
> On Thu, 15 Jul 2010 08:17:44 -0700 (PDT), jacko <jackokr...(a)gmail.com>
> wrote:
>
> >Is
>
> >http://groups.google.com/group/comp.lang.forth/browse_thread/thread/4...
>
> >important for solving the GC problem? Ref FIFOO
>
> There isn't enough detail in that conversation to figure out what
> problem the structure is trying to solve.  What exactly are you
> asking?
>
> George

From my own prospective the mark and sweep cache flushing garbage
collector problem. Also related to the circular pointer counted
reference memory leak problem, and the common tail evaluation of
circular structures solution.
From: jacko on
The virtualization through a vm relates to cache size, or more
precisly to I cache vs. D cache size. Using a simple virtual machine
the I-cache can be smaller, or more precisly have more decode applied
in the same area. Introduction of a threadidng cache or T cache to
avoid clogging the D cache with contol flow addresses, allows an
individual ip/(pc) per T cache line. If it were not for re-entrant
recursive functions... or maybe this is just an ip push/pop.

To avoid the threading to from code entry exit problem, all that is
needed is a code entry thread address to be made special, and an
opcode to re-enter threading mode, or only execute one opcode before
threading re-entry.

Infact with good design an I cache can be decoded to an RTL
encompassing a cache line unit of execution. Knowing that certain
'registers' are temporary stack pointers, not requiring global memory
writethru, supporting a a mutithreaded pipeline for threadcount equals
cacheline size. The common code base of a threading engine prvents I
cache invalidations. The problem is then defered to the T cache as the
I cache becomes a sort of microcode. The T cache can then be divided
into n parts as the cacheline becomes n instructions. Each part then
has n cycles to achive an indirection lookup or line load/save/copy.

The D cache then becomes the bottleneck, especially with the writeback/
thru/snoop requirement. This could be effectivly split by only
allowing certain address modulo aligment read/write on certain
instructions based on the same modulo in the I cache line.

Any thoughts?

Cheers Jacko
From: George Neuner on
On Thu, 15 Jul 2010 09:09:52 -0700 (PDT), jacko <jackokring(a)gmail.com>
wrote:

>On Jul 15, 4:48�pm, George Neuner <gneun...(a)comcast.net> wrote:
>> On Thu, 15 Jul 2010 08:17:44 -0700 (PDT), jacko <jackokr...(a)gmail.com>
>> wrote:
>>
>> >Is
>>
>> >http://groups.google.com/group/comp.lang.forth/browse_thread/thread/4...
>>
>> >important for solving the GC problem? Ref FIFOO
>>
>> There isn't enough detail in that conversation to figure out what
>> problem the structure is trying to solve. �What exactly are you
>> asking?
>>
>> George
>
>From my own prospective the mark and sweep cache flushing garbage
>collector problem. Also related to the circular pointer counted
>reference memory leak problem, and the common tail evaluation of
>circular structures solution.

I don't see how the "FIFOO" described in the link would help cache
pollution in GC (any GC). Since marking and copying are both
read-only (no modify) operations, the best solution is to fetch the
value(s) into the L1 cache bypassing the other levels, and for copying
or compacting GC to write it out again bypassing the other levels. I
don't know of a workable solution for sweeping which does modify
structures.

Likewise, I can't see how it fixes circular linking ... all FIFOO
seems intended to do is provide a way to find the roots of structures
that share common sub-structure. I didn't see any provision to
prevent circular linking. It seems to me to be a heavy-weight
solution to the problem - in the absence of tracing or copying GC,
ISTM that using an object table to indirectly reference objects with
multiple parents is a better solution ... delete/sweep of an object
stops where it chases a pointer into the object table.

George
From: Benny Amorsen on
Morten Reistad <first(a)last.name> writes:

> You cannot identify the session before you have done a bit of
> identification on the packet, and by then there is a thread on
> a processor in the cluster that has read the packet and is
> acting on it.

I would have expected a modern multi-queue NIC to be able to identify
the session. It can then place the packet in the right queue and
interrupt the right CPU. Is this not possible for UDP traffic?


/Benny

From: jacko on
On Jul 15, 7:35 pm, George Neuner <gneun...(a)comcast.net> wrote:
> On Thu, 15 Jul 2010 09:09:52 -0700 (PDT), jacko <jackokr...(a)gmail.com>
> wrote:
>
>
>
>
>
> >On Jul 15, 4:48 pm, George Neuner <gneun...(a)comcast.net> wrote:
> >> On Thu, 15 Jul 2010 08:17:44 -0700 (PDT), jacko <jackokr...(a)gmail.com>
> >> wrote:
>
> >> >Is
>
> >> >http://groups.google.com/group/comp.lang.forth/browse_thread/thread/4....
>
> >> >important for solving the GC problem? Ref FIFOO
>
> >> There isn't enough detail in that conversation to figure out what
> >> problem the structure is trying to solve.  What exactly are you
> >> asking?
>
> >> George
>
> >From my own prospective the mark and sweep cache flushing garbage
> >collector problem. Also related to the circular pointer counted
> >reference memory leak problem, and the common tail evaluation of
> >circular structures solution.
>
> I don't see how the "FIFOO" described in the link would help cache
> pollution in GC (any GC).  Since marking and copying are both
> read-only (no modify) operations, the best solution is to fetch the
> value(s) into the L1 cache bypassing the other levels, and for copying
> or compacting GC to write it out again bypassing the other levels.  I
> don't know of a workable solution for sweeping which does modify
> structures.

Marking involves a WRITE.

> Likewise, I can't see how it fixes circular linking ... all FIFOO
> seems intended to do is provide a way to find the roots of structures
> that share common sub-structure.  I didn't see any provision to
> prevent circular linking.  It seems to me to be a heavy-weight
> solution to the problem - in the absence of tracing or copying GC,

Tail self linking becomes 'conceptually' impossible/not supported, and
circular linking can be found by common tail => i.e. will be one of
the heads, and so will share a common tail. So an object traversal of
all heads to check not common tail ... a reduction in computation for
self referencing structures, and an easy active head count = 0 test
for complete free, which will keep you in list elements for quite a
while before any complex gc code has to be run. FIFOO does not prevent
self references, but makes it easier to computationally detect if
necessary.

Mark sweep involves marking the whole active list node set. Three
total traversals or two if a binary bool marker is used.

Allocate copy involves handles to every list node or a referer node
list for back poking, and involves full traversal of the active node
list and reallocation and copying of them.

> ISTM that using an object table to indirectly reference objects with
> multiple parents is a better solution ... delete/sweep of an object
> stops where it chases a pointer into the object table.

Apart from TABLE being associated with heap compaction/fragmentation
issues, could you elaborate. To me it seems like any node which has
more than one referrer, referers to it through a handle in the table.
What of just one referrer and the extra bool? How is in table
detected? How are circular references handled or avoided? (by a handle
of course, but...) How is self reference handled or avoided? If I
understand you it's about kind of a join node inserted transparently
agregated in the table with all the other join nodes, and including a
referer count and a node class indication. So that forces some kind of
count and class per node rather than per structure. So more than 2
machine words per node?

Cheers Jacko