From 41c10c5a966000531099c79d6006429253ff8fd6 Mon Sep 17 00:00:00 2001 From: Guus Sliepen Date: Thu, 28 May 2009 22:51:30 +0200 Subject: [PATCH] Add ProcessPriority option. 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 | 4 ++++ doc/tinc.texi | 5 +++++ src/tincd.c | 29 +++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+) diff --git a/doc/tinc.conf.5.in b/doc/tinc.conf.5.in index b3b94f8..223005f 100644 --- a/doc/tinc.conf.5.in +++ b/doc/tinc.conf.5.in @@ -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 diff --git a/doc/tinc.texi b/doc/tinc.texi index 23aa43d..5cd4a40 100644 --- a/doc/tinc.texi +++ b/doc/tinc.texi @@ -929,6 +929,11 @@ Note that there must be exactly one of PrivateKey or PrivateKeyFile specified in the configuration file. +@cindex ProcessPriority +@item ProcessPriority = +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 = (no) [experimental] When this option is enabled tinc will no longer forward information between other tinc daemons, diff --git a/src/tincd.c b/src/tincd.c index 257f9e4..27cd01e 100644 --- a/src/tincd.c +++ b/src/tincd.c @@ -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; -- 2.25.1