Changes according to experiments from jolavilette:

- set desiredRate of peers to 10MB/s instead of 1MB/s
- maximum number of active chunks per peer is now 20 (that was a serious limiting factor)
- ticks that bring no data are not accounted for in the speed estimate anymore. The data is averaged over all ticks since the previous 
 non zero data chunk -> this brings much more stability to sources and removes lots of oscillation.

The maximum theoretical speed per source peer is therefore 13MB/s (in "Average" DL mode), whereas previously it was 1.3MB/s



git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@6897 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
csoler 2013-11-08 21:23:57 +00:00
parent 3f09bdb0b7
commit 9c4c5da73d
3 changed files with 13 additions and 9 deletions

View File

@ -77,8 +77,8 @@ static const int32_t TIMOUT_CACHE_FILE_TRANSFER = 800 ; // time after which cac
static const int32_t FT_FILECONTROL_QUEUE_ADD_END = 0 ; static const int32_t FT_FILECONTROL_QUEUE_ADD_END = 0 ;
static const int32_t FT_FILECONTROL_QUEUE_ADD_AFTER_CACHE = 1 ; static const int32_t FT_FILECONTROL_QUEUE_ADD_AFTER_CACHE = 1 ;
const uint32_t FT_CNTRL_STANDARD_RATE = 1024 * 1024; const uint32_t FT_CNTRL_STANDARD_RATE = 10 * 1024 * 1024;
const uint32_t FT_CNTRL_SLOW_RATE = 10 * 1024; const uint32_t FT_CNTRL_SLOW_RATE = 100 * 1024;
ftFileControl::ftFileControl() ftFileControl::ftFileControl()
:mTransfer(NULL), mCreator(NULL), :mTransfer(NULL), mCreator(NULL),

View File

@ -10,7 +10,7 @@
******/ ******/
#define CHUNK_MAX_AGE 120 #define CHUNK_MAX_AGE 120
#define MAX_FTCHUNKS_PER_PEER 5 #define MAX_FTCHUNKS_PER_PEER 20
/*********************************************************** /***********************************************************
* *

View File

@ -48,11 +48,11 @@
* *
*/ */
const double FT_TM_MAX_PEER_RATE = 10 * 1024 * 1024; /* 10MB/s */ const double FT_TM_MAX_PEER_RATE = 100 * 1024 * 1024; /* 100MB/s */
const uint32_t FT_TM_MAX_RESETS = 5; const uint32_t FT_TM_MAX_RESETS = 5;
const uint32_t FT_TM_MINIMUM_CHUNK = 1024; /* ie 1Kb / sec */ const uint32_t FT_TM_MINIMUM_CHUNK = 1024; /* ie 1Kb / sec */
const uint32_t FT_TM_RESTART_DOWNLOAD = 20; /* 20 seconds */ const uint32_t FT_TM_RESTART_DOWNLOAD = 20; /* 20 seconds */
const uint32_t FT_TM_DOWNLOAD_TIMEOUT = 20; /* 10 seconds */ const uint32_t FT_TM_DOWNLOAD_TIMEOUT = 10; /* 10 seconds */
const uint32_t FT_TM_CRC_MAP_MAX_WAIT_PER_GIG = 20; /* 20 seconds per gigabyte */ const uint32_t FT_TM_CRC_MAP_MAX_WAIT_PER_GIG = 20; /* 20 seconds per gigabyte */
// const double FT_TM_MAX_INCREASE = 1.00; // const double FT_TM_MAX_INCREASE = 1.00;
@ -898,8 +898,14 @@ bool ftTransferModule::locked_tickPeerTransfer(peerInfo &info)
std::cerr << "locked_tickPeerTransfer() actual rate (before): " << info.actualRate << ", lastTransfers=" << info.lastTransfers << std::endl ; std::cerr << "locked_tickPeerTransfer() actual rate (before): " << info.actualRate << ", lastTransfers=" << info.lastTransfers << std::endl ;
#endif #endif
/* update rate */ /* update rate */
info.actualRate = info.actualRate * 0.75 + 0.25 * info.lastTransfers; std::cerr << mHash<< " - actual rate: " << info.actualRate << " lastTransfers=" << info.lastTransfers << ". AgeReq = " << ageReq << std::endl;
info.lastTransfers = 0;
if(info.lastTransfers > 0 || ageReq > 2)
{
info.actualRate = info.actualRate * 0.75 + 0.25 * info.lastTransfers / (float)ageReq;
info.lastTransfers = 0;
info.lastTS = ts;
}
/**************** /****************
* NOTE: If we continually increase the request rate thus: ... * NOTE: If we continually increase the request rate thus: ...
@ -971,8 +977,6 @@ bool ftTransferModule::locked_tickPeerTransfer(peerInfo &info)
#endif #endif
} }
info.lastTS = ts;
#ifdef FT_DEBUG #ifdef FT_DEBUG
std::cerr << "locked_tickPeerTransfer() desired next_req: " << next_req; std::cerr << "locked_tickPeerTransfer() desired next_req: " << next_req;
std::cerr << std::endl; std::cerr << std::endl;