On Thu, Mar 29, 2007 at 07:29:35AM -0700, Ken Taylor wrote:

> This seems like a very good optimization, given how string-heavy the system
> is. Could string tables also be used to compress COD files more? How about
> network optimization by having two sites "share" a string table (or have a
> static standard string table of commonly used strings in the "core"
> protocol?). Also ... are properties stored as strings at the moment or as
> native bytes (I actually don't know this)? If they're stored as strings,
> compressing them to native data structures would probably be a big win too
> (same thing goes for properties with storing them in COD and sending them
> over the network).

Presently there is support for having COD files gzipped by default, 
which helps a bit.  The COD file format will need to be reworked to take 
advantage of s5 features anyhow.

Properties are presently stored as strings, but in s5 will be stored in 
the native binary encoding.  This is a major change since it requires 
that we define the set of primitive types that VOS will support.  
Indeed, this ties in directly with a general overhaul of the type system 
that I'm going to propose when I write about scripting.

> [I also had another idea related to network optimization -- which is
> unrelated to memory footprint. The idea is particularly for large worlds
> with lots of objects to listen to: instead of listening update messages
> sending the whole message string and object identification, etc, have an
> "optimized listen" protocol, where a chosen-at-runtime "tag" is used to
> identify a certain kind of update message coming from a specific object, and
> that's all you need to have in the network traffic (other than the actual
> updated values, of course). This could even be done transparently at the
> network interface level]

I think what you're describing is essentially packet compression by 
creating a dictionary during the session mapping short identifiers to 
common packet headers.

A separate problem with updates at the moment comes from the fact that 
the client presently has to subscribe to each vobject individually, 
which is one source of memory overhead since this is often redundant.  
I've been mulling over ways of subscribing to changes in a subtree of 
vobjects without having to communicate with each one separately.

> Could this also be extended to support persistant transparent caching of
> remote sites that have been visited? Perhaps paired with a new method to
> query certain information about vobjects, such as is-cacheable and
> last-updated/version?

Yes!  I'm glad you mentioned caching, because that is another thing that 
is sorely lacking in s4 and needs to be designed for in s5.

> Sounds reasonable... What reasons (other than asthetics/symmetry) are there
> for properties to be first-class? Will a property object ever have children?
> Will one ever be at site root with no other parent? Will one ever be a
> meta-object other than "property"? I guess you could have two parents
> sharing the same property if it's a big one ...

Well, so you can share properties, and originally (in s3/s4) so we could 
have special properties like the file property (its value was bound to 
the contents of a particular file on disk) and extrapolated property 
(the property included velocity/acceleration, used for client-side 
movement prediction).  It is a like like the notion of "boxed objects" 
in some object oriented languages like Java, C# and Ruby, where a 
primitive value like an integer is treated like a first class object 
which allows you to assign it to System.Object type references.

> > Other strategies to make memory management easier will include a greater
> > emphasis on copying semantics when the amount of memory involved is
> > small.  This avoids having to maintain reference counts, and we can keep
> > simple data structures on the stack (and in L1 cache?) to avoid
> > potentially expensive calls to the heap allocator.
> 
> I don't think I understand this one....

Memory management is exceedingly difficult in C and C++, since if a data 
structure has multiple pointers going to it can be difficult to 
determine when it is appropriate to free() it.  Concurrency makes this 
even worse, since you could have a thread still accessing that structure 
while it is being free()ed.  Smart pointers and reference counts can 
help a lot, but they can be incredibly difficult to debug.  For s5 I 
want minimize the amount of shared state (which I'll talk about in the 
next email about concurrency) and one way to do that is when copying 
data to someone else, to pass a copy rather than a reference.

Another related technique will be the use of opaque identifiers rather 
than pointers where possible, so that if a vobject is freed in the 
background (or alternately, the object is swapped out) we don't 
dereference an invalid pointer.

> Scalability is going to be hugely important if vos is ever going to support
> a world-wide metaverse with large, interactive worlds. I'm glad you guys are
> going to be focusing on the issue from the ground up.

My goal for s5 is to be able to support one million vobjects on a single 
site, on reasonable hardware.  We'll be doing benchmarks.

-- 
[   Peter Amstutz  ][ [EMAIL PROTECTED] ][ [EMAIL PROTECTED] ]
[Lead Programmer][Interreality Project][Virtual Reality for the Internet]
[ VOS: Next Generation Internet Communication][ http://interreality.org ]
[ http://interreality.org/~tetron ][ pgpkey:  pgpkeys.mit.edu  18C21DF7 ]

Attachment: signature.asc
Description: Digital signature

_______________________________________________
vos-d mailing list
vos-d@interreality.org
http://www.interreality.org/cgi-bin/mailman/listinfo/vos-d

Reply via email to