Hi

One more issue: Have you contributed any code to Freenet? What is your SVN
username if so? It is our policy that nobody will be accepted for a SoC
project unless they prove their coding ability first.

I have never contributed to Freenet but I have experiences to work with
simulators and my level of Java is good enough to write code (I have worked
with Drools, Jade, ...). In any case, I believe that to me could be a good
and positive experience to work in a P2P project. I expect that it will not
be a problem.


On 4/7/09, Matthew Toseland <t...@amphibian.dyndns.org> wrote:
>
> On Thursday 02 April 2009 23:29:06 David Cabanillas wrote:
> > >Yes. Simulations of load management would be very welcome. You should
> > investigate the existing simulators (particularly the event-based ones),
> > which are in the SVN repository, I am hopeful that they can be adapted
> > without massive effort. You will need to more or less reproduce the
> current
> > load management system (AIMDs on the originator based on timeouts and
> > rejections, plus backoff to deal with individual slow peers, documented
> on
> > the wiki), and then simulate various proposals from the mailing lists for
> > new
> > systems.
> >
> > Reviewing the SN repository I found
> > http://freenet.googlecode.com/svn/trunk/apps/load-balancing-sims/ from
> >
> phase1<
> http://freenet.googlecode.com/svn/trunk/apps/load-balancing-sims/phase1/
> >to
> > phase7. Are you talking about this simulations?
> >
> >
> >    - Simulations from phase1 to phase4 are only working with 3 nodes. In
> 6
> >    and 7 at least they are working with 100 nodes.
> >    - The simulation 4 introduces the AIMD algorithm (Peer.java).
>
> On a per-link level, i.e. congestion control. Not on a global load limiting
> level. We use both: nodes use AIMD to decide how much data to send to their
> peers (estimating the capacity of the connection, like TCP does), and they
> also use a separate AIMD to estimate the capacity of the entire network,
> and
> thus determine how fast to start their own queued requests.
>
> >    - In any simulation I have observed backoff process but we can
> consider
> >    that backoff is useful or it is necessary to assure by means of
> simulations
> >    that it is useful.
>
> My recollection is these simulations are fairly low level, mostly used to
> validate the node to node congestion control algorithms. IMHO the real
> challenge is in load management, which is about how load is managed at the
> level of the network as a whole. Currently, the main mechanisms are:
>
> Preemptive request rejection:
>
> Nodes estimate their capacity, based mostly on bandwidth, and reject any
> requests they don't think they have the ability to service.
>
> Purpose: Don't accept so many requests that they end up timing out because
> we
> can't complete them all in a reasonable time.
>
> Code: NodeStats.java, shouldRejectRequest, output bandwidth liability is
> the
> main mechanism here.
>
> Backoff:
> When a request times out, or a node rejects a request preemptively to
> prevent
> itself getting overloaded, we backoff from the node for a period. This
> starts
> at 1 second, and is doubled every time we get another timeout or rejection,
> to a maximum of 3 hours but it is reset back to 1 second when a request
> completes without getting a timeout or a rejection, but the actual backoff
> time is randomized between 0 and this value. There is also a separate
> backoff
> for transfer timeouts, which starts at 30 seconds. When a node is backed
> off,
> we only route to it as a last resort; we route to non-backed-off nodes
> first.
>
> Purpose: Avoid sending requests to nodes that are overloaded or very slow.
> Interacts with the next mechanism to prevent slow nodes from dragging down
> the overall capacity of the network.
>
> AIMD load limiting:
> A Freenet node has an AIMD used to estimate the total capacity of the
> network,
> based on round trip times for each type of request, and on how many
> requests
> timeout or are rejected (by any node on the request chain, because we
> forward
> the rejections back to the source, flagged as non-local so they don't break
> the request).
>
> Purpose: Propagate load back to the original requestor, get him to slow
> down.
>
> If I remember correctly, these simulations are rather low level, more
> oriented
> to simulating the exchange of packets between nodes: congestion control,
> not
> load management. There were some other simulations more recently that might
> be more suitable, although you might want to try both; having said that,
> there may be easy ways to strip out unnecessary detail e.g. by treating
> data
> transfers as single 32KB packets.
>
>
> It should be possible to adapt the low-level simulations to model load
> management; it might simulate too much of the low level detail and thus not
> be fast enough, but alternatively it may be that the low level detail
> matters
> more than I expect... The other option is simsalabim, a recent simulator by
> vive. In any case, we need a simulator to model the load on and limited
> capacity of each node on the network; bandwidth is generally the scarce
> resource, so focus on that. As a first and very useful milestone, we need
> simulations of the above mechanisms, to sanity check the simulations and
> the
> systems we have deployed.
>
> Lots more things that can be simulated (but I'm not saying you must
> implement
> all of these!):
> - Turning backoff on and off, given different distributions of node
> capacities: how much difference does it make?
> - Turtles. This was implemented recently, when a request takes over 1
> minute
> to download the data the node closest to it will cancel the request
> downstream, download the data for itself, and then offer it to the
> downstream
> nodes. In practice it seems to have increased bandwidth usage considerably
> on
> nodes with fast connections.
> - Bulk vs realtime requests flag. It would be useful to simulate this
> before
> we implement this.
> - Various proposed new load management schemes such as token passing. The
> basic principle of token passing is that we tell our peers when we have the
> capacity for new requests, and then accept some of their requests; when we
> have accepted the requests, they are queued until we can either serve them
> from the datastore or from the results of another request, or we can
> forward
> them to one of our peers that says it can accept some requests. As I have
> mentioned there are many details that can be tweaked...
> - Whether queueing requests (probably only bulk requests) is useful in
> general.
> - Attack simulations: how do different schemes react to flooding, for
> example?
> - Opennet and connection churn: Simulate how new connections are added on
> opennet, how nodes are bootstrapped onto the network, evaluate the effects
> of
> nodes joining and then leaving, or of nodes having low uptimes. (I think
> the
> existing simulations are mostly darknet).
> - Shared datastore Bloom filters and encrypted tunnels: It would be
> interesting to simulate these two 0.9 features, although we will implement
> them regardless. The former allows darknet nodes (and possibly opennet
> nodes)
> to know what is in their peers' datastores, the latter sends out multiple
> (partially) random routed anchors which rendezvous and create a tunnel so
> that requests don't start close to the node starting them. We are hoping
> that
> these two features will more or less balance out, but we have no idea
> without
> simulations. Having said that, these are probably very dependant on file
> popularity patterns (i.e. the Zipf parameter).
>
> I don't expect you to implement everything I've mentioned above! Getting a
> good simulation of the current model working is essential, particularly as
> it
> relates to load management. I'm not sure exactly how far
> load-balancing-sims
> went, mailing list traffic suggests phase 7 implements most of the current
> model, but I think preemptive rejection is missing, and IMHO that's a
> critical component of the current architecture. One thing to note is that
> vive has tried some interesting routing changes out without copying the
> code
> first, so you might need to turn them off. Simulating token passing would
> then be the next big thing, although as I mentioned there are a great many
> variations, most of which are in the mailing list archives; we would need
> to
> dig through the archives to find them.
>
> I haven't personally written any simulations, the people to talk to if you
> need to discuss things in detail are:
> - vive at freenetproject.org, who has done most recent work
> - mrogers at freenetproject.org, who wrote the load balancing simulations
> originally
> >
> > The proposals for extend the simulations are as follows:
> >
> >    - To extend the simulations phases in large scale.
> >    - To compare simulations using and not using backoff.
>
> See here for mrogers' results from phase7 (these don't include preemptive
> rejection):
> http://archives.freenetproject.org/message/20061122.001144.52dbb09d.en.html
>
> >    - To apply peer-peer token buckets to track fairness between accepting
> >    requests from different peers,
>
> One more issue: Have you contributed any code to Freenet? What is your SVN
> username if so? It is our policy that nobody will be accepted for a SoC
> project unless they prove their coding ability first.
>
>


-- 
bye
--david
_______________________________________________
Devl mailing list
Devl@freenetproject.org
http://emu.freenetproject.org/cgi-bin/mailman/listinfo/devl

Reply via email to