From: Guus Sliepen Date: Thu, 28 May 2009 20:51:30 +0000 (+0200) Subject: Add ProcessPriority option. X-Git-Tag: import-tinc-1.1~595^2~3 X-Git-Url: https://git.meshlink.io/?a=commitdiff_plain;h=41c10c5a966000531099c79d6006429253ff8fd6;p=meshlink 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. --- diff --git a/doc/tinc.conf.5.in b/doc/tinc.conf.5.in index b3b94f8f..223005fb 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 23aa43d0..5cd4a400 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 257f9e49..27cd01ef 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;