Add option to detect available cores when num_threads=-1 (#380)

When configuring `num_threads=-1` in `renderd.conf` for a `renderd` section, the value will be set to the number of cores on the running system.
This commit is contained in:
Hummeltech
2024-01-29 19:30:35 -07:00
committed by GitHub
parent 6e2fc56888
commit 086cc8892e
4 changed files with 39 additions and 7 deletions

View File

@ -1,4 +1,4 @@
.TH RENDERD.CONF 5 "2023-12-19" "mod_tile v0.7.0" .TH RENDERD.CONF 5 "2024-01-22" "mod_tile v0.7.0"
.\" Please adjust this date whenever revising the manpage. .\" Please adjust this date whenever revising the manpage.
.SH NAME .SH NAME
@ -41,6 +41,7 @@ This option and \fBsocketname\fR are mutually exclusive.
.TP .TP
.B num_threads .B num_threads
Specify the number of threads to be used for \fBrenderd\fR. Specify the number of threads to be used for \fBrenderd\fR.
A value of \fB'-1'\fR will configure \fBnum_threads\fR to the number of cores on the system.
The default value is \fB'4'\fR (macro definition \fB'NUM_THREADS'\fR). The default value is \fB'4'\fR (macro definition \fB'NUM_THREADS'\fR).
.TP .TP
@ -205,4 +206,4 @@ Only used by \fBrenderd\fR.
.SH AUTHOR .SH AUTHOR
renderd was written by Jon Burgess, and other OpenStreetMap project members. renderd was written by Jon Burgess, and other OpenStreetMap project members.
.PP .PP
This manual page was written by OpenStreetMap authors. This manual page was written by OpenStreetMap authors.

View File

@ -66,7 +66,7 @@ static int exit_pipe_fd;
static renderd_config config; static renderd_config config;
int noSlaveRenders; int num_slave_threads;
int foreground = 0; int foreground = 0;
@ -826,7 +826,7 @@ int main(int argc, char **argv)
exit(1); exit(1);
} }
noSlaveRenders = 0; num_slave_threads = 0;
int iconf = -1; int iconf = -1;
char buffer[PATH_MAX]; char buffer[PATH_MAX];
@ -873,6 +873,10 @@ int main(int argc, char **argv)
config_slaves[render_sec].pid_filename = iniparser_getstring(ini, config_slaves[render_sec].pid_filename = iniparser_getstring(ini,
buffer, (char *) RENDERD_PIDFILE); buffer, (char *) RENDERD_PIDFILE);
if (config_slaves[render_sec].num_threads == -1) {
config_slaves[render_sec].num_threads = sysconf(_SC_NPROCESSORS_ONLN);
}
if (render_sec == active_slave) { if (render_sec == active_slave) {
config.socketname = config_slaves[render_sec].socketname; config.socketname = config_slaves[render_sec].socketname;
config.iphostname = config_slaves[render_sec].iphostname; config.iphostname = config_slaves[render_sec].iphostname;
@ -890,7 +894,7 @@ int main(int argc, char **argv)
config.mapnik_font_dir_recurse = iniparser_getboolean(ini, config.mapnik_font_dir_recurse = iniparser_getboolean(ini,
"mapnik:font_dir_recurse", MAPNIK_FONTS_DIR_RECURSE); "mapnik:font_dir_recurse", MAPNIK_FONTS_DIR_RECURSE);
} else { } else {
noSlaveRenders += config_slaves[render_sec].num_threads; num_slave_threads += config_slaves[render_sec].num_threads;
} }
} }
} }
@ -1051,7 +1055,7 @@ int main(int argc, char **argv)
g_logger(G_LOG_LEVEL_INFO, "config renderd: num_threads=%d", config.num_threads); g_logger(G_LOG_LEVEL_INFO, "config renderd: num_threads=%d", config.num_threads);
if (active_slave == 0) { if (active_slave == 0) {
g_logger(G_LOG_LEVEL_INFO, "config renderd: num_slaves=%d", noSlaveRenders); g_logger(G_LOG_LEVEL_INFO, "config renderd: num_slave_threads=%d", num_slave_threads);
} }
g_logger(G_LOG_LEVEL_INFO, "config renderd: tile_dir=%s", config.tile_dir); g_logger(G_LOG_LEVEL_INFO, "config renderd: tile_dir=%s", config.tile_dir);
@ -1165,7 +1169,7 @@ int main(int argc, char **argv)
//Only the master renderd opens connections to its slaves //Only the master renderd opens connections to its slaves
k = 0; k = 0;
slave_threads slave_threads
= (pthread_t *) malloc(sizeof(pthread_t) * noSlaveRenders); = (pthread_t *) malloc(sizeof(pthread_t) * num_slave_threads);
for (i = 1; i < MAX_SLAVES; i++) { for (i = 1; i < MAX_SLAVES; i++) {
for (j = 0; j < config_slaves[i].num_threads; j++) { for (j = 0; j < config_slaves[i].num_threads; j++) {

View File

@ -11,6 +11,9 @@
#----------------------------------------------------------------------------- #-----------------------------------------------------------------------------
include(CTest) include(CTest)
include(ProcessorCount)
processorcount(PROCESSOR_COUNT)
execute_process(COMMAND ${APXS_EXECUTABLE} -q progname execute_process(COMMAND ${APXS_EXECUTABLE} -q progname
OUTPUT_VARIABLE HTTPD_PROGNAME OUTPUT_VARIABLE HTTPD_PROGNAME
@ -635,6 +638,28 @@ foreach(STORAGE_BACKEND_INDEX RANGE ${STORAGE_BACKENDS_LENGTH})
set_tests_properties(stats_urls_${STORAGE_BACKEND} PROPERTIES set_tests_properties(stats_urls_${STORAGE_BACKEND} PROPERTIES
FIXTURES_REQUIRED "services_started_${STORAGE_BACKEND};tiles_downloaded_${STORAGE_BACKEND}" FIXTURES_REQUIRED "services_started_${STORAGE_BACKEND};tiles_downloaded_${STORAGE_BACKEND}"
) )
if(NOT PROCESSOR_COUNT EQUAL 0)
# Set CTEST_NUM_SLAVE_THREADS to 5 (renderd1 = 1, renderd2 = 4 [NUM_THREADS])
set(CTEST_NUM_SLAVE_THREADS 5)
add_test(
NAME renderd_num_threads_${STORAGE_BACKEND}
COMMAND ${BASH} -c "
if ! ${GREP_EXECUTABLE} -q \"config renderd: num_threads=${PROCESSOR_COUNT}\" \"${RENDERD0_LOG}\"; then
${GREP_EXECUTABLE} \"config renderd: num_threads=\" \"${RENDERD0_LOG}\"
exit 1;
fi
if ! ${GREP_EXECUTABLE} -q \"config renderd: num_slave_threads=${CTEST_NUM_SLAVE_THREADS}\" \"${RENDERD0_LOG}\"; then
${GREP_EXECUTABLE} \"config renderd: num_slave_threads=\" \"${RENDERD0_LOG}\"
exit 1;
fi
"
WORKING_DIRECTORY tests
)
set_tests_properties(renderd_num_threads_${STORAGE_BACKEND} PROPERTIES
FIXTURES_REQUIRED services_started_${STORAGE_BACKEND}
REQUIRED_FILES ${RENDERD0_LOG}
)
endif()
add_test( add_test(
NAME stop_services_${STORAGE_BACKEND} NAME stop_services_${STORAGE_BACKEND}
COMMAND ${BASH} -c " COMMAND ${BASH} -c "

View File

@ -42,11 +42,13 @@ XML=@PROJECT_SOURCE_DIR@/utils/example-map/mapnik.xml
[renderd1] [renderd1]
iphostname=@RENDERD1_HOST@ iphostname=@RENDERD1_HOST@
ipport=@RENDERD1_PORT@ ipport=@RENDERD1_PORT@
num_threads=1
pid_file=@RENDERD1_PID@ pid_file=@RENDERD1_PID@
stats_file=@TEST_RUN_DIR@/renderd1_@STORAGE_BACKEND@.stats stats_file=@TEST_RUN_DIR@/renderd1_@STORAGE_BACKEND@.stats
tile_dir=@TILE_DIR@ tile_dir=@TILE_DIR@
[renderd0] [renderd0]
num_threads=-1
pid_file=@RENDERD0_PID@ pid_file=@RENDERD0_PID@
socketname=@RENDERD0_SOCKET@ socketname=@RENDERD0_SOCKET@
stats_file=@TEST_RUN_DIR@/renderd0_@STORAGE_BACKEND@.stats stats_file=@TEST_RUN_DIR@/renderd0_@STORAGE_BACKEND@.stats