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>
|
||||
|
||||
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 DEFAULT_MAX_OUTSTANDING_REQUEST 6
|
||||
|
||||
// Upper Bound of the number of outstanding request
|
||||
#define UB_MAX_OUTSTANDING_REQUEST 24
|
||||
|
||||
#endif // _D_BT_CONSTANTS_
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -132,6 +132,8 @@ private:
|
|||
|
||||
size_t _numReceivedMessage;
|
||||
|
||||
size_t _maxOutstandingRequest;
|
||||
|
||||
WeakHandle<RequestGroupMan> _requestGroupMan;
|
||||
|
||||
static const time_t FLOODING_CHECK_INTERVAL = 5;
|
||||
|
|
Loading…
Reference in New Issue