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 -

-Full instructions are posted at -www.i2p2.i2p/upgrade-0.6.1.30.html. +2008-02-05: Upgrading from 0.6.1.30 and Earlier Releases