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.
This commit is contained in:
Guus Sliepen 2009-05-28 22:51:30 +02:00
parent 41a05f59ba
commit 41c10c5a96
3 changed files with 38 additions and 0 deletions

View 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

View 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,

View 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;