mirror of https://github.com/aria2/aria2
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.hpull/1/head
parent
2f6e22f1aa
commit
6d73ca229f
|
@ -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.
|
||||||
|
|
|
@ -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_
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Reference in New Issue