Cleanup TCP throttling code (performance)
This commit is contained in:
parent
b089f9ee69
commit
5f5c035fe5
|
@ -328,7 +328,7 @@ namespace net_utils
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
auto self = connection<T>::shared_from_this();
|
auto self = connection<T>::shared_from_this();
|
||||||
if (m_connection_type != e_connection_type_RPC) {
|
if (speed_limit_is_enabled()) {
|
||||||
auto calc_duration = []{
|
auto calc_duration = []{
|
||||||
CRITICAL_REGION_LOCAL(
|
CRITICAL_REGION_LOCAL(
|
||||||
network_throttle_manager_t::m_lock_get_global_throttle_in
|
network_throttle_manager_t::m_lock_get_global_throttle_in
|
||||||
|
@ -382,7 +382,7 @@ namespace net_utils
|
||||||
m_conn_context.m_max_speed_down,
|
m_conn_context.m_max_speed_down,
|
||||||
speed
|
speed
|
||||||
);
|
);
|
||||||
{
|
if (speed_limit_is_enabled()) {
|
||||||
CRITICAL_REGION_LOCAL(
|
CRITICAL_REGION_LOCAL(
|
||||||
network_throttle_manager_t::m_lock_get_global_throttle_in
|
network_throttle_manager_t::m_lock_get_global_throttle_in
|
||||||
);
|
);
|
||||||
|
@ -454,7 +454,7 @@ namespace net_utils
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
auto self = connection<T>::shared_from_this();
|
auto self = connection<T>::shared_from_this();
|
||||||
if (m_connection_type != e_connection_type_RPC) {
|
if (speed_limit_is_enabled()) {
|
||||||
auto calc_duration = [this]{
|
auto calc_duration = [this]{
|
||||||
CRITICAL_REGION_LOCAL(
|
CRITICAL_REGION_LOCAL(
|
||||||
network_throttle_manager_t::m_lock_get_global_throttle_out
|
network_throttle_manager_t::m_lock_get_global_throttle_out
|
||||||
|
@ -513,7 +513,7 @@ namespace net_utils
|
||||||
m_conn_context.m_max_speed_down,
|
m_conn_context.m_max_speed_down,
|
||||||
speed
|
speed
|
||||||
);
|
);
|
||||||
{
|
if (speed_limit_is_enabled()) {
|
||||||
CRITICAL_REGION_LOCAL(
|
CRITICAL_REGION_LOCAL(
|
||||||
network_throttle_manager_t::m_lock_get_global_throttle_out
|
network_throttle_manager_t::m_lock_get_global_throttle_out
|
||||||
);
|
);
|
||||||
|
@ -1022,7 +1022,7 @@ namespace net_utils
|
||||||
template<typename T>
|
template<typename T>
|
||||||
bool connection<T>::speed_limit_is_enabled() const
|
bool connection<T>::speed_limit_is_enabled() const
|
||||||
{
|
{
|
||||||
return m_connection_type != e_connection_type_RPC;
|
return m_connection_type == e_connection_type_P2P;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
|
|
|
@ -46,13 +46,13 @@ namespace net_utils
|
||||||
|
|
||||||
|
|
||||||
class network_throttle : public i_network_throttle {
|
class network_throttle : public i_network_throttle {
|
||||||
private:
|
public:
|
||||||
struct packet_info {
|
struct packet_info {
|
||||||
size_t m_size; // octets sent. Summary for given small-window (e.g. for all packaged in 1 second)
|
size_t m_size; // octets sent. Summary for given small-window (e.g. for all packaged in 1 second)
|
||||||
packet_info();
|
packet_info();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private:
|
||||||
network_speed_bps m_target_speed;
|
network_speed_bps m_target_speed;
|
||||||
size_t m_network_add_cost; // estimated add cost of headers
|
size_t m_network_add_cost; // estimated add cost of headers
|
||||||
size_t m_network_minimal_segment; // estimated minimal cost of sending 1 byte to round up to
|
size_t m_network_minimal_segment; // estimated minimal cost of sending 1 byte to round up to
|
||||||
|
|
|
@ -46,7 +46,7 @@
|
||||||
#include "misc_log_ex.h"
|
#include "misc_log_ex.h"
|
||||||
#include <boost/chrono.hpp>
|
#include <boost/chrono.hpp>
|
||||||
#include "misc_language.h"
|
#include "misc_language.h"
|
||||||
#include <sstream>
|
#include <fstream>
|
||||||
#include <iomanip>
|
#include <iomanip>
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
|
@ -186,6 +186,23 @@ void network_throttle::handle_trafic_exact(size_t packet_size)
|
||||||
_handle_trafic_exact(packet_size, packet_size);
|
_handle_trafic_exact(packet_size, packet_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
struct output_history
|
||||||
|
{
|
||||||
|
const boost::circular_buffer< network_throttle::packet_info >& history;
|
||||||
|
};
|
||||||
|
|
||||||
|
std::ostream& operator<<(std::ostream& out, const output_history& source)
|
||||||
|
{
|
||||||
|
out << '[';
|
||||||
|
for (auto sample: source.history)
|
||||||
|
out << sample.m_size << ' ';
|
||||||
|
out << ']';
|
||||||
|
return out;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void network_throttle::_handle_trafic_exact(size_t packet_size, size_t orginal_size)
|
void network_throttle::_handle_trafic_exact(size_t packet_size, size_t orginal_size)
|
||||||
{
|
{
|
||||||
tick();
|
tick();
|
||||||
|
@ -196,14 +213,11 @@ void network_throttle::_handle_trafic_exact(size_t packet_size, size_t orginal_s
|
||||||
m_total_packets++;
|
m_total_packets++;
|
||||||
m_total_bytes += packet_size;
|
m_total_bytes += packet_size;
|
||||||
|
|
||||||
std::ostringstream oss; oss << "["; for (auto sample: m_history) oss << sample.m_size << " "; oss << "]" << std::ends;
|
|
||||||
std::string history_str = oss.str();
|
|
||||||
|
|
||||||
MTRACE("Throttle " << m_name << ": packet of ~"<<packet_size<<"b " << " (from "<<orginal_size<<" b)"
|
MTRACE("Throttle " << m_name << ": packet of ~"<<packet_size<<"b " << " (from "<<orginal_size<<" b)"
|
||||||
<< " Speed AVG=" << std::setw(4) << ((long int)(cts .average/1024)) <<"[w="<<cts .window<<"]"
|
<< " Speed AVG=" << std::setw(4) << ((long int)(cts .average/1024)) <<"[w="<<cts .window<<"]"
|
||||||
<< " " << std::setw(4) << ((long int)(cts2.average/1024)) <<"[w="<<cts2.window<<"]"
|
<< " " << std::setw(4) << ((long int)(cts2.average/1024)) <<"[w="<<cts2.window<<"]"
|
||||||
<<" / " << " Limit="<< ((long int)(m_target_speed/1024)) <<" KiB/sec "
|
<<" / " << " Limit="<< ((long int)(m_target_speed/1024)) <<" KiB/sec "
|
||||||
<< " " << history_str
|
<< " " << output_history{m_history}
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -289,8 +303,6 @@ void network_throttle::calculate_times(size_t packet_size, calculate_times_struc
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dbg) {
|
if (dbg) {
|
||||||
std::ostringstream oss; oss << "["; for (auto sample: m_history) oss << sample.m_size << " "; oss << "]" << std::ends;
|
|
||||||
std::string history_str = oss.str();
|
|
||||||
MTRACE((cts.delay > 0 ? "SLEEP" : "")
|
MTRACE((cts.delay > 0 ? "SLEEP" : "")
|
||||||
<< "dbg " << m_name << ": "
|
<< "dbg " << m_name << ": "
|
||||||
<< "speed is A=" << std::setw(8) <<cts.average<<" vs "
|
<< "speed is A=" << std::setw(8) <<cts.average<<" vs "
|
||||||
|
@ -300,7 +312,7 @@ void network_throttle::calculate_times(size_t packet_size, calculate_times_struc
|
||||||
<< "E="<< std::setw(8) << E << " (Enow="<<std::setw(8)<<Enow<<") "
|
<< "E="<< std::setw(8) << E << " (Enow="<<std::setw(8)<<Enow<<") "
|
||||||
<< "M=" << std::setw(8) << M <<" W="<< std::setw(8) << cts.window << " "
|
<< "M=" << std::setw(8) << M <<" W="<< std::setw(8) << cts.window << " "
|
||||||
<< "R=" << std::setw(8) << cts.recomendetDataSize << " Wgood" << std::setw(8) << Wgood << " "
|
<< "R=" << std::setw(8) << cts.recomendetDataSize << " Wgood" << std::setw(8) << Wgood << " "
|
||||||
<< "History: " << std::setw(8) << history_str << " "
|
<< "History: " << std::setw(8) << output_history{m_history} << " "
|
||||||
<< "m_last_sample_time=" << std::setw(8) << m_last_sample_time
|
<< "m_last_sample_time=" << std::setw(8) << m_last_sample_time
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue