Skip to content

Commit 8bf5dfa

Browse files
committed
done
1 parent f949ccd commit 8bf5dfa

File tree

7 files changed

+27
-0
lines changed

7 files changed

+27
-0
lines changed

.env-devel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ CLUSTERS_KEEPER_COMPUTATIONAL_BACKEND_DEFAULT_CLUSTER_AUTH='{"type":"tls","tls_c
5656
CLUSTERS_KEEPER_COMPUTATIONAL_BACKEND_DOCKER_IMAGE_TAG=master-github-latest
5757
CLUSTERS_KEEPER_DASK_NPROCS=1
5858
CLUSTERS_KEEPER_DASK_NTHREADS=0
59+
CLUSTERS_KEEPER_DASK_NTHREADS_MULTIPLIER=1
5960
CLUSTERS_KEEPER_DASK_WORKER_SATURATION=inf
6061
CLUSTERS_KEEPER_EC2_ACCESS=null
6162
CLUSTERS_KEEPER_SSM_ACCESS=null

services/clusters-keeper/src/simcore_service_clusters_keeper/core/settings.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -441,6 +441,14 @@ class ApplicationSettings(BaseCustomSettings, MixinLoggingSettings):
441441
),
442442
]
443443

444+
CLUSTERS_KEEPER_DASK_NTHREADS_MULTIPLIER: Annotated[
445+
PositiveInt,
446+
Field(
447+
description="multiplier for the default number of threads per process in the dask-sidecars, (see description in dask-sidecar)",
448+
le=10,
449+
),
450+
] = 1
451+
444452
CLUSTERS_KEEPER_DASK_WORKER_SATURATION: Annotated[
445453
NonNegativeFloat | Literal["inf"],
446454
Field(

services/clusters-keeper/src/simcore_service_clusters_keeper/data/docker-compose.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ services:
3232
- "node.role==manager"
3333
resources:
3434
limits:
35+
# TODO: should be tuned based on machines where this is deployed
3536
memory: 2048M
3637
secrets:
3738
- source: dask_tls_ca
@@ -58,6 +59,7 @@ services:
5859
DASK_LOG_FORMAT_LOCAL_DEV_ENABLED: 1
5960
DASK_NPROCS: ${DASK_NPROCS}
6061
DASK_NTHREADS: ${DASK_NTHREADS}
62+
DASK_NTHREADS_MULTIPLIER: ${DASK_NTHREADS_MULTIPLIER}
6163
DASK_SCHEDULER_URL: tls://dask-scheduler:8786
6264
DASK_SIDECAR_NON_USABLE_RAM: 0
6365
DASK_SIDECAR_NUM_NON_USABLE_CPUS: 0

services/clusters-keeper/src/simcore_service_clusters_keeper/utils/clusters.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,7 @@ def _convert_to_env_dict(entries: dict[str, Any]) -> str:
9191
f"CLUSTERS_KEEPER_EC2_SECRET_ACCESS_KEY={app_settings.CLUSTERS_KEEPER_EC2_ACCESS.EC2_SECRET_ACCESS_KEY}",
9292
f"DASK_NPROCS={app_settings.CLUSTERS_KEEPER_DASK_NPROCS}",
9393
f"DASK_NTHREADS={app_settings.CLUSTERS_KEEPER_DASK_NTHREADS}",
94+
f"DASK_NTHREADS_MULTIPLIER={app_settings.CLUSTERS_KEEPER_DASK_NTHREADS_MULTIPLIER}",
9495
f"DASK_TLS_CA_FILE={_HOST_TLS_CA_FILE_PATH}",
9596
f"DASK_TLS_CERT={_HOST_TLS_CERT_FILE_PATH}",
9697
f"DASK_TLS_KEY={_HOST_TLS_KEY_FILE_PATH}",

services/clusters-keeper/tests/unit/conftest.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,7 @@ def app_environment(
132132
"CLUSTERS_KEEPER_EC2_INSTANCES_PREFIX": faker.pystr(),
133133
"CLUSTERS_KEEPER_DASK_NPROCS": f"{faker.pyint()}",
134134
"CLUSTERS_KEEPER_DASK_NTHREADS": f"{faker.pyint(min_value=0)}",
135+
"CLUSTERS_KEEPER_DASK_NTHREADS_MULTIPLIER": f"{faker.pyint(min_value=1, max_value=10)}",
135136
"CLUSTERS_KEEPER_DASK_WORKER_SATURATION": f"{faker.pyfloat(min_value=0.1)}",
136137
"CLUSTERS_KEEPER_COMPUTATIONAL_BACKEND_DEFAULT_CLUSTER_AUTH": "{}",
137138
"PRIMARY_EC2_INSTANCES_KEY_NAME": faker.pystr(),

services/dask-sidecar/docker/boot.sh

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,19 @@ else
167167
DASK_NTHREADS=${DASK_NTHREADS:="$num_cpus"}
168168
DASK_MEMORY_LIMIT=${DASK_MEMORY_LIMIT:="$ram"}
169169
DASK_WORKER_NAME=${DASK_WORKER_NAME:="dask-sidecar_$(hostname)_$(date +'%Y-%m-%d_%T')_$$"}
170+
# If DASK_NTHREADS_MULTIPLIER is defined, multiply DASK_NTHREADS (round to nearest int, min 1)
171+
if [ -n "${DASK_NTHREADS_MULTIPLIER:-}" ]; then
172+
# check DASK_NTHREADS_MULTIPLIER is a number
173+
if awk -v m="$DASK_NTHREADS_MULTIPLIER" 'BEGIN{ if (m+0==m) exit 0; else exit 1 }'; then
174+
# multiply and round to nearest int, min 1
175+
new_nthreads=$(awk -v n="$DASK_NTHREADS" -v m="$DASK_NTHREADS_MULTIPLIER" 'BEGIN{ r=n*m; if(r<1) r=1; printf("%d", (r==int(r)?int(r):int(r+0.5))) }')
176+
DASK_NTHREADS="$new_nthreads"
177+
print_info "DASK_NTHREADS multiplied by ${DASK_NTHREADS_MULTIPLIER} -> ${DASK_NTHREADS}"
178+
else
179+
print_info "DASK_NTHREADS_MULTIPLIER is not numeric: ${DASK_NTHREADS_MULTIPLIER}"
180+
fi
181+
fi
182+
170183
#
171184
# 'daemonic processes are not allowed to have children' arises when running the sidecar.cli
172185
# because multi-processing library is used by the sidecar and the nanny does not like it

services/docker-compose.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -228,6 +228,7 @@ services:
228228
CLUSTERS_KEEPER_COMPUTATIONAL_BACKEND_DEFAULT_CLUSTER_AUTH: ${CLUSTERS_KEEPER_COMPUTATIONAL_BACKEND_DEFAULT_CLUSTER_AUTH}
229229
CLUSTERS_KEEPER_DASK_NPROCS: ${CLUSTERS_KEEPER_DASK_NPROCS}
230230
CLUSTERS_KEEPER_DASK_NTHREADS: ${CLUSTERS_KEEPER_DASK_NTHREADS}
231+
CLUSTERS_KEEPER_DASK_NTHREADS_MULTIPLIER: ${CLUSTERS_KEEPER_DASK_NTHREADS_MULTIPLIER}
231232
CLUSTERS_KEEPER_DASK_WORKER_SATURATION: ${CLUSTERS_KEEPER_DASK_WORKER_SATURATION}
232233
CLUSTERS_KEEPER_MAX_MISSED_HEARTBEATS_BEFORE_CLUSTER_TERMINATION: ${CLUSTERS_KEEPER_MAX_MISSED_HEARTBEATS_BEFORE_CLUSTER_TERMINATION}
233234
CLUSTERS_KEEPER_TASK_INTERVAL: ${CLUSTERS_KEEPER_TASK_INTERVAL}

0 commit comments

Comments
 (0)