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> 2009-11-18 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Check socket for reading if there are outstanding requests. 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 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_ #endif // _D_BT_CONSTANTS_

View File

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

View File

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