Author: toad
Date: 2008-04-22 14:31:10 +0000 (Tue, 22 Apr 2008)
New Revision: 19497
Modified:
trunk/freenet/src/freenet/node/NodeStats.java
Log:
Take into account whether a request is local or remote in bandwidth liability
limiting in shouldRejectRequest().
Should improve bandwidth usage and therefore performance.
Modified: trunk/freenet/src/freenet/node/NodeStats.java
===================================================================
--- trunk/freenet/src/freenet/node/NodeStats.java 2008-04-22 13:55:40 UTC
(rev 19496)
+++ trunk/freenet/src/freenet/node/NodeStats.java 2008-04-22 14:31:10 UTC
(rev 19497)
@@ -469,20 +469,32 @@
// when one of either type completes, we can accept one of
either type again: We never let SSKs drain the
// "bucket" and block CHKs.
- int numCHKRequests = node.getNumCHKRequests() + 1;
- int numSSKRequests = node.getNumSSKRequests() + 1;
- int numCHKInserts = node.getNumCHKInserts() + 1;
- int numSSKInserts = node.getNumSSKInserts() + 1;
+ int numLocalCHKRequests = node.getNumLocalCHKRequests() + 1;
+ int numLocalSSKRequests = node.getNumLocalSSKRequests() + 1;
+ int numLocalCHKInserts = node.getNumLocalCHKInserts() + 1;
+ int numLocalSSKInserts = node.getNumLocalSSKInserts() + 1;
+ int numRemoteCHKRequests = node.getNumRemoteCHKRequests() + 1;
+ int numRemoteSSKRequests = node.getNumRemoteSSKRequests() + 1;
+ int numRemoteCHKInserts = node.getNumRemoteCHKInserts() + 1;
+ int numRemoteSSKInserts = node.getNumRemoteSSKInserts() + 1;
int numCHKOfferReplies = node.getNumCHKOfferReplies() + 1;
int numSSKOfferReplies = node.getNumSSKOfferReplies() + 1;
if(logMINOR)
- Logger.minor(this, "Running (adjusted): CHK fetch
"+numCHKRequests+" SSK fetch "+numSSKRequests+" CHK insert "+numCHKInserts+"
SSK insert "+numSSKInserts+" CHK offer replies "+numCHKOfferReplies+" SSK offer
replies "+numSSKOfferReplies);
+ Logger.minor(this, "Running (adjusted): CHK fetch local
"+numLocalCHKRequests+" remote "+numRemoteCHKRequests+" SSK fetch local
"+numLocalSSKRequests+" remote "+numRemoteSSKRequests+" CHK insert local
"+numLocalCHKInserts+" remote "+numRemoteCHKInserts+" SSK insert local
"+numLocalSSKInserts+" remote "+numRemoteSSKInserts+" CHK offer replies local
"+numCHKOfferReplies+" SSK offer replies "+numSSKOfferReplies);
double bandwidthLiabilityOutput =
- successfulChkFetchBytesSentAverage.currentValue() *
numCHKRequests +
- successfulSskFetchBytesSentAverage.currentValue() *
numSSKRequests +
- successfulChkInsertBytesSentAverage.currentValue() *
numCHKInserts +
- successfulSskInsertBytesSentAverage.currentValue() *
numSSKInserts +
+ successfulChkFetchBytesSentAverage.currentValue() *
numRemoteCHKRequests +
+ // Local requests don't relay data, so use the local
average
+ localChkFetchBytesSentAverage.currentValue() *
numLocalCHKRequests +
+ successfulSskFetchBytesSentAverage.currentValue() *
numRemoteSSKRequests +
+ // Local requests don't relay data, so use the local
average
+ localSskFetchBytesSentAverage.currentValue() *
numRemoteSSKRequests +
+ // Inserts are the same for remote as local for sent
bytes
+ successfulChkInsertBytesSentAverage.currentValue() *
numRemoteCHKInserts +
+ successfulChkInsertBytesSentAverage.currentValue() *
numLocalCHKInserts +
+ // Inserts are the same for remote as local for sent
bytes
+ successfulSskInsertBytesSentAverage.currentValue() *
numRemoteSSKInserts +
+ successfulSskInsertBytesSentAverage.currentValue() *
numLocalSSKInserts +
successfulChkOfferReplyBytesSentAverage.currentValue()
* numCHKOfferReplies +
successfulSskOfferReplyBytesSentAverage.currentValue()
* numSSKOfferReplies;
double outputAvailablePerSecond =
node.getOutputBandwidthLimit() - sentOverheadPerSecond;
@@ -507,10 +519,16 @@
}
double bandwidthLiabilityInput =
- successfulChkFetchBytesReceivedAverage.currentValue() *
numCHKRequests +
- successfulSskFetchBytesReceivedAverage.currentValue() *
numSSKRequests +
- successfulChkInsertBytesReceivedAverage.currentValue()
* numCHKInserts +
- successfulSskInsertBytesReceivedAverage.currentValue()
* numSSKInserts +
+ // For receiving data, local requests are the same as
remote ones
+ successfulChkFetchBytesReceivedAverage.currentValue() *
numRemoteCHKRequests +
+ successfulChkFetchBytesReceivedAverage.currentValue() *
numLocalCHKRequests +
+ successfulSskFetchBytesReceivedAverage.currentValue() *
numRemoteSSKRequests +
+ successfulSskFetchBytesReceivedAverage.currentValue() *
numLocalSSKRequests +
+ // Local inserts don't receive the data to relay, so
use the local variant
+ successfulChkInsertBytesReceivedAverage.currentValue()
* numRemoteCHKInserts +
+ localChkInsertBytesReceivedAverage.currentValue() *
numLocalCHKInserts +
+ successfulSskInsertBytesReceivedAverage.currentValue()
* numRemoteSSKInserts +
+ localSskInsertBytesReceivedAverage.currentValue() *
numLocalSSKInserts +
successfulChkOfferReplyBytesReceivedAverage.currentValue() * numCHKOfferReplies
+
successfulSskOfferReplyBytesReceivedAverage.currentValue() * numSSKOfferReplies;
double bandwidthAvailableInput =