From bc5d87e6f0de350546f03b79ace8e8545a6d7466 Mon Sep 17 00:00:00 2001
From: zzz
Date: Mon, 12 May 2008 13:53:11 +0000
Subject: [PATCH] * i2psnark: - Randomize the PeerCheckerTask start
times to make global limiting work better - Calculate bw limits
using 40s rather than 4m averages to make bw limiting work better
- Change default bw limit from uplimit/3 to uplimit/2 due to
overhead reduction from the leaseset bundling change
---
.../src/org/klomp/snark/PeerCoordinator.java | 14 ++++++++++++-
.../java/src/org/klomp/snark/Snark.java | 3 ++-
.../src/org/klomp/snark/SnarkManager.java | 2 +-
.../org/klomp/snark/web/I2PSnarkServlet.java | 2 +-
history.txt | 21 +++++++++++++++++++
news.xml | 5 +----
.../src/net/i2p/router/RouterVersion.java | 2 +-
7 files changed, 40 insertions(+), 9 deletions(-)
diff --git a/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java b/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java
index ae74bfd607..8efd2332bc 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java
@@ -87,7 +87,10 @@ public class PeerCoordinator implements PeerListener
setWantedPieces();
// Install a timer to check the uploaders.
- timer.schedule(new PeerCheckerTask(this), CHECK_PERIOD, CHECK_PERIOD);
+ // Randomize the first start time so multiple tasks are spread out,
+ // this will help the behavior with global limits
+ Random r = new Random();
+ timer.schedule(new PeerCheckerTask(this), (CHECK_PERIOD / 2) + r.nextInt((int) CHECK_PERIOD), CHECK_PERIOD);
}
// only called externally from Storage after the double-check fails
@@ -192,6 +195,15 @@ public class PeerCoordinator implements PeerListener
return getRate(uploaded_old);
}
+ public long getCurrentUploadRate()
+ {
+ // no need to synchronize, only one value
+ long r = uploaded_old[0];
+ if (r <= 0)
+ return 0;
+ return (r * 1000) / CHECK_PERIOD;
+ }
+
private long getRate(long array[])
{
long rate = 0;
diff --git a/apps/i2psnark/java/src/org/klomp/snark/Snark.java b/apps/i2psnark/java/src/org/klomp/snark/Snark.java
index 07d2dbd875..f0fd66eaf0 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/Snark.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/Snark.java
@@ -785,9 +785,10 @@ public class Snark
for (Iterator iter = coordinators.iterator(); iter.hasNext(); ) {
PeerCoordinator c = (PeerCoordinator)iter.next();
if (!c.halted())
- total += c.getUploadRate();
+ total += c.getCurrentUploadRate();
}
long limit = 1024l * I2PSnarkUtil.instance().getMaxUpBW();
+ Snark.debug("Total up bw: " + total + " Limit: " + limit, Snark.WARNING);
return total > limit;
}
}
diff --git a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java
index 30b51aad74..5594052773 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java
@@ -119,7 +119,7 @@ public class SnarkManager implements Snark.CompleteListener {
_config.setProperty(PROP_UPLOADERS_TOTAL, "" + Snark.MAX_TOTAL_UPLOADERS);
if (!_config.containsKey(PROP_UPBW_MAX)) {
if (_context instanceof RouterContext)
- _config.setProperty(PROP_UPBW_MAX, "" + (((RouterContext)_context).bandwidthLimiter().getOutboundKBytesPerSecond() / 3));
+ _config.setProperty(PROP_UPBW_MAX, "" + (((RouterContext)_context).bandwidthLimiter().getOutboundKBytesPerSecond() / 2));
else
_config.setProperty(PROP_UPBW_MAX, "" + DEFAULT_MAX_UP_BW);
}
diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
index 484edf0854..31592877fd 100644
--- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
+++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
@@ -703,7 +703,7 @@ public class I2PSnarkServlet extends HttpServlet {
out.write("Total uploader limit: peers \n");
out.write("Up bandwidth limit: KBps (Router Up BW / 3 recommended) \n");
+ + I2PSnarkUtil.instance().getMaxUpBW() + "\" size=\"3\" maxlength=\"3\" /> KBps (Router Up BW / 2 recommended) \n");
out.write("Use open trackers also:
-2008-02-05: Upgrading from 0.6.1.30 and Earlier Releases
-