Package org.klomp.snark
Class BandwidthManager
java.lang.Object
org.klomp.snark.BandwidthManager
- All Implemented Interfaces:
BandwidthListener
Bandwidth and bandwidth limits
Maintain three bandwidth estimators:
Sent, received, and requested.
There are three layers of BandwidthListeners:
BandwidthManager (total) PeerCoordinator (per-torrent) Peer/WebPeer (per-connection)Here at the top, we use SyntheticRedQueues for accurate and current moving averages of up, down, and requested bandwidth. At the lower layers, simple weighted moving averages of three buckets of 40 seconds each (2 minutes total) are used for up and down, and requested is delegated here. The lower layers must report to the next-higher layer. At the Peer layer, we report inbound piece data per-read, not per-piece, to get a smoother inbound estimate. Only the following data are counted by the BandwidthListeners:
- Pieces (both Peer and WebPeer)
- ut_metadata
- Since:
- 0.9.62
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
downloaded
(int size) We received this many byteslong
Current limit in BPSlong
The average rate in Bps(package private) long
The average rate in Bpslong
Current limit in BPSlong
The average rate in Bpsboolean
Are we currently over the limit?boolean
Are we currently over the limit?(package private) void
setDownBWLimit
(long downLimit) Current limit in Bps(package private) void
setUpBWLimit
(long upLimit) Current limit in Bpsboolean
shouldRequest
(Peer peer, int size) Should we request this many bytes?boolean
shouldSend
(int size) Should we send this many bytes? Do NOT call uploaded() if this returns true.toString()
In HTML for debug pagevoid
uploaded
(int size) We unconditionally sent this many bytes
-
Constructor Details
-
BandwidthManager
BandwidthManager(I2PAppContext ctx, int upLimit, int downLimit)
-
-
Method Details
-
setUpBWLimit
void setUpBWLimit(long upLimit) Current limit in Bps -
setDownBWLimit
void setDownBWLimit(long downLimit) Current limit in Bps -
getRequestRate
long getRequestRate()The average rate in Bps -
getUploadRate
public long getUploadRate()The average rate in Bps- Specified by:
getUploadRate
in interfaceBandwidthListener
-
getDownloadRate
public long getDownloadRate()The average rate in Bps- Specified by:
getDownloadRate
in interfaceBandwidthListener
-
uploaded
public void uploaded(int size) We unconditionally sent this many bytes- Specified by:
uploaded
in interfaceBandwidthListener
-
downloaded
public void downloaded(int size) We received this many bytes- Specified by:
downloaded
in interfaceBandwidthListener
-
shouldSend
public boolean shouldSend(int size) Should we send this many bytes? Do NOT call uploaded() if this returns true.- Specified by:
shouldSend
in interfaceBandwidthListener
-
shouldRequest
Should we request this many bytes?- Specified by:
shouldRequest
in interfaceBandwidthListener
- Parameters:
peer
- ignored
-
getUpBWLimit
public long getUpBWLimit()Current limit in BPS- Specified by:
getUpBWLimit
in interfaceBandwidthListener
-
getDownBWLimit
public long getDownBWLimit()Current limit in BPS- Specified by:
getDownBWLimit
in interfaceBandwidthListener
-
overUpBWLimit
public boolean overUpBWLimit()Are we currently over the limit?- Specified by:
overUpBWLimit
in interfaceBandwidthListener
-
overDownBWLimit
public boolean overDownBWLimit()Are we currently over the limit?- Specified by:
overDownBWLimit
in interfaceBandwidthListener
-
toString
In HTML for debug page
-