feat(presto/slurm): CPU NUMA worker placement and UCX row exchange - #393
Draft
misiugodfrey wants to merge 1 commit into
Draft
feat(presto/slurm): CPU NUMA worker placement and UCX row exchange#393misiugodfrey wants to merge 1 commit into
misiugodfrey wants to merge 1 commit into
Conversation
|
Auto-sync is disabled for draft pull requests in this repository. Workflows must be run manually. Contributors can view more details about this message here. |
Based on kjmph's bench33 POC patch. Adds runtime support for launching multiple CPU workers per Slurm node with per-worker NUMA binding and UCX row exchange transport. - numa-worker-launch.sh: numactl wrapper that binds a worker to its assigned NUMA node (cpunodebind + membind) and verifies Cpus_allowed and Mems_allowed before exec - prepare_cpu_numa_layout: discovers NUMA topology across all nodes and builds per-worker-slot NUMA node assignments; rejects heterogeneous allocations - run_worker: CPU variant path spawns workers via numa-worker-launch.sh with computed NUMA node and HTTP port offsets per slot - resolve_node_ipv4_for_interface / resolve_node_ipv4_for_ucx_device: per-GPU/per-worker UCX rail selection and internal address resolution - --verify-cpu-ucx: checks all expected worker UCX ports are ready before the benchmark starts - launch-run.sh: --cpu, --use-numa, --workers-per-host, --ucx-device, --internal-address-interface, --verify-cpu-ucx flags - launcher_common.sh: CLUSTER_UCX_NET_DEVICES_BY_LOCAL_WORKER and internal address interface maps; per-rail UCX resolution - worker.env: baseline CPU UCX runtime knobs (VELOX_UCX_CPU_EXCHANGE, UCX_TLS, UCX_NET_DEVICES, UCX_POSIX_USE_PROC_LINK, module dir) - launch-analyze-tables.sh: CPU variant support, --worker-env-file
misiugodfrey
force-pushed
the
misiug/bench-cpu-workers
branch
from
July 28, 2026 16:03
c6f42f5 to
4b78e48
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds runtime support for launching multiple CPU Presto workers per Slurm node with per-worker NUMA binding and UCX row exchange transport. This is the largest behavior change in the bench33 series.
Based on kjmph's bench33 POC patch.
numa-worker-launch.sh(new): thinnumactlwrapper that binds a worker process to its assigned NUMA node (cpunodebind+membind) and verifiesCpus_allowed_list/Mems_allowed_listfrom/proc/self/statusbefore exec; preserves PID across the diagnostic shell so perf can attachprepare_cpu_numa_layout(new function infunctions.sh): discovers NUMA topology across all allocated nodes viasrun --overlap; builds a per-worker-slot NUMA node assignment table; rejects heterogeneous allocations rather than silently applying mismatched limitsrun_workerCPU path: spawns one srun per worker slot with computed HTTP port offsets and NUMA node; each slot runs throughnuma-worker-launch.shresolve_node_ipv4_for_interface/resolve_node_ipv4_for_ucx_deviceresolve the per-GPU/per-rail internal IP used for each worker'spresto.internal-address; handles multi-rail setups viaCLUSTER_UCX_NET_DEVICES_BY_LOCAL_WORKER--verify-cpu-ucx: pre-benchmark check that all expected worker UCX ports are responding before query execution startslaunch-run.sh: new flags--cpu,--use-numa,--workers-per-host N,--ucx-net-device,--internal-address-interface,--verify-cpu-ucxworker.env: baseline CPU UCX runtime knobs:VELOX_UCX_CPU_EXCHANGE,PRESTO_WORKER_UCX_LOCAL_LIB_FIRST,UCX_MODULE_DIR,UCX_TLS=sysv,tcp,self,UCX_NET_DEVICES,UCX_POSIX_USE_PROC_LINK=nlaunch-analyze-tables.sh: CPU variant support,--worker-env-fileoptionDependencies
bench-numa-config) for the NUMA topology discovery helpers incommon_functions.shbench-slurm-robustness) for srun PID tracking and result dir structureVerification
CPU_WORKERS_PER_HOST=2, launch a CPU benchmark with--use-numaand verify each worker's container is bound to a distinct NUMA node (checkCpus_allowed_listin worker logs)--verify-cpu-ucxand confirm the preflight check blocks until all UCX ports are respondinglaunch-analyze-tables.sh --cpuand verify it successfully runs the analyze job with CPU workersworker.envUCX knobs are picked up:UCX_TLS=sysv,tcp,selfandUCX_POSIX_USE_PROC_LINK=nshould appear in worker environmentCLUSTER_UCX_NET_DEVICES_BY_LOCAL_WORKER, verify each worker'sUCX_NET_DEVICESis set to the correct per-slot NIC./ci/check_style.shon changed files