added rtt estimation for outgoing connections
This commit is contained in:
parent
221cdf2bf8
commit
cecd0dfcd2
|
@ -2339,6 +2339,8 @@ struct peer_info
|
||||||
|
|
||||||
int send_quota;
|
int send_quota;
|
||||||
int receive_quota;
|
int receive_quota;
|
||||||
|
|
||||||
|
int rtt;
|
||||||
};
|
};
|
||||||
</pre>
|
</pre>
|
||||||
<p>The <tt class="docutils literal"><span class="pre">flags</span></tt> attribute tells you in which state the peer is. It is set to
|
<p>The <tt class="docutils literal"><span class="pre">flags</span></tt> attribute tells you in which state the peer is. It is set to
|
||||||
|
@ -2546,6 +2548,8 @@ is capped by <tt class="docutils literal"><span class="pre">session_settings::ma
|
||||||
<p><tt class="docutils literal"><span class="pre">send_quota</span></tt> and <tt class="docutils literal"><span class="pre">receive_quota</span></tt> are the number of bytes this peer has been
|
<p><tt class="docutils literal"><span class="pre">send_quota</span></tt> and <tt class="docutils literal"><span class="pre">receive_quota</span></tt> are the number of bytes this peer has been
|
||||||
assigned to be allowed to send and receive until it has to request more quota
|
assigned to be allowed to send and receive until it has to request more quota
|
||||||
from the bandwidth manager.</p>
|
from the bandwidth manager.</p>
|
||||||
|
<p><tt class="docutils literal"><span class="pre">rtt</span></tt> is an estimated round trip time to this peer, in milliseconds. It is
|
||||||
|
estimated by timing the the tcp <tt class="docutils literal"><span class="pre">connect()</span></tt>. It may be 0 for incoming connections.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section">
|
||||||
<h1><a id="session-settings" name="session-settings">session_settings</a></h1>
|
<h1><a id="session-settings" name="session-settings">session_settings</a></h1>
|
||||||
|
|
|
@ -2332,6 +2332,8 @@ It contains the following fields::
|
||||||
|
|
||||||
int send_quota;
|
int send_quota;
|
||||||
int receive_quota;
|
int receive_quota;
|
||||||
|
|
||||||
|
int rtt;
|
||||||
};
|
};
|
||||||
|
|
||||||
The ``flags`` attribute tells you in which state the peer is. It is set to
|
The ``flags`` attribute tells you in which state the peer is. It is set to
|
||||||
|
@ -2531,6 +2533,10 @@ is capped by ``session_settings::max_outstanding_disk_bytes_per_connection``.
|
||||||
assigned to be allowed to send and receive until it has to request more quota
|
assigned to be allowed to send and receive until it has to request more quota
|
||||||
from the bandwidth manager.
|
from the bandwidth manager.
|
||||||
|
|
||||||
|
``rtt`` is an estimated round trip time to this peer, in milliseconds. It is
|
||||||
|
estimated by timing the the tcp ``connect()``. It may be 0 for incoming connections.
|
||||||
|
|
||||||
|
|
||||||
session_settings
|
session_settings
|
||||||
================
|
================
|
||||||
|
|
||||||
|
|
|
@ -321,7 +321,7 @@ int peer_index(libtorrent::tcp::endpoint addr, std::vector<libtorrent::peer_info
|
||||||
void print_peer_info(std::ostream& out, std::vector<libtorrent::peer_info> const& peers)
|
void print_peer_info(std::ostream& out, std::vector<libtorrent::peer_info> const& peers)
|
||||||
{
|
{
|
||||||
using namespace libtorrent;
|
using namespace libtorrent;
|
||||||
out << "IP down (total) up (total) sent-req recv flags source fail hshf sndb inactive wait disk quota block-progress "
|
out << "IP down (total) up (total) sent-req recv flags source fail hshf sndb inactive wait disk quota rtt block-progress "
|
||||||
#ifndef TORRENT_DISABLE_RESOLVE_COUNTRIES
|
#ifndef TORRENT_DISABLE_RESOLVE_COUNTRIES
|
||||||
"country "
|
"country "
|
||||||
#endif
|
#endif
|
||||||
|
@ -379,12 +379,13 @@ void print_peer_info(std::ostream& out, std::vector<libtorrent::peer_info> const
|
||||||
<< to_string(total_seconds(i->last_active), 8) << " "
|
<< to_string(total_seconds(i->last_active), 8) << " "
|
||||||
<< to_string(total_seconds(i->last_request), 4) << " "
|
<< to_string(total_seconds(i->last_request), 4) << " "
|
||||||
<< add_suffix(i->pending_disk_bytes) << " "
|
<< add_suffix(i->pending_disk_bytes) << " "
|
||||||
<< to_string(i->send_quota, 5) << " ";
|
<< to_string(i->send_quota, 5) << " "
|
||||||
|
<< to_string(i->rtt, 4) << " ";
|
||||||
|
|
||||||
if (i->downloading_piece_index >= 0)
|
if (i->downloading_piece_index >= 0)
|
||||||
{
|
{
|
||||||
out << progress_bar(
|
out << progress_bar(
|
||||||
i->downloading_progress / float(i->downloading_total), 15);
|
i->downloading_progress / float(i->downloading_total), 14);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -742,6 +742,14 @@ namespace libtorrent
|
||||||
// immediate.
|
// immediate.
|
||||||
bool m_fast_reconnect;
|
bool m_fast_reconnect;
|
||||||
|
|
||||||
|
// the time when async_connect was called
|
||||||
|
ptime m_connect;
|
||||||
|
|
||||||
|
// estimated round trip time to this peer
|
||||||
|
// based on the time from when async_connect
|
||||||
|
// was called to when on_connection_complete
|
||||||
|
// was called. The rtt is specified in milliseconds
|
||||||
|
int m_rtt;
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
public:
|
public:
|
||||||
bool m_in_constructor;
|
bool m_in_constructor;
|
||||||
|
|
|
@ -171,6 +171,9 @@ namespace libtorrent
|
||||||
// numbers used for bandwidth limiting
|
// numbers used for bandwidth limiting
|
||||||
int send_quota;
|
int send_quota;
|
||||||
int receive_quota;
|
int receive_quota;
|
||||||
|
|
||||||
|
// estimated rtt to peer, in milliseconds
|
||||||
|
int rtt;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -118,6 +118,7 @@ namespace libtorrent
|
||||||
, m_remote_dl_update(time_now())
|
, m_remote_dl_update(time_now())
|
||||||
, m_outstanding_writing_bytes(0)
|
, m_outstanding_writing_bytes(0)
|
||||||
, m_fast_reconnect(false)
|
, m_fast_reconnect(false)
|
||||||
|
, m_rtt(0)
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
, m_in_constructor(true)
|
, m_in_constructor(true)
|
||||||
#endif
|
#endif
|
||||||
|
@ -200,6 +201,7 @@ namespace libtorrent
|
||||||
, m_remote_dl_update(time_now())
|
, m_remote_dl_update(time_now())
|
||||||
, m_outstanding_writing_bytes(0)
|
, m_outstanding_writing_bytes(0)
|
||||||
, m_fast_reconnect(false)
|
, m_fast_reconnect(false)
|
||||||
|
, m_rtt(0)
|
||||||
#ifndef NDEBUG
|
#ifndef NDEBUG
|
||||||
, m_in_constructor(true)
|
, m_in_constructor(true)
|
||||||
#endif
|
#endif
|
||||||
|
@ -2162,6 +2164,7 @@ namespace libtorrent
|
||||||
{
|
{
|
||||||
TORRENT_ASSERT(!associated_torrent().expired());
|
TORRENT_ASSERT(!associated_torrent().expired());
|
||||||
|
|
||||||
|
p.rtt = m_rtt;
|
||||||
p.down_speed = statistics().download_rate();
|
p.down_speed = statistics().download_rate();
|
||||||
p.up_speed = statistics().upload_rate();
|
p.up_speed = statistics().upload_rate();
|
||||||
p.payload_down_speed = statistics().download_payload_rate();
|
p.payload_down_speed = statistics().download_payload_rate();
|
||||||
|
@ -2912,6 +2915,7 @@ namespace libtorrent
|
||||||
}
|
}
|
||||||
m_socket->async_connect(m_remote
|
m_socket->async_connect(m_remote
|
||||||
, bind(&peer_connection::on_connection_complete, self(), _1));
|
, bind(&peer_connection::on_connection_complete, self(), _1));
|
||||||
|
m_connect = time_now();
|
||||||
|
|
||||||
if (t->alerts().should_post(alert::debug))
|
if (t->alerts().should_post(alert::debug))
|
||||||
{
|
{
|
||||||
|
@ -2922,10 +2926,14 @@ namespace libtorrent
|
||||||
|
|
||||||
void peer_connection::on_connection_complete(asio::error_code const& e) try
|
void peer_connection::on_connection_complete(asio::error_code const& e) try
|
||||||
{
|
{
|
||||||
|
ptime completed = time_now();
|
||||||
|
|
||||||
session_impl::mutex_t::scoped_lock l(m_ses.m_mutex);
|
session_impl::mutex_t::scoped_lock l(m_ses.m_mutex);
|
||||||
|
|
||||||
INVARIANT_CHECK;
|
INVARIANT_CHECK;
|
||||||
|
|
||||||
|
m_rtt = total_milliseconds(completed - m_connect);
|
||||||
|
|
||||||
if (m_disconnecting) return;
|
if (m_disconnecting) return;
|
||||||
|
|
||||||
m_connecting = false;
|
m_connecting = false;
|
||||||
|
@ -2948,7 +2956,8 @@ namespace libtorrent
|
||||||
// this means the connection just succeeded
|
// this means the connection just succeeded
|
||||||
|
|
||||||
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING
|
#if defined TORRENT_VERBOSE_LOGGING || defined TORRENT_LOGGING
|
||||||
(*m_ses.m_logger) << time_now_string() << " COMPLETED: " << m_remote.address().to_string() << "\n";
|
(*m_ses.m_logger) << time_now_string() << " COMPLETED: " << m_remote.address().to_string()
|
||||||
|
<< " rtt = " << m_rtt << "\n";
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
on_connected();
|
on_connected();
|
||||||
|
|
Loading…
Reference in New Issue