#include "gnunet-service-fs.h"
+/**
+ * Maximum number of outgoing messages we queue per peer.
+ *
+ * Performance measurements for 2 peer setup for 50 MB file
+ * (with MAX_DATASTORE_QUEUE = 1 and RETRY_PROBABILITY_INV = 1):
+ *
+ * 2: 1700 kb/s, 1372 kb/s
+ * 8: 2117 kb/s, 1284 kb/s, 1112 kb/s
+ * 16: 3500 kb/s, 3200 kb/s, 3388 kb/s
+ * 32: 3441 kb/s, 3163 kb/s, 3277 kb/s
+ * 128: 1700 kb/s; 2010 kb/s, 3383 kb/s, 1156 kb/s
+ *
+ * Conclusion: 16 seems to be a pretty good value (stable
+ * and high performance, no excessive memory use).
+ */
+#define MAX_QUEUE_PER_PEER 16
+
+/**
+ * Length of the P2P success tracker. Note that having a very long
+ * list can also hurt performance.
+ */
+#define P2P_SUCCESS_LIST_SIZE 8
+
+/**
+ * Length of the CS-2-P success tracker. Note that
+ * having a very long list can also hurt performance.
+ */
+#define CS2P_SUCCESS_LIST_SIZE 8
+
+
/**
* Performance data kept for a peer.
*/
/**
* Transport performance data.
*/
- struct GNUNET_TRANSPORT_ATS_Information *atsi;
+ struct GNUNET_ATS_Information *atsi;
/**
* List of the last clients for which this peer successfully
*/
struct GNUNET_TIME_Relative avg_reply_delay;
+ /**
+ * If we get content we already have from this peer, for how
+ * long do we block him? Adjusted based on the fraction of
+ * redundant data we receive, between 1s and 1h.
+ */
+ struct GNUNET_TIME_Relative migration_delay;
+
/**
* Point in time until which this peer does not want us to migrate content
* to it.
*/
unsigned int pending_replies;
- /**
- * How many of the last blocks from migration were duplicates?
- */
- unsigned int migration_duplication;
};
*
* @param peer identity of peer that connected
* @param atsi performance data for the connection
+ * @param atsi_count number of records in 'atsi'
* @return handle to connected peer entry
*/
struct GSF_ConnectedPeer *
GSF_peer_connect_handler_ (const struct GNUNET_PeerIdentity *peer,
- const struct GNUNET_TRANSPORT_ATS_Information *atsi);
+ const struct GNUNET_ATS_Information *atsi,
+ unsigned int atsi_count);
/**
* for loopback messages where we are both sender and receiver)
* @param message the actual message
* @param atsi performance information
+ * @param atsi_count number of records in 'atsi'
* @return GNUNET_OK to keep the connection open,
* GNUNET_SYSERR to close it (signal serious error)
*/
GSF_handle_p2p_migration_stop_ (void *cls,
const struct GNUNET_PeerIdentity *other,
const struct GNUNET_MessageHeader *message,
- const struct GNUNET_TRANSPORT_ATS_Information
- *atsi);
+ const struct GNUNET_ATS_Information *atsi,
+ unsigned int atsi_count);
/**
*/
void
GSF_block_peer_migration_ (struct GSF_ConnectedPeer *cp,
- struct GNUNET_TIME_Relative block_time);
+ struct GNUNET_TIME_Absolute block_time);
/**