I just checked in a little servlet that displays the status of the node's 
node references.  The class file is Freenet/client/http/NodeStatusServlet.

You can run it by adding the following lines to your freenet.conf/ini file. 

nodestatus.class=Freenet.client.http.NodeStatusServlet
nodestatus.port=8889
# Make sure nodestatus is listed in the services line.
# e.g.:
services=fproxy,nodestatus

It looks like the current CP decay scheme is too harsh.   Nodes that don't 
answer most connection requests are quickly lost as their CP falls.  The 
problem is that most nodes don't answer most requests because of the amount 
of traffic on the network.  The only nodes that survive are a few "ubernodes" 
which must have really good connectivity / CPU power. 

I have been playing with the contact probability decay on my local node for 
the last several days.  I get reliable routing to many more nodes if I make 
the following changes:

0) Change the CP decay
// Punish gently in TreeRoutingTable.decreaseContactProbability
node.contactProbability = 
(float)(((9.0 * node.contactProbability) /* + 0.0*/) / 10.0);

instead of

node.contactProbability *= 0.5;

// Reward generously in TreeRoutingTable.increaseContactProbability
node.contactProbability = 
(float)(((4.0 * node.contactProbability) + 1.0) / 5.0);

instead of 

node.contactProbability = 
(float) Math.min(1.0, 0.2 + node.contactProbability);

1) Fix the CP failure recovery code in TreeRoutingTable.RouteWalker.step to 
retry skipped nodes in routing order instead of by maximum CP.

Look at the diffs here if you want to see the changes I tested:
http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/freenet/Freenet/node/store/TreeRoutingTable.java.diff?r1=1.5&r2=1.6

The downside of these changes is that they can make routing somewhat slower.  
Though it's debatable whether you can call what's going on now routing at all.

I didn't just check in these changes, because there are CPU usage issues with 
the CP failure recovery code in the degenerate case where most of the nodes 
are driven to low CP's. 

I think the right thing to do is just to move the CP recovery code in 
TreeRoutingTable.RouteWalker.step into a separate thread that periodically 
tries to connect to low CP nodes. 

Thoughts?

--gj


-- 
Freesites
(0.3) freenet:MSK at SSK@enI8YFo3gj8UVh-Au0HpKMftf6QQAgE/homepage//
(0.4) freenet:SSK at npfV5XQijFkF6sXZvuO0o~kG4wEPAgM/homepage//

_______________________________________________
Devl mailing list
Devl at freenetproject.org
http://lists.freenetproject.org/mailman/listinfo/devl

Reply via email to