diff --git a/include/libtorrent/peer_connection.hpp b/include/libtorrent/peer_connection.hpp index 73d786246..381997ce2 100644 --- a/include/libtorrent/peer_connection.hpp +++ b/include/libtorrent/peer_connection.hpp @@ -870,7 +870,8 @@ namespace libtorrent bitfield m_have_piece; // the queue of requests we have got - // from this peer + // from this peer that haven't been issued + // to the disk thread yet std::vector m_requests; // the blocks we have reserved in the piece diff --git a/parse_session_stats.py b/parse_session_stats.py index 818d132fd..5acc32f2e 100755 --- a/parse_session_stats.py +++ b/parse_session_stats.py @@ -138,6 +138,7 @@ reports = [ ('peer_errors_incoming', 'num', '', 'number of peers by incoming or outgoing connection', ['error incoming peers', 'error outgoing peers']), ('peer_errors_transport', 'num', '', 'number of peers by transport protocol', ['error tcp peers', 'error utp peers']), ('peer_errors_encryption', 'num', '', 'number of peers by encryption level', ['error encrypted peers', 'error rc4 peers', 'error peers']), + ('incoming requests', 'num', '', 'incoming 16kiB block requests', ['pending incoming block requests', 'average pending incoming block requests']), ('waste', '% of all downloaded bytes', '%%', 'proportion of all downloaded bytes that were wasted', ['% failed payload bytes', '% wasted payload bytes', '% protocol bytes']), ('waste by source', '% of all wasted bytes', '%%', 'what\' causing the waste', [ 'redundant timed-out', 'redundant cancelled', 'redundant unknown', 'redundant seed', 'redundant end-game', 'redundant closing']), ('average_disk_time_absolute', 'job time', 's', 'running averages of timings of disk operations', ['disk read time', 'disk write time', 'disk hash time', 'disk job time', 'disk sort time']), diff --git a/src/session_impl.cpp b/src/session_impl.cpp index d0e57454c..0086cfa96 100644 --- a/src/session_impl.cpp +++ b/src/session_impl.cpp @@ -1260,6 +1260,8 @@ namespace aux { ":error utp peers" ":total peers" + ":pending incoming block requests" + ":average pending incoming block requests" "\n\n", m_stats_logger); } #endif @@ -3647,6 +3649,7 @@ namespace aux { int peers_up_unchoked = 0; int num_end_game_peers = 0; int reading_bytes = 0; + int pending_incoming_reqs = 0; for (connection_map::iterator i = m_connections.begin() , end(m_connections.end()); i != end; ++i) { @@ -3667,6 +3670,8 @@ namespace aux { ++peers_up_requests; if (p->endgame()) ++num_end_game_peers; reading_bytes += p->num_reading_bytes(); + + pending_incoming_reqs += int(p->upload_queue().size()); int dl_bucket = 0; int dl_rate = p->statistics().download_payload_rate(); @@ -3929,6 +3934,8 @@ namespace aux { STAT_LOG(d, m_error_utp_peers); STAT_LOG(d, int(m_connections.size())); + STAT_LOG(d, pending_incoming_reqs); + STAT_LOG(f, num_complete_connections == 0 ? 0.f : (float(pending_incoming_reqs) / num_complete_connections)); fprintf(m_stats_logger, "\n");