[Spread-users] Multipath Spread

Marc Zyngier Marc.Zyngier at evidian.com
Fri Oct 5 05:26:28 EDT 2001

>>>>> "Yair" == Yair Amir <yairamir at cnds.jhu.edu> writes:

Yair> So, can you define that? I am sure other people would also be
Yair> interested in commenting on this semantics and maybe together we
Yair> could come up with something that is general yet accurate.

The current semantics are quite simple. Every message is sent on every
possible path. There is a simple reason to do this. If you want to go
the "one default path, many alternative paths" way, you immediatly
face the following question :

How to detect, with a low latency, that a given link is down, and thus
that traffic should be moved to another link ?

To do that, you need to introduce some sort of a heartbeat, and ensure
that every node take the same decision the same time. For the sake of
keeping all of this as simple as possible, we decided, at least for
the time being, to avoid the problem by replicating all messages all
all networks. Main drawbacks are network usage, and that Spread has to
drop all duplicate messages. Should be ok if load is low enough.

What we could do is to have a per network flag, indicating that this
network is active or not, as well as an internal API to set/reset this
flag. This would leave enough flexibility to implement whatever
semantics you want on the top of that, I think.

Yair> I have some architectural comments: the data link layer
Yair> (data_link.[ch]) is something that should be kept, in my
Yair> opinion, as the lowest (and only) place where the real network
Yair> is touched. This is very useful for maintaining portability.  A
Yair> multipath capability seems to me at first glance something that
Yair> should be up, probably at the network level (network.[ch]),
Yair> probably even integrated with it, as opposed to something which
Yair> resides below the data link level.

I do agree with that the fact that datalink.[ch] sould not be
impacted. Multipath is conceptualy some sort of a router between
network.[ch] (which have a strong relationship with the Spread
protocol itself) and the data link layer. What do you think of
network.c calling a MP_send function, which would in turn issue
multiple calls to DL_send ?

Yair> Also, I like the way you specify the capability in the
Yair> file. (maybe we can even save the inner most {} ? )

Yep, you're right. Will fix that too.

Yair> Again, let me commend you and thank you for your efforts. Lets
Yair> continue to investigate this capability. (If you really need
Yair> this to work quick-and-dirty and you have a small bug, we could
Yair> invest a small amount of time looking into it with you but that
Yair> is very different from including it in our version of Spread.)

While I enjoy doing quick and dirty things, this is not just a hack
made to fit a specific application. I'd prefer to work with every
people interested in this capability, and see it being a part of

Thanks a lot for your feedback.

Marc Zyngier
Evidian - SafeKit Project
And don't forget you'll never get a dog to walk upright
Just 'cause you've got the power, that don't mean you've got the right.

More information about the Spread-users mailing list