Add congestion control settings to minetest.conf
authorPerttu Ahola <celeron55@gmail.com>
Tue, 27 Nov 2012 07:38:21 +0000 (09:38 +0200)
committerPerttu Ahola <celeron55@gmail.com>
Thu, 29 Nov 2012 20:13:22 +0000 (22:13 +0200)
minetest.conf.example
src/connection.cpp
src/connection.h
src/defaultsettings.cpp

index 64cb877270a2dbbc15cb60247a80487890553469..071b97c65678cb3f48d87f8af5cb4f4b92b51b40 100644 (file)
 #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
index 4f5d095e5e034c2fa87200ab434e6a4e3bd233eb..ed5a752befc10e417e807b7892eb61c72e4781ad 100644 (file)
@@ -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
index f88e813a3f4afdb489c87ce2e599ae4a294d2e1b..f99cd1bf94f1661c53f1bc85a32755a6d26118a8 100644 (file)
@@ -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:
 };
 
index 8ce9cb1fb35c5e66a3b9a085c723c6502b6e544d..d186427e76b8a0737b31f7b85e965dd064c7b919 100644 (file)
@@ -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");
 }