From 5df4e7edd91927900e09cd850ebdc71f6819eab0 Mon Sep 17 00:00:00 2001 From: Arvid Norberg Date: Mon, 7 Feb 2011 00:51:20 +0000 Subject: [PATCH] added more piece picker stats --- include/libtorrent/aux_/session_impl.hpp | 11 ++++-- parse_session_stats.py | 2 +- src/peer_connection.cpp | 18 ++++++++++ src/policy.cpp | 4 +-- src/session_impl.cpp | 44 +++++++++++++++++++----- 5 files changed, 66 insertions(+), 13 deletions(-) diff --git a/include/libtorrent/aux_/session_impl.hpp b/include/libtorrent/aux_/session_impl.hpp index 4ed07040e..979a58ad2 100644 --- a/include/libtorrent/aux_/session_impl.hpp +++ b/include/libtorrent/aux_/session_impl.hpp @@ -872,9 +872,16 @@ namespace libtorrent int m_connreset_peers; // the number of times the piece picker fell through // to the end-game mode - int m_end_game_piece_picks; - int m_strict_end_game_piece_picks; + int m_end_game_piece_picker_blocks; + int m_strict_end_game_piece_picker_blocks; int m_piece_picker_blocks; + int m_piece_picks; + int m_reject_piece_picks; + int m_unchoke_piece_picks; + int m_incoming_redundant_piece_picks; + int m_incoming_piece_picks; + int m_end_game_piece_picks; + int m_snubbed_piece_picks; #endif // each second tick the timer takes a little diff --git a/parse_session_stats.py b/parse_session_stats.py index e8350f565..f1c9621f5 100755 --- a/parse_session_stats.py +++ b/parse_session_stats.py @@ -56,6 +56,6 @@ gen_report('disk', ['disk write queued bytes', 'disk block buffers']) gen_report('peers_upload', ['peers up interested', 'peers up unchoked', 'peers up requests']) gen_report('peers_download', ['peers down interesting', 'peers down unchoked', 'peers down requests']) gen_report('peer_errors', ['error peers', 'peer disconnects', 'peers eof', 'peers connection reset']) -gen_report('end_game', ['end game piece picks', 'strict end game piece picks', 'valid strict end game piece picks']) +gen_report('piece_picker', ['end game piece picker blocks', 'strict end game piece picker blocks', 'piece picker blocks', 'piece picks', 'reject piece picks', 'unchoked piece picks', 'incoming redundant piece picks', 'incoming piece picks', 'end game piece picks', 'snubbed piece picks']) gen_report('bandwidth', ['% failed payload bytes', '% wasted payload bytes', '% protocol bytes']) diff --git a/src/peer_connection.cpp b/src/peer_connection.cpp index 4d7483bfb..d24dce289 100644 --- a/src/peer_connection.cpp +++ b/src/peer_connection.cpp @@ -1395,6 +1395,9 @@ namespace libtorrent if (m_request_queue.empty() && m_download_queue.size() < 2) { +#ifdef TORRENT_STATS + ++m_ses.m_reject_piece_picks; +#endif request_a_block(*t, *this); send_block_requests(); } @@ -1486,6 +1489,9 @@ namespace libtorrent if (is_interesting()) { +#ifdef TORRENT_STATS + ++m_ses.m_unchoke_piece_picks; +#endif request_a_block(*t, *this); send_block_requests(); } @@ -2378,6 +2384,9 @@ namespace libtorrent if (!m_download_queue.empty()) m_requested = now; +#ifdef TORRENT_STATS + ++m_ses.m_incoming_redundant_piece_picks; +#endif request_a_block(*t, *this); send_block_requests(); return; @@ -2451,6 +2460,9 @@ namespace libtorrent , p.piece, _1)); } +#ifdef TORRENT_STATS + ++m_ses.m_incoming_piece_picks; +#endif request_a_block(*t, *this); send_block_requests(); } @@ -3860,6 +3872,9 @@ namespace libtorrent // might not be any unrequested blocks anymore, so // we should try to pick another block to see // if we can pick a busy one +#ifdef TORRENT_STATS + ++m_ses.m_end_game_piece_picks; +#endif request_a_block(*t, *this); if (m_disconnecting) return; } @@ -4127,6 +4142,9 @@ namespace libtorrent // picking the same block again, stalling the // same piece indefinitely. m_desired_queue_size = 2; +#ifdef TORRENT_STATS + ++m_ses.m_snubbed_piece_picks; +#endif request_a_block(*t, *this); m_desired_queue_size = 1; diff --git a/src/policy.cpp b/src/policy.cpp index 6cc1e37b8..347d2dab4 100644 --- a/src/policy.cpp +++ b/src/policy.cpp @@ -314,7 +314,7 @@ namespace libtorrent } #ifdef TORRENT_STATS - ++ses.m_end_game_piece_picks; + ++ses.m_end_game_piece_picker_blocks; #endif // if the number of pieces we have + the number of pieces @@ -327,7 +327,7 @@ namespace libtorrent return; #ifdef TORRENT_STATS - ++ses.m_strict_end_game_piece_picks; + ++ses.m_strict_end_game_piece_picker_blocks; #endif // if all blocks has the same number of peers on them diff --git a/src/session_impl.cpp b/src/session_impl.cpp index 7943f5eaa..3dc6ff4be 100644 --- a/src/session_impl.cpp +++ b/src/session_impl.cpp @@ -805,9 +805,16 @@ namespace aux { ":peer disconnects:peers eof:peers connection reset" ":outstanding requests:outstanding end-game requests" ":outstanding writing blocks" - ":end game piece picks" - ":strict end game piece picks" + ":end game piece picker blocks" + ":strict end game piece picker blocks" ":piece picker blocks" + ":piece picks" + ":reject piece picks" + ":unchoke piece picks" + ":incoming redundant piece picks" + ":incoming piece picks" + ":end game piece picks" + ":snubbed piece picks" ":% failed payload bytes" ":% wasted payload bytes" ":% protocol bytes" @@ -817,9 +824,16 @@ namespace aux { m_disconnected_peers = 0; m_eof_peers = 0; m_connreset_peers = 0; - m_end_game_piece_picks = 0; - m_strict_end_game_piece_picks = 0; + m_end_game_piece_picker_blocks = 0; + m_strict_end_game_piece_picker_blocks = 0; m_piece_picker_blocks = 0; + m_piece_picks = 0; + m_reject_piece_picks = 0; + m_unchoke_piece_picks = 0; + m_incoming_redundant_piece_picks = 0; + m_incoming_piece_picks = 0; + m_end_game_piece_picks = 0; + m_snubbed_piece_picks = 0; #endif #ifdef TORRENT_DISK_STATS m_buffer_usage_logger.open("buffer_stats.log", std::ios::trunc); @@ -2682,9 +2696,16 @@ namespace aux { << outstanding_requests << "\t" << outstanding_end_game_requests << "\t" << outstanding_write_blocks << "\t" - << m_end_game_piece_picks << "\t" - << m_strict_end_game_piece_picks << "\t" + << m_end_game_piece_picker_blocks << "\t" + << m_strict_end_game_piece_picker_blocks << "\t" << m_piece_picker_blocks << "\t" + << m_piece_picks << "\t" + << m_reject_piece_picks << "\t" + << m_unchoke_piece_picks << "\t" + << m_incoming_redundant_piece_picks << "\t" + << m_incoming_piece_picks << "\t" + << m_end_game_piece_picks << "\t" + << m_snubbed_piece_picks << "\t" << (float(m_total_failed_bytes) * 100.f / m_stat.total_payload_download()) << "\t" << (float(m_total_redundant_bytes) * 100.f / m_stat.total_payload_download()) << "\t" << (float(m_stat.total_protocol_download()) * 100.f / m_stat.total_download()) << "\t" @@ -2693,9 +2714,16 @@ namespace aux { m_disconnected_peers = 0; m_eof_peers = 0; m_connreset_peers = 0; - m_end_game_piece_picks = 0; - m_strict_end_game_piece_picks = 0; + m_end_game_piece_picker_blocks = 0; + m_strict_end_game_piece_picker_blocks = 0; m_piece_picker_blocks = 0; + m_piece_picks = 0; + m_reject_piece_picks = 0; + m_unchoke_piece_picks = 0; + m_incoming_redundant_piece_picks = 0; + m_incoming_piece_picks = 0; + m_end_game_piece_picks = 0; + m_snubbed_piece_picks = 0; #endif // --------------------------------------------------------------