Add ProcessPriority option.
authorGuus Sliepen <guus@tinc-vpn.org>
Thu, 28 May 2009 20:51:30 +0000 (22:51 +0200)
committerGuus Sliepen <guus@tinc-vpn.org>
Thu, 28 May 2009 20:51:30 +0000 (22:51 +0200)
This option can be set to low, normal or high. On UNIX flavours, this changes
the nice value of the process by +10, 0 and -10 respectively. On Windows, it
sets the priority to BELOW_NORMAL_PRIORITY_CLASS, NORMAL_PRIORITY_CLASS and
HIGH_PRIORITY_CLASS respectively.

A high priority might help to reduce latency and packet loss on the VPN.

doc/tinc.conf.5.in
doc/tinc.texi
src/tincd.c

index b3b94f8f668eea70bfbb94bebe4ab44483433410..223005fb612648578392987ffc60a2bb3a531a46 100644 (file)
@@ -304,6 +304,10 @@ or
 .Va PrivateKeyFile
 specified in the configuration file.
 
+.It Va ProcessPriority Li = low | normal | high
+When this option is used the priority of the tincd process will be adjusted.
+Increasing the priority may help to reduce latency and packet loss on the VPN.
+
 .It Va TunnelServer Li = yes | no Po no Pc Bq experimental
 When this option is enabled tinc will no longer forward information between other tinc daemons,
 and will only allow nodes and subnets on the VPN which are present in the
index 23aa43d0d8e9c2904dfa070202cd8793995e16b6..5cd4a4004466473ee7b6a648cbe52a16d4d4575a 100644 (file)
@@ -929,6 +929,11 @@ Note that there must be exactly one of PrivateKey
 or PrivateKeyFile
 specified in the configuration file.
 
+@cindex ProcessPriority
+@item ProcessPriority = <low|normal|high>
+When this option is used the priority of the tincd process will be adjusted.
+Increasing the priority may help to reduce latency and packet loss on the VPN.
+
 @cindex TunnelServer
 @item TunnelServer = <yes|no> (no) [experimental]
 When this option is enabled tinc will no longer forward information between other tinc daemons,
index 257f9e49f05d5495fdc2291439e607611413486e..27cd01ef05352a7540055334b83a86013afd61e7 100644 (file)
@@ -580,6 +580,35 @@ int main2(int argc, char **argv)
        if(!setup_network())
                goto end;
 
+        /* Change process priority */
+
+        char *priority = 0;
+
+        if(get_config_string(lookup_config(config_tree, "ProcessPriority"), &priority)) {
+                if(!strcasecmp(priority, "Normal")) {
+#ifdef HAVE_MINGW
+                        SetPriorityClass(GetCurrentProcess(), NORMAL_PRIORITY_CLASS);
+#else
+                        nice(0);
+#endif
+                } else if(!strcasecmp(priority, "Low")) {
+#ifdef HAVE_MINGW
+                        SetPriorityClass(GetCurrentProcess(), BELOW_NORMAL_PRIORITY_CLASS);
+#else
+                        nice(10);
+#endif
+                } else if(!strcasecmp(priority, "High")) {
+#ifdef HAVE_MINGW
+                        SetPriorityClass(GetCurrentProcess(), HIGH_PRIORITY_CLASS);
+#else
+                        nice(-10);
+#endif
+                } else {
+                        logger(LOG_ERR, _("Invalid priority `%s`!"), priority);
+                        goto end;
+                }
+        }
+
        /* drop privileges */
        if (!drop_privs())
                goto end;