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`
|
#### `threads`
|
||||||
|
|
||||||
This parameter controls the number of worker threads that are handling the
|
This parameter controls the number of worker threads that are handling the
|
||||||
events coming from the kernel. MaxScale will auto-detect the number of
|
events coming from the kernel. The default is 1 thread. It is recommended that
|
||||||
processors of the system unless number of threads is manually configured.
|
you start with one thread and increase the number if you require greater
|
||||||
It is recommended that you let MaxScale detect how many cores the system
|
performance. Increasing the amount of worker threads beyond the number of
|
||||||
has and leave this parameter undefined. The number of used cores will be
|
processor cores does not improve the performance, rather is likely to degrade
|
||||||
logged into the message logs and if you are not satisfied with the
|
it, and can consume resources needlessly.
|
||||||
auto-detected value, you can manually configure it. Increasing the amount
|
|
||||||
of worker threads beyond the number of processor cores does not improve
|
You can enable automatic configuration of this value by setting the value to
|
||||||
the performance, rather is likely to degrade it, and can consume resources
|
`auto`. This way MaxScale will detect the number of available processors and
|
||||||
needlessly.
|
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:
|
# Valid options are:
|
||||||
# threads=<number of epoll threads>
|
# threads=[<number of threads> | auto ]
|
||||||
|
|
||||||
[MaxScale]
|
[MaxScale]
|
||||||
threads=1
|
threads=1
|
||||||
|
@ -1577,11 +1577,28 @@ handle_global_item(const char *name, const char *value)
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
if (strcmp(name, "threads") == 0)
|
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);
|
int thrcount = atoi(value);
|
||||||
if (thrcount > 0)
|
if (thrcount > 0)
|
||||||
{
|
{
|
||||||
gateway.n_threads = thrcount;
|
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
|
else
|
||||||
{
|
{
|
||||||
@ -1589,6 +1606,7 @@ handle_global_item(const char *name, const char *value)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
else if (strcmp(name, "non_blocking_polls") == 0)
|
else if (strcmp(name, "non_blocking_polls") == 0)
|
||||||
{
|
{
|
||||||
gateway.n_nbpoll = atoi(value);
|
gateway.n_nbpoll = atoi(value);
|
||||||
@ -1706,7 +1724,7 @@ global_defaults()
|
|||||||
{
|
{
|
||||||
uint8_t mac_addr[6]="";
|
uint8_t mac_addr[6]="";
|
||||||
struct utsname uname_data;
|
struct utsname uname_data;
|
||||||
gateway.n_threads = get_processor_count();
|
gateway.n_threads = DEFAULT_NTHREADS;
|
||||||
gateway.n_nbpoll = DEFAULT_NBPOLLS;
|
gateway.n_nbpoll = DEFAULT_NBPOLLS;
|
||||||
gateway.pollsleep = DEFAULT_POLLSLEEP;
|
gateway.pollsleep = DEFAULT_POLLSLEEP;
|
||||||
gateway.auth_conn_timeout = DEFAULT_AUTH_CONNECT_TIMEOUT;
|
gateway.auth_conn_timeout = DEFAULT_AUTH_CONNECT_TIMEOUT;
|
||||||
|
@ -237,8 +237,8 @@ long get_processor_count()
|
|||||||
#ifdef _SC_NPROCESSORS_ONLN
|
#ifdef _SC_NPROCESSORS_ONLN
|
||||||
if ((processors = sysconf(_SC_NPROCESSORS_ONLN)) <= 0)
|
if ((processors = sysconf(_SC_NPROCESSORS_ONLN)) <= 0)
|
||||||
{
|
{
|
||||||
MXS_WARNING("Unable to establish the number of available cores. Defaulting to 4.");
|
MXS_WARNING("Unable to establish the number of available cores. Defaulting to 1.");
|
||||||
processors = 4;
|
processors = 1;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
#error _SC_NPROCESSORS_ONLN not available.
|
#error _SC_NPROCESSORS_ONLN not available.
|
||||||
|
@ -41,6 +41,7 @@
|
|||||||
#define DEFAULT_POLLSLEEP 1000 /**< Default poll wait time (milliseconds) */
|
#define DEFAULT_POLLSLEEP 1000 /**< Default poll wait time (milliseconds) */
|
||||||
#define _SYSNAME_STR_LENGTH 256 /**< sysname len */
|
#define _SYSNAME_STR_LENGTH 256 /**< sysname len */
|
||||||
#define _RELEASE_STR_LENGTH 256 /**< release len */
|
#define _RELEASE_STR_LENGTH 256 /**< release len */
|
||||||
|
#define DEFAULT_NTHREADS 1 /**< Default number of polling threads */
|
||||||
/**
|
/**
|
||||||
* Maximum length for configuration parameter value.
|
* Maximum length for configuration parameter value.
|
||||||
*/
|
*/
|
||||||
|
@ -3,12 +3,11 @@
|
|||||||
|
|
||||||
# Global parameters
|
# Global parameters
|
||||||
#
|
#
|
||||||
# Number of threads is autodetected, uncomment for manual configuration
|
|
||||||
# Complete list of configuration options:
|
# Complete list of configuration options:
|
||||||
# https://github.com/mariadb-corporation/MaxScale/blob/master/Documentation/Getting-Started/Configuration-Guide.md
|
# https://github.com/mariadb-corporation/MaxScale/blob/master/Documentation/Getting-Started/Configuration-Guide.md
|
||||||
|
|
||||||
[maxscale]
|
[maxscale]
|
||||||
#threads=8
|
threads=1
|
||||||
|
|
||||||
# Server definitions
|
# Server definitions
|
||||||
#
|
#
|
||||||
|
Reference in New Issue
Block a user