Changed default number of threads and added auto
value.
Changed default number of threads to 1 instead of autoconfigured value and added a new `auto` variable which enables autoconfiguration of thread count. The number of threads used when autoconfiguratio fails was changed from 4 to 1. The default value of using N threads where N is the number of CPU cores was not optimal as the possibility of rescheduling was higher the more utility threads there were. Due to this, N-1 is deemed to be the better autoconfigured value for thread count.
This commit is contained in:
@ -69,19 +69,20 @@ The global settings, in a section named `[MaxScale]`, allow various parameters t
|
||||
#### `threads`
|
||||
|
||||
This parameter controls the number of worker threads that are handling the
|
||||
events coming from the kernel. MaxScale will auto-detect the number of
|
||||
processors of the system unless number of threads is manually configured.
|
||||
It is recommended that you let MaxScale detect how many cores the system
|
||||
has and leave this parameter undefined. The number of used cores will be
|
||||
logged into the message logs and if you are not satisfied with the
|
||||
auto-detected value, you can manually configure it. Increasing the amount
|
||||
of worker threads beyond the number of processor cores does not improve
|
||||
the performance, rather is likely to degrade it, and can consume resources
|
||||
needlessly.
|
||||
events coming from the kernel. The default is 1 thread. It is recommended that
|
||||
you start with one thread and increase the number if you require greater
|
||||
performance. Increasing the amount of worker threads beyond the number of
|
||||
processor cores does not improve the performance, rather is likely to degrade
|
||||
it, and can consume resources needlessly.
|
||||
|
||||
You can enable automatic configuration of this value by setting the value to
|
||||
`auto`. This way MaxScale will detect the number of available processors and
|
||||
set the amount of threads to be equal to that number. This should only be used
|
||||
for systems dedicated for running MaxScale.
|
||||
|
||||
```
|
||||
# Valid options are:
|
||||
# threads=<number of epoll threads>
|
||||
# threads=[<number of threads> | auto ]
|
||||
|
||||
[MaxScale]
|
||||
threads=1
|
||||
|
@ -1577,11 +1577,28 @@ handle_global_item(const char *name, const char *value)
|
||||
{
|
||||
int i;
|
||||
if (strcmp(name, "threads") == 0)
|
||||
{
|
||||
if (strcmp(name, "auto") == 0)
|
||||
{
|
||||
if ((gateway.n_threads = get_processor_count()) > 1)
|
||||
{
|
||||
gateway.n_threads--;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
int thrcount = atoi(value);
|
||||
if (thrcount > 0)
|
||||
{
|
||||
gateway.n_threads = thrcount;
|
||||
|
||||
int processor_count = get_processor_count();
|
||||
if (thrcount > processor_count)
|
||||
{
|
||||
MXS_WARNING("Number of threads set to %d which is greater than"
|
||||
" the number of processors available: %d",
|
||||
thrcount, processor_count);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1589,6 +1606,7 @@ handle_global_item(const char *name, const char *value)
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (strcmp(name, "non_blocking_polls") == 0)
|
||||
{
|
||||
gateway.n_nbpoll = atoi(value);
|
||||
@ -1706,7 +1724,7 @@ global_defaults()
|
||||
{
|
||||
uint8_t mac_addr[6]="";
|
||||
struct utsname uname_data;
|
||||
gateway.n_threads = get_processor_count();
|
||||
gateway.n_threads = DEFAULT_NTHREADS;
|
||||
gateway.n_nbpoll = DEFAULT_NBPOLLS;
|
||||
gateway.pollsleep = DEFAULT_POLLSLEEP;
|
||||
gateway.auth_conn_timeout = DEFAULT_AUTH_CONNECT_TIMEOUT;
|
||||
|
@ -237,8 +237,8 @@ long get_processor_count()
|
||||
#ifdef _SC_NPROCESSORS_ONLN
|
||||
if ((processors = sysconf(_SC_NPROCESSORS_ONLN)) <= 0)
|
||||
{
|
||||
MXS_WARNING("Unable to establish the number of available cores. Defaulting to 4.");
|
||||
processors = 4;
|
||||
MXS_WARNING("Unable to establish the number of available cores. Defaulting to 1.");
|
||||
processors = 1;
|
||||
}
|
||||
#else
|
||||
#error _SC_NPROCESSORS_ONLN not available.
|
||||
|
@ -41,6 +41,7 @@
|
||||
#define DEFAULT_POLLSLEEP 1000 /**< Default poll wait time (milliseconds) */
|
||||
#define _SYSNAME_STR_LENGTH 256 /**< sysname len */
|
||||
#define _RELEASE_STR_LENGTH 256 /**< release len */
|
||||
#define DEFAULT_NTHREADS 1 /**< Default number of polling threads */
|
||||
/**
|
||||
* Maximum length for configuration parameter value.
|
||||
*/
|
||||
|
@ -3,12 +3,11 @@
|
||||
|
||||
# Global parameters
|
||||
#
|
||||
# Number of threads is autodetected, uncomment for manual configuration
|
||||
# Complete list of configuration options:
|
||||
# https://github.com/mariadb-corporation/MaxScale/blob/master/Documentation/Getting-Started/Configuration-Guide.md
|
||||
|
||||
[maxscale]
|
||||
#threads=8
|
||||
threads=1
|
||||
|
||||
# Server definitions
|
||||
#
|
||||
|
Reference in New Issue
Block a user