mirror of
https://github.com/monero-project/monero.git
synced 2025-07-31 22:58:41 -04:00
2014 network limit 1.1 +utils +toc -doc -drmonero
Update of the PR with network limits works very well for all speeds (but remember that low download speed can stop upload because we then slow down downloading of blockchain requests too) more debug options fixed pedantic warnings in our code should work again on Mac OS X and FreeBSD fixed warning about size_t tested on Debian, Ubuntu, Windows(testing now) TCP options and ToS (QoS) flag FIXED peer number limit FIXED some spikes in ingress/download FIXED problems when other up and down limit
This commit is contained in:
parent
eabb519605
commit
5ce4256e3d
30 changed files with 714 additions and 383 deletions
|
@ -69,7 +69,9 @@ namespace
|
|||
, "Run on testnet. The wallet must be launched with --testnet flag."
|
||||
, false
|
||||
};
|
||||
const command_line::arg_descriptor<bool> arg_dns_checkpoints = {"enforce-dns-checkpointing", "checkpoints from DNS server will be enforced", false};
|
||||
const command_line::arg_descriptor<bool> arg_dns_checkpoints = {"enforce-dns-checkpointing", "checkpoints from DNS server will be enforced", false};
|
||||
const command_line::arg_descriptor<bool> arg_test_drop_download = {"test-drop-download", "For network testing, drop downloaded blocks instead checking/adding them to blockchain. Can fake-download blocks very fast."};
|
||||
const command_line::arg_descriptor<bool> arg_save_graph = {"save-graph", "Save data for dr monero", false};
|
||||
}
|
||||
|
||||
bool command_line_preprocessor(const boost::program_options::variables_map& vm)
|
||||
|
@ -99,6 +101,8 @@ bool command_line_preprocessor(const boost::program_options::variables_map& vm)
|
|||
else if (log_space::get_set_log_detalisation_level(false) != new_log_level)
|
||||
{
|
||||
log_space::get_set_log_detalisation_level(true, new_log_level);
|
||||
int otshell_utils_log_level = 100 - (new_log_level * 25);
|
||||
gCurrentLogger.setDebugLevel(otshell_utils_log_level);
|
||||
LOG_PRINT_L0("LOG_LEVEL set to " << new_log_level);
|
||||
}
|
||||
|
||||
|
@ -107,7 +111,7 @@ bool command_line_preprocessor(const boost::program_options::variables_map& vm)
|
|||
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
|
||||
|
||||
string_tools::set_module_name_and_folder(argv[0]);
|
||||
#ifdef WIN32
|
||||
_CrtSetDbgFlag ( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
|
||||
|
@ -137,6 +141,8 @@ int main(int argc, char* argv[])
|
|||
command_line::add_arg(desc_cmd_sett, arg_console);
|
||||
command_line::add_arg(desc_cmd_sett, arg_testnet_on);
|
||||
command_line::add_arg(desc_cmd_sett, arg_dns_checkpoints);
|
||||
command_line::add_arg(desc_cmd_sett, arg_test_drop_download);
|
||||
command_line::add_arg(desc_cmd_sett, arg_save_graph);
|
||||
|
||||
cryptonote::core::init_options(desc_cmd_sett);
|
||||
cryptonote::core_rpc_server::init_options(desc_cmd_sett);
|
||||
|
@ -231,7 +237,17 @@ int main(int argc, char* argv[])
|
|||
cryptonote::core_rpc_server rpc_server {ccore, p2psrv, testnet_mode};
|
||||
cprotocol.set_p2p_endpoint(&p2psrv);
|
||||
ccore.set_cryptonote_protocol(&cprotocol);
|
||||
daemon_cmmands_handler dch(p2psrv, testnet_mode);
|
||||
std::shared_ptr<daemon_cmmands_handler> dch(new daemon_cmmands_handler(p2psrv, testnet_mode));
|
||||
if(command_line::has_arg(vm, arg_save_graph))
|
||||
p2psrv.set_save_graph(true);
|
||||
|
||||
//initialize core here
|
||||
LOG_PRINT_L0("Initializing core...");
|
||||
res = ccore.init(vm, testnet_mode);
|
||||
CHECK_AND_ASSERT_MES(res, 1, "Failed to initialize core");
|
||||
if (command_line::get_arg(vm, arg_test_drop_download))
|
||||
ccore.no_check_blocks();
|
||||
LOG_PRINT_L0("Core initialized OK");
|
||||
|
||||
//initialize objects
|
||||
LOG_PRINT_L0("Initializing P2P server...");
|
||||
|
@ -248,17 +264,11 @@ int main(int argc, char* argv[])
|
|||
res = rpc_server.init(vm);
|
||||
CHECK_AND_ASSERT_MES(res, 1, "Failed to initialize core RPC server.");
|
||||
LOG_PRINT_GREEN("Core RPC server initialized OK on port: " << rpc_server.get_binded_port(), LOG_LEVEL_0);
|
||||
|
||||
//initialize core here
|
||||
LOG_PRINT_L0("Initializing core...");
|
||||
res = ccore.init(vm, testnet_mode);
|
||||
CHECK_AND_ASSERT_MES(res, 1, "Failed to initialize core");
|
||||
LOG_PRINT_L0("Core initialized OK");
|
||||
|
||||
|
||||
// start components
|
||||
if(!command_line::has_arg(vm, arg_console))
|
||||
{
|
||||
dch.start_handling();
|
||||
dch->start_handling();
|
||||
}
|
||||
|
||||
LOG_PRINT_L0("Starting core RPC server...");
|
||||
|
@ -267,7 +277,7 @@ int main(int argc, char* argv[])
|
|||
LOG_PRINT_L0("Core RPC server started ok");
|
||||
|
||||
tools::signal_handler::install([&dch, &p2psrv] {
|
||||
dch.stop_handling();
|
||||
dch->stop_handling();
|
||||
p2psrv.send_stop_signal();
|
||||
});
|
||||
|
||||
|
@ -276,6 +286,8 @@ int main(int argc, char* argv[])
|
|||
LOG_PRINT_L0("P2P net loop stopped");
|
||||
|
||||
//stop components
|
||||
dch->stop_handling();
|
||||
dch.reset();
|
||||
LOG_PRINT_L0("Stopping core rpc server...");
|
||||
rpc_server.send_stop_signal();
|
||||
rpc_server.timed_wait_server_stop(5000);
|
||||
|
|
|
@ -79,6 +79,10 @@ public:
|
|||
m_cmd_binder.set_handler("limit_up", boost::bind(&daemon_cmmands_handler::limit_up, this, _1), "Set upload limit [kB/s]");
|
||||
m_cmd_binder.set_handler("limit_down", boost::bind(&daemon_cmmands_handler::limit_down, this, _1), "Set download limit [kB/s]");
|
||||
m_cmd_binder.set_handler("limit", boost::bind(&daemon_cmmands_handler::limit, this, _1), "Set download and upload limit [kB/s]");
|
||||
m_cmd_binder.set_handler("fast_exit", boost::bind(&daemon_cmmands_handler::fast_exit, this, _1), "Exit");
|
||||
m_cmd_binder.set_handler("test_drop_download", boost::bind(&daemon_cmmands_handler::test_drop_download, this, _1), "For network testing, drop downloaded blocks instead checking/adding them to blockchain. Can fake-download blocks very fast.");
|
||||
m_cmd_binder.set_handler("start_save_graph", boost::bind(&daemon_cmmands_handler::start_save_graph, this, _1), "");
|
||||
m_cmd_binder.set_handler("stop_save_graph", boost::bind(&daemon_cmmands_handler::stop_save_graph, this, _1), "");
|
||||
}
|
||||
|
||||
bool start_handling()
|
||||
|
@ -240,6 +244,8 @@ private:
|
|||
}
|
||||
|
||||
log_space::log_singletone::get_set_log_detalisation_level(true, l);
|
||||
int otshell_utils_log_level = 100 - (l * 25);
|
||||
gCurrentLogger.setDebugLevel(otshell_utils_log_level);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -406,7 +412,7 @@ private:
|
|||
//--------------------------------------------------------------------------------
|
||||
bool out_peers_limit(const std::vector<std::string>& args) {
|
||||
if(args.size()!=1) {
|
||||
std::cout << "Usage: limit_down <speed>" << ENDL;
|
||||
std::cout << "Usage: out_peers <number_of_peers>" << ENDL;
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -420,13 +426,26 @@ private:
|
|||
return false;
|
||||
}
|
||||
|
||||
using namespace boost::chrono;
|
||||
auto point = steady_clock::now();
|
||||
auto time_from_epoh = point.time_since_epoch();
|
||||
auto ms = duration_cast< milliseconds >( time_from_epoh ).count();
|
||||
double ms_f = ms;
|
||||
ms_f /= 1000.;
|
||||
|
||||
std::ofstream limitFile("log/dr-monero/peers_limit.info", std::ios::app);
|
||||
limitFile.precision(7);
|
||||
limitFile << ms_f << " " << static_cast<int>(limit) << std::endl;
|
||||
if (m_srv.m_config.m_net_config.connections_count > limit)
|
||||
{
|
||||
int count = m_srv.m_config.m_net_config.connections_count - limit;
|
||||
m_srv.m_config.m_net_config.connections_count = limit;
|
||||
m_srv.delete_connections(count);
|
||||
}
|
||||
else
|
||||
if (m_srv.m_number_of_out_peers > limit)
|
||||
{
|
||||
int count = m_srv.m_number_of_out_peers - limit;
|
||||
m_srv.delete_connections(count);
|
||||
}
|
||||
}
|
||||
else
|
||||
m_srv.m_config.m_net_config.connections_count = limit;
|
||||
|
||||
return true;
|
||||
|
@ -527,4 +546,29 @@ private:
|
|||
|
||||
return true;
|
||||
}
|
||||
//--------------------------------------------------------------------------------
|
||||
bool fast_exit(const std::vector<std::string>& args)
|
||||
{
|
||||
m_srv.get_payload_object().get_core().set_fast_exit();
|
||||
m_srv.send_stop_signal();
|
||||
return true;
|
||||
}
|
||||
//--------------------------------------------------------------------------------
|
||||
bool test_drop_download(const std::vector<std::string>& args)
|
||||
{
|
||||
m_srv.get_payload_object().get_core().no_check_blocks();
|
||||
return true;
|
||||
}
|
||||
//--------------------------------------------------------------------------------
|
||||
bool start_save_graph(const std::vector<std::string>& args)
|
||||
{
|
||||
m_srv.set_save_graph(true);
|
||||
return true;
|
||||
}
|
||||
//--------------------------------------------------------------------------------
|
||||
bool stop_save_graph(const std::vector<std::string>& args)
|
||||
{
|
||||
m_srv.set_save_graph(false);
|
||||
return true;
|
||||
}
|
||||
};
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue