Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
d426d28
Add nixlbench test to CI tests
ovidiusm Jul 30, 2025
a31c303
Fix build in AWS image
ovidiusm Jul 31, 2025
bdd5593
Add more tests
ovidiusm Jul 31, 2025
47e86db
Cleanup test script
ovidiusm Aug 2, 2025
9cde451
Cleanup test script
ovidiusm Aug 2, 2025
edfebbc
Merge remote-tracking branch 'dynamo/main' into nixlbench-test
ovidiusm Aug 2, 2025
2ddde77
Move nixlbench tests to their own script
ovidiusm Aug 5, 2025
f181f98
Merge remote-tracking branch 'dynamo/main' into nixlbench-test
ovidiusm Aug 5, 2025
323f528
Add nixlbench test to the CI config
ovidiusm Aug 5, 2025
33fcaa2
Simplify ucx path handling in meson.build
ovidiusm Aug 5, 2025
06a99ad
Use dynamic etcd port and fix CI yaml
ovidiusm Aug 5, 2025
4025746
Clean up build scripts
ovidiusm Aug 5, 2025
2583654
Revert "Simplify ucx path handling in meson.build"
ovidiusm Aug 6, 2025
89a9553
Merge remote-tracking branch 'dynamo/main' into nixlbench-test
ovidiusm Aug 6, 2025
5e9b50d
Remove sudo fron nixl installation commands since tests may need to c…
ovidiusm Aug 6, 2025
ccab6df
Revert the other sudo
ovidiusm Aug 6, 2025
56fce85
Remove unused UCX dependency in nixlbench
ovidiusm Aug 7, 2025
a0787f4
Fix nixlbench build with nvshmem
ovidiusm Aug 8, 2025
da8a3c6
Fix CI builds
ovidiusm Aug 8, 2025
81b1216
Cleanup test script
ovidiusm Aug 8, 2025
5fa90a7
Merge remote-tracking branch 'dynamo/main' into nixlbench-test
ovidiusm Aug 8, 2025
1ec64bf
Add tests to the build matrix
ovidiusm Aug 11, 2025
eb1b8c1
Merge branch 'main' into nixlbench-test
brminich Aug 11, 2025
8ffd7f7
Merge remote-tracking branch 'dynamo/main' into nixlbench-test
ovidiusm Aug 11, 2025
746572c
Merge branch 'main' into nixlbench-test
brminich Aug 12, 2025
74090e8
Merge branch 'main' into nixlbench-test
brminich Aug 12, 2025
90f6caf
Fix merge
ovidiusm Aug 12, 2025
2ebbfdf
Merge remote-tracking branch 'origin/nixlbench-test' into nixlbench-test
ovidiusm Aug 12, 2025
645e084
Merge remote-tracking branch 'dynamo/main' into nixlbench-test
ovidiusm Aug 12, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .ci/jenkins/lib/build-matrix.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,12 @@ steps:
run: |
.gitlab/test_python.sh ${NIXL_INSTALL_DIR}

- name: Test Nixlbench
parallel: false
timeout: "${TEST_TIMEOUT}"
run: |
.gitlab/test_nixlbench.sh ${NIXL_INSTALL_DIR}

- name: Test Rust
parallel: false
timeout: "${TEST_TIMEOUT}"
Expand Down
8 changes: 8 additions & 0 deletions .ci/jenkins/lib/test-matrix.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -111,6 +111,14 @@ steps:
docker rm -f "${JOB_BASE_NAME}-${BUILD_ID}-${axis_index}"
Comment thread
dpressle marked this conversation as resolved.
docker image rm -f "${JOB_BASE_NAME}-${BUILD_ID}-${axis_index}"

- name: Test Nixlbench
parallel: false
run: |
timeout ${TEST_TIMEOUT}m docker exec -w ${WORKSPACE} "${JOB_BASE_NAME}-${BUILD_ID}-${axis_index}" /bin/bash -c ".gitlab/test_nixlbench.sh ${INSTALL_DIR}"
onfail: |
docker rm -f "${JOB_BASE_NAME}-${BUILD_ID}-${axis_index}"
docker image rm -f "${JOB_BASE_NAME}-${BUILD_ID}-${axis_index}"

- name: Test Rust
parallel: false
run: |
Expand Down
7 changes: 6 additions & 1 deletion .gitlab/build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ $SUDO apt-get -qq install -y curl \
numactl \
autotools-dev \
automake \
git \
libtool \
libz-dev \
libiberty-dev \
Expand Down Expand Up @@ -126,6 +127,7 @@ curl -fSsL "https://github.com/openucx/ucx/tarball/${UCX_VERSION}" | tar xz
)

( \
cd /tmp && \
git clone --recurse-submodules --depth 1 --shallow-submodules https://github.com/aws/aws-sdk-cpp.git --branch 1.11.581 && \
mkdir aws_sdk_build && \
cd aws_sdk_build && \
Expand All @@ -148,8 +150,11 @@ export UCX_TLS=^cuda_ipc

# shellcheck disable=SC2086
meson setup nixl_build --prefix=${INSTALL_DIR} -Ducx_path=${UCX_INSTALL_DIR} -Dbuild_docs=true -Drust=false ${EXTRA_BUILD_ARGS}
cd nixl_build && ninja && ninja install
ninja -C nixl_build && ninja -C nixl_build install

# TODO(kapila): Copy the nixl.pc file to the install directory if needed.
# cp ${BUILD_DIR}/nixl.pc ${INSTALL_DIR}/lib/pkgconfig/nixl.pc

cd benchmark/nixlbench
meson setup nixlbench_build -Dnixl_path=${INSTALL_DIR} -Dprefix=${INSTALL_DIR}
ninja -C nixlbench_build && ninja -C nixlbench_build install
89 changes: 89 additions & 0 deletions .gitlab/test_nixlbench.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
#!/bin/sh
# SPDX-FileCopyrightText: Copyright (c) 2025 NVIDIA CORPORATION & AFFILIATES. All rights reserved.
# SPDX-License-Identifier: Apache-2.0
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.


# shellcheck disable=SC1091
. "$(dirname "$0")/../.ci/scripts/common.sh"

set -e
set -x

# Parse commandline arguments with first argument being the install directory.
INSTALL_DIR=$1

if [ -z "$INSTALL_DIR" ]; then
echo "Usage: $0 <install_dir>"
exit 1
fi

ARCH=$(uname -m)
[ "$ARCH" = "arm64" ] && ARCH="aarch64"

export LD_LIBRARY_PATH=${INSTALL_DIR}/lib:${INSTALL_DIR}/lib/$ARCH-linux-gnu:${INSTALL_DIR}/lib/$ARCH-linux-gnu/plugins:/usr/local/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/lib64/stubs:/usr/local/cuda-12.8/compat:$LD_LIBRARY_PATH
Comment thread
brminich marked this conversation as resolved.
export LD_LIBRARY_PATH=/usr/local/cuda/compat/lib.real:$LD_LIBRARY_PATH

export CPATH=${INSTALL_DIR}/include:$CPATH
export PATH=${INSTALL_DIR}/bin:$PATH
export PKG_CONFIG_PATH=${INSTALL_DIR}/lib/pkgconfig:$PKG_CONFIG_PATH
export NIXL_PLUGIN_DIR=${INSTALL_DIR}/lib/$ARCH-linux-gnu/plugins

echo "==== Show system info ===="
env
nvidia-smi topo -m || true
ibv_devinfo || true
uname -a || true

echo "==== Running ETCD server ===="
etcd_port=$(get_next_tcp_port)
etcd_peer_port=$(get_next_tcp_port)
export NIXL_ETCD_ENDPOINTS="http://127.0.0.1:${etcd_port}"
export NIXL_ETCD_PEER_URLS="http://127.0.0.1:${etcd_peer_port}"
etcd --listen-client-urls ${NIXL_ETCD_ENDPOINTS} --advertise-client-urls ${NIXL_ETCD_ENDPOINTS} \
--listen-peer-urls ${NIXL_ETCD_PEER_URLS} --initial-advertise-peer-urls ${NIXL_ETCD_PEER_URLS} \
--initial-cluster default=${NIXL_ETCD_PEER_URLS} &
sleep 5

echo "==== Running Nixlbench tests ===="
cd ${INSTALL_DIR}

run_nixlbench() {
args="$@"
./bin/nixlbench --etcd-endpoints ${NIXL_ETCD_ENDPOINTS} --initiator_seg_type DRAM --target_seg_type DRAM --filepath /tmp --total_buffer_size 80000000 --start_block_size 4096 --max_block_size 16384 --start_batch_size 1 --max_batch_size 4 $args
}

run_nixlbench_one_worker() {
benchmark_group=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)
args="$@"
run_nixlbench --benchmark_group $benchmark_group $args
}

run_nixlbench_two_workers() {
benchmark_group=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)
args="$@"
run_nixlbench --benchmark_group $benchmark_group $args &
pid=$!
sleep 1
run_nixlbench --benchmark_group $benchmark_group $args
wait $pid
}

run_nixlbench_two_workers --backend UCX --op_type READ
run_nixlbench_two_workers --backend UCX --op_type WRITE
run_nixlbench_one_worker --backend POSIX --op_type READ
run_nixlbench_one_worker --backend POSIX --op_type WRITE

pkill etcd
6 changes: 1 addition & 5 deletions benchmark/nixlbench/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -82,10 +82,6 @@ if cuda_available
endif
endif


# UCX
ucx_dep = dependency('ucx')
Comment thread
brminich marked this conversation as resolved.

# GFlags
gflags_dep = dependency('gflags', required: true)

Expand Down Expand Up @@ -206,7 +202,7 @@ if nvshmem_available
]

if etcd_available
nvcc_args += ['-letcd-cpp-api', '-lcpprest']
nvcc_args += ['-letcd-cpp-api-core', '-lcpprest']
etcd_rt = meson.current_build_dir() + '/src/runtime/etcd/libetcd_rt.a.p/etcd_rt.cpp.o'
nvcc_cmd_files += etcd_rt
endif
Expand Down
6 changes: 3 additions & 3 deletions benchmark/nixlbench/meson_options.txt
Original file line number Diff line number Diff line change
Expand Up @@ -13,9 +13,9 @@
# See the License for the specific language governing permissions and
# limitations under the License.

option('cudapath_inc', type: 'string', value: '/usr/local/cuda/include', description: 'Include path for CUDA')
option('cudapath_lib', type: 'string', value: '/usr/local/cuda/lib64/', description: 'Library path for CUDA')
option('cudapath_stub', type: 'string', value: '/usr/local/cuda/lib64/stubs', description: 'Extra Stub path for CUDA')
option('cudapath_inc', type: 'string', value: '', description: 'Include path for CUDA')
option('cudapath_lib', type: 'string', value: '', description: 'Library path for CUDA')
option('cudapath_stub', type: 'string', value: '', description: 'Extra Stub path for CUDA')
Comment thread
brminich marked this conversation as resolved.
option('etcd_inc_path', type: 'string', value: '', description: 'Path to ETCD C++ Client includes')
option('etcd_lib_path', type: 'string', value: '', description: 'Path to ETCD C++ Client library')
option('nixl_path', type: 'string', value: '/usr/local', description: 'Path to NiXL')
Expand Down