summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPerttu Ahola <celeron55@gmail.com>2012-11-27 09:38:21 +0200
committerPerttu Ahola <celeron55@gmail.com>2012-11-29 22:13:22 +0200
commitab45133ab4826359ca9a5ed50b68150eb462c8ef (patch)
treeabe6b95e77db457a94b5f550669483a03928ff91
parent7b6d6423004343c73fd37726fbbb9f981a50f271 (diff)
downloadminetest-ab45133ab4826359ca9a5ed50b68150eb462c8ef.tar.gz
minetest-ab45133ab4826359ca9a5ed50b68150eb462c8ef.tar.bz2
minetest-ab45133ab4826359ca9a5ed50b68150eb462c8ef.zip
Add congestion control settings to minetest.conf
-rw-r--r--minetest.conf.example5
-rw-r--r--src/connection.cpp28
-rw-r--r--src/connection.h6
-rw-r--r--src/defaultsettings.cpp13
4 files changed, 40 insertions, 12 deletions
diff --git a/minetest.conf.example b/minetest.conf.example
index 64cb87727..071b97c65 100644
--- a/minetest.conf.example
+++ b/minetest.conf.example
@@ -198,3 +198,8 @@
#dedicated_server_step = 0.1
# Can be set to true to disable shutting down on invalid world data
#ignore_world_load_errors = false
+# Congestion control parameters
+# time in seconds, rate in ~500B packets
+#congestion_control_aim_rtt = 0.2
+#congestion_control_max_rate = 400
+#congestion_control_min_rate = 10
diff --git a/src/connection.cpp b/src/connection.cpp
index 4f5d095e5..ed5a752be 100644
--- a/src/connection.cpp
+++ b/src/connection.cpp
@@ -25,6 +25,7 @@ with this program; if not, write to the Free Software Foundation, Inc.,
#include "util/serialize.h"
#include "util/numeric.h"
#include "util/string.h"
+#include "settings.h"
namespace con
{
@@ -466,7 +467,10 @@ Peer::Peer(u16 a_id, Address a_address):
m_sendtime_accu(0),
m_max_packets_per_second(10),
m_num_sent(0),
- m_max_num_sent(0)
+ m_max_num_sent(0),
+ congestion_control_aim_rtt(0.2),
+ congestion_control_max_rate(400),
+ congestion_control_min_rate(10)
{
}
Peer::~Peer()
@@ -477,15 +481,15 @@ void Peer::reportRTT(float rtt)
{
if(rtt >= 0.0){
if(rtt < 0.01){
- if(m_max_packets_per_second < 400)
+ if(m_max_packets_per_second < congestion_control_max_rate)
m_max_packets_per_second += 10;
- } else if(rtt < 0.2){
- if(m_max_packets_per_second < 100)
+ } else if(rtt < congestion_control_aim_rtt){
+ if(m_max_packets_per_second < congestion_control_max_rate)
m_max_packets_per_second += 2;
} else {
m_max_packets_per_second *= 0.8;
- if(m_max_packets_per_second < 10)
- m_max_packets_per_second = 10;
+ if(m_max_packets_per_second < congestion_control_min_rate)
+ m_max_packets_per_second = congestion_control_min_rate;
}
}
@@ -891,12 +895,24 @@ void Connection::receive()
void Connection::runTimeouts(float dtime)
{
+ float congestion_control_aim_rtt
+ = g_settings->getFloat("congestion_control_aim_rtt");
+ float congestion_control_max_rate
+ = g_settings->getFloat("congestion_control_max_rate");
+ float congestion_control_min_rate
+ = g_settings->getFloat("congestion_control_min_rate");
+
core::list<u16> timeouted_peers;
core::map<u16, Peer*>::Iterator j;
j = m_peers.getIterator();
for(; j.atEnd() == false; j++)
{
Peer *peer = j.getNode()->getValue();
+
+ // Update congestion control values
+ peer->congestion_control_aim_rtt = congestion_control_aim_rtt;
+ peer->congestion_control_max_rate = congestion_control_max_rate;
+ peer->congestion_control_min_rate = congestion_control_min_rate;
/*
Check peer timeout
diff --git a/src/connection.h b/src/connection.h
index f88e813a3..f99cd1bf9 100644
--- a/src/connection.h
+++ b/src/connection.h
@@ -394,7 +394,11 @@ public:
float m_max_packets_per_second;
int m_num_sent;
int m_max_num_sent;
-
+
+ // Updated from configuration by Connection
+ float congestion_control_aim_rtt;
+ float congestion_control_max_rate;
+ float congestion_control_min_rate;
private:
};
diff --git a/src/defaultsettings.cpp b/src/defaultsettings.cpp
index 8ce9cb1fb..d186427e7 100644
--- a/src/defaultsettings.cpp
+++ b/src/defaultsettings.cpp
@@ -106,6 +106,11 @@ void set_default_settings(Settings *settings)
settings->setDefault("sound_volume", "0.8");
settings->setDefault("desynchronize_mapblock_texture_animation", "true");
+ settings->setDefault("mip_map", "false");
+ settings->setDefault("anisotropic_filter", "false");
+ settings->setDefault("bilinear_filter", "false");
+ settings->setDefault("trilinear_filter", "false");
+
// Server stuff
// "map-dir" doesn't exist by default.
settings->setDefault("default_game", "minetest");
@@ -142,10 +147,8 @@ void set_default_settings(Settings *settings)
settings->setDefault("full_block_send_enable_min_time_from_building", "2.0");
settings->setDefault("dedicated_server_step", "0.1");
settings->setDefault("ignore_world_load_errors", "false");
- settings->setDefault("mip_map", "false");
- settings->setDefault("anisotropic_filter", "false");
- settings->setDefault("bilinear_filter", "false");
- settings->setDefault("trilinear_filter", "false");
-
+ settings->setDefault("congestion_control_aim_rtt", "0.2");
+ settings->setDefault("congestion_control_max_rate", "400");
+ settings->setDefault("congestion_control_min_rate", "10");
}