Browse Source

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
Tatsuhiro Tsujikawa 16 năm trước cách đây
mục cha
commit
6d73ca229f
4 tập tin đã thay đổi với 28 bổ sung14 xóa
  1. 9 0
      ChangeLog
  2. 5 0
      src/BtConstants.h
  3. 12 14
      src/DefaultBtInteractive.cc
  4. 2 0
      src/DefaultBtInteractive.h

+ 9 - 0
ChangeLog

@@ -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.

+ 5 - 0
src/BtConstants.h

@@ -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_

+ 12 - 14
src/DefaultBtInteractive.cc

@@ -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);
     }

+ 2 - 0
src/DefaultBtInteractive.h

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