2009-11-18 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

Changed the strategry of how to increase the number of outstanding
	requests. Now the number is doubled if there are no outstanding
	requests after receiving messages.
	* src/BtConstants.h
	* src/DefaultBtInteractive.cc
	* src/DefaultBtInteractive.h
pull/1/head
Tatsuhiro Tsujikawa 2009-11-18 12:22:03 +00:00
parent 2f6e22f1aa
commit 6d73ca229f
4 changed files with 28 additions and 14 deletions

View File

@ -1,3 +1,12 @@
2009-11-18 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Changed the strategry of how to increase the number of outstanding
requests. Now the number is doubled if there are no outstanding
requests after receiving messages.
* src/BtConstants.h
* src/DefaultBtInteractive.cc
* src/DefaultBtInteractive.h
2009-11-18 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Check socket for reading if there are outstanding requests.

View File

@ -53,4 +53,9 @@ typedef std::map<std::string, uint8_t> Extensions;
#define MAX_BLOCK_LENGTH (16*1024)
#define DEFAULT_MAX_OUTSTANDING_REQUEST 6
// Upper Bound of the number of outstanding request
#define UB_MAX_OUTSTANDING_REQUEST 24
#endif // _D_BT_CONSTANTS_

View File

@ -83,7 +83,8 @@ DefaultBtInteractive::DefaultBtInteractive
keepAliveInterval(120),
_utPexEnabled(false),
_dhtEnabled(false),
_numReceivedMessage(0)
_numReceivedMessage(0),
_maxOutstandingRequest(DEFAULT_MAX_OUTSTANDING_REQUEST)
{}
DefaultBtInteractive::~DefaultBtInteractive() {}
@ -241,6 +242,7 @@ void DefaultBtInteractive::sendKeepAlive() {
}
size_t DefaultBtInteractive::receiveMessages() {
size_t countOldOutstandingRequest = dispatcher->countOutstandingRequest();
size_t msgcount = 0;
for(int i = 0; i < 50; ++i) {
if(_requestGroupMan->doesOverallDownloadSpeedExceed() ||
@ -279,6 +281,11 @@ size_t DefaultBtInteractive::receiveMessages() {
break;
}
}
if(countOldOutstandingRequest > 0 &&
dispatcher->countOutstandingRequest() == 0){
_maxOutstandingRequest = std::min((size_t)UB_MAX_OUTSTANDING_REQUEST,
_maxOutstandingRequest*2);
}
return msgcount;
}
@ -338,23 +345,14 @@ void DefaultBtInteractive::fillPiece(size_t maxMissingBlock) {
}
void DefaultBtInteractive::addRequests() {
size_t MAX_PENDING_REQUEST;
if(peer->getLatency() < 500) {
MAX_PENDING_REQUEST = 24;
} else if(peer->getLatency() < 1500) {
MAX_PENDING_REQUEST = 12;
} else {
MAX_PENDING_REQUEST = 6;
}
fillPiece(MAX_PENDING_REQUEST);
fillPiece(_maxOutstandingRequest);
size_t reqNumToCreate =
MAX_PENDING_REQUEST <= dispatcher->countOutstandingRequest() ?
0 : MAX_PENDING_REQUEST-dispatcher->countOutstandingRequest();
_maxOutstandingRequest <= dispatcher->countOutstandingRequest() ?
0 : _maxOutstandingRequest-dispatcher->countOutstandingRequest();
if(reqNumToCreate > 0) {
BtMessages requests;
if(_pieceStorage->isEndGame()) {
btRequestFactory->createRequestMessagesOnEndGame(requests, reqNumToCreate);
btRequestFactory->createRequestMessagesOnEndGame(requests,reqNumToCreate);
} else {
btRequestFactory->createRequestMessages(requests, reqNumToCreate);
}

View File

@ -132,6 +132,8 @@ private:
size_t _numReceivedMessage;
size_t _maxOutstandingRequest;
WeakHandle<RequestGroupMan> _requestGroupMan;
static const time_t FLOODING_CHECK_INTERVAL = 5;