Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
0cf7084
test(rccl): add net_ib_cast scheduler, recovery and GDR probe fakes
aduforest Oct 20, 2026
f921ea4
test(rccl): place the NET_OPTIONAL_RECV_COMPLETION stub next to rcclU…
aduforest Oct 20, 2026
196c48f
test(rccl): add the shared verbs, socket and net_ib_cast fakes
aduforest Oct 20, 2026
56646bf
test(rccl): add host microtests for net_ib_cast init, capability and GIN
aduforest Oct 20, 2026
4d3155b
test(rccl): address review of the net_ib_cast init microtests
aduforest Oct 20, 2026
b0cf375
Merge origin/develop into users/aduforest/aicomrccl-2813-net-ib-cast-…
aduforest Oct 20, 2026
f66e1e4
test(rccl): host-only suites declare num_gpus 0
aduforest Oct 21, 2026
5b15c49
test(rccl): skip leaking gin error-path tests under ASan; make the IB…
aduforest Oct 21, 2026
a7e2c2e
test(rccl): make the no-verbs init test bite; give merged devices rea…
aduforest Oct 21, 2026
3b4b9ed
Merge remote-tracking branch 'origin/develop' into users/aduforest/ai…
aduforest Oct 22, 2026
022046c
test(rccl): net_ib_cast shared hooks, kAsan header and fewer log chec…
aduforest Oct 22, 2026
79e7fdd
Merge remote-tracking branch 'origin/develop' into users/aduforest/ai…
aduforest Oct 22, 2026
5124b17
test(rccl): net_ib_cast aligned comms, in-range event, no IbCastDevs[…
aduforest Oct 22, 2026
3d9a2d4
Merge remote-tracking branch 'origin/develop' into users/aduforest/ai…
aduforest Oct 22, 2026
c0bb04b
test(rccl): fake the ionic uDMA queries and cover the runtime uDMA co…
aduforest Oct 22, 2026
8ef1ac9
Merge remote-tracking branch 'origin/develop' into users/aduforest/ai…
aduforest Oct 22, 2026
dbe4f99
test(rccl): address ARGUS findings on net_ib_cast init tests
aduforest Oct 22, 2026
48bcb85
Merge remote-tracking branch 'origin/develop' into users/aduforest/ai…
aduforest Oct 22, 2026
305951a
test(rccl): name the double-free pin's ticket
aduforest Oct 22, 2026
e674fbd
Merge remote-tracking branch 'origin/develop' into users/aduforest/ai…
aduforest Oct 24, 2026
bba9fe1
test(rccl): set up device 3 so only the range check rejects it per re…
aduforest Oct 24, 2026
62483ad
test(rccl): leave ci-precheckin.json to its code owners
aduforest Oct 24, 2026
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
24 changes: 24 additions & 0 deletions projects/rccl/test/host/AsanCheck.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
/*************************************************************************
* Copyright (c) 2026 Advanced Micro Devices, Inc. All rights reserved.
*
* See LICENSE.txt for license information
************************************************************************/

// kAsan is true in an AddressSanitizer build; tests that pin a production leak or overflow skip under it.
#ifndef RCCL_TEST_HOST_ASANCHECK_H_
#define RCCL_TEST_HOST_ASANCHECK_H_

#if defined(__SANITIZE_ADDRESS__)
#define RCCL_TEST_ASAN 1
#elif defined(__has_feature)
#if __has_feature(address_sanitizer)
#define RCCL_TEST_ASAN 1
#endif
#endif
#ifndef RCCL_TEST_ASAN
#define RCCL_TEST_ASAN 0
#endif

constexpr bool kAsan = RCCL_TEST_ASAN;

#endif // RCCL_TEST_HOST_ASANCHECK_H_
129 changes: 129 additions & 0 deletions projects/rccl/test/host/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,58 @@ rccl_assert_source_line("${_rccl_src_root}/transport/net_ib/connect.cc"
rccl_assert_source_line("${CMAKE_CURRENT_LIST_DIR}/fakes/transport_net_ib_fakes.cc"
"int64_t ncclParamIbQpsPerConn() { return g_loadParam(\"IB_QPS_PER_CONNECTION\", 1); }"
"the IbQpsPerConn fake default")
# The net_ib_cast connect / qp_sharing fakes repeat these params; both copies must agree.
foreach(_param
"NCCL_PARAM(IbCastTimeout, \"IB_TIMEOUT\", 20)"
"NCCL_PARAM(IbCastRetryCnt, \"IB_RETRY_CNT\", 7)"
"NCCL_PARAM(IbCastPkey, \"IB_PKEY\", 0)"
"NCCL_PARAM(IbCastQpsPerConn, \"IB_QPS_PER_CONNECTION\", 2)"
"NCCL_PARAM(IbCastUseInline, \"IB_USE_INLINE\", 0)"
"NCCL_PARAM(IbCastGdrFlushDisable, \"GDR_FLUSH_DISABLE\", 1)"
"NCCL_PARAM(IbCastSl, \"IB_SL\", -1)"
"NCCL_PARAM(IbCastTc, \"IB_TC\", -1)"
"RCCL_PARAM(IbCastUDMAPolicy, \"IB_UDMA_POLICY\", 0)")
rccl_assert_source_line("${_rccl_src_root}/transport/net_ib_cast/connect.cc"
"${_param}" "fakes/net_ib_cast_connect_fakes.cc")
rccl_assert_source_line("${CMAKE_CURRENT_LIST_DIR}/fakes/net_ib_cast_connect_fakes.cc"
"${_param}" "the connect.cc default")
endforeach()
foreach(_param
"RCCL_PARAM(IbCastQpSharingEnable, \"IB_QP_SHARING_ENABLE\", 0)"
"RCCL_PARAM(IbCastCommNGroups, \"IB_COMM_NGROUPS\", 4)"
"RCCL_PARAM(IbCastQpSharingValidatePool, \"IB_QP_SHARING_VALIDATE_POOL\", 0)")
rccl_assert_source_line("${_rccl_src_root}/transport/net_ib_cast/qp_sharing.cc"
"${_param}" "fakes/net_ib_cast_qp_sharing_fakes.cc")
rccl_assert_source_line("${CMAKE_CURRENT_LIST_DIR}/fakes/net_ib_cast_qp_sharing_fakes.cc"
"${_param}" "the qp_sharing.cc default")
endforeach()
# The net_ib_cast and socket fakes copy these lines from production; pin both ends ("<SEMI>" stands for a semicolon).
set(_rccl_cast_pins
"transport/net_ib_cast/p2p.cc" "NCCL_PARAM(IbCastArThreshold, \"IB_AR_THRESHOLD\", -2)<SEMI>"
"net_ib_cast_p2p_fakes.cc" "return g_loadParam(\"IB_AR_THRESHOLD\", -2)<SEMI> }"
"transport/net_ib_cast/p2p.cc" "int64_t IbCastArThreshold = 8192<SEMI>"
"net_ib_cast_p2p_fakes.cc" "int64_t IbCastArThreshold = 8192<SEMI>"
"transport/net_ib_cast/p2p.cc" "NCCL_PARAM(IbCastReceiverSideMatchingScheme, \"IB_RECEIVER_SIDE_MATCHING_SCHEME\", -2)<SEMI>"
"net_ib_cast_p2p_fakes.cc" "return g_loadParam(\"IB_RECEIVER_SIDE_MATCHING_SCHEME\", -2)<SEMI> }"
"transport/net_ib_cast/p2p.cc" "RCCL_PARAM(IbCastGdrFlushGpuMemNoRelaxedOrdering, \"GDR_FLUSH_GPU_MEM_NO_RELAXED_ORDERING\", 1)<SEMI>"
"net_ib_cast_p2p_fakes.cc" "return g_loadParam(\"RCCL_GDR_FLUSH_GPU_MEM_NO_RELAXED_ORDERING\", 1)<SEMI>"
"transport/net_ib_cast/p2p.cc" "const char* IbCastReqTypeStr[] = {\"Unused\", \"Send\", \"Recv\", \"Flush\", \"IPut\"}<SEMI>"
"net_ib_cast_p2p_fakes.cc" "const char* IbCastReqTypeStr[] = {\"Unused\", \"Send\", \"Recv\", \"Flush\", \"IPut\"}<SEMI>"
"transport/net_ib_cast/p2p_resiliency.cc" "NCCL_PARAM(IbCastResiliencyPortFailover, \"IB_RESILIENCY_PORT_FAILOVER\", 0)<SEMI>"
"net_ib_cast_p2p_resiliency_fakes.cc" "return g_loadParam(\"IB_RESILIENCY_PORT_FAILOVER\", 0)<SEMI> }"
"transport/net_ib_cast/p2p_resiliency.cc" "NCCL_PARAM(IbCastResiliencyPortFailoverMaxAttempts, \"IB_RESILIENCY_PORT_FAILOVER_MAX_ATTEMPTS\", 1)<SEMI>"
"net_ib_cast_p2p_resiliency_fakes.cc" "return g_loadParam(\"IB_RESILIENCY_PORT_FAILOVER_MAX_ATTEMPTS\", 1)<SEMI>"
"transport/net_ib_cast/p2p_resiliency.cc" "NCCL_PARAM(IbCastResiliencyPortFailoverProbeDelay, \"IB_RESILIENCY_PORT_FAILOVER_PROBE_DELAY\", 10)<SEMI>"
"net_ib_cast_p2p_resiliency_fakes.cc" "return g_loadParam(\"IB_RESILIENCY_PORT_FAILOVER_PROBE_DELAY\", 10)<SEMI>"
"misc/socket.cc" "static uint64_t cached = NCCL_SOCKET_MAGIC<SEMI>"
"socket_fakes.cc" "uint64_t ncclSocketDefaultMagic(void) { return NCCL_SOCKET_MAGIC<SEMI> }")
while(_rccl_cast_pins)
list(POP_FRONT _rccl_cast_pins _src _prod _fake _copy)
string(REPLACE "<SEMI>" ";" _prod "${_prod}")
string(REPLACE "<SEMI>" ";" _copy "${_copy}")
rccl_assert_source_line("${_rccl_src_root}/${_src}" "${_prod}" "fakes/${_fake}")
rccl_assert_source_line("${CMAKE_CURRENT_LIST_DIR}/fakes/${_fake}" "${_copy}" "the ${_src} copy")
endwhile()
rccl_assert_source_line("${CMAKE_CURRENT_LIST_DIR}/fakes/tuning_fakes.cc"
"int64_t g_paramMinNchannels = -2;" "the MinNchannels fake default")
rccl_assert_source_line("${CMAKE_CURRENT_LIST_DIR}/fakes/tuning_fakes.cc"
Expand Down Expand Up @@ -120,6 +172,17 @@ foreach(_path_cc "${_rccl_src_root}/graph/topo.cc" "${CMAKE_CURRENT_LIST_DIR}/fa
rccl_assert_source_line("${_path_cc}" "const char* topoPathTypeStr[] = {\"LOC\", \"XGMI\", \"NVB\", \"C2C\", \"PIX\", \
\"PXB\", \"P2C\", \"PXN\", \"PHB\", \"SYS\", \"NET\", \"DIS\"};" "fakes/topo_stubs.cc: topoPathTypeStr")
endforeach()
foreach(_path_cc "${_rccl_src_root}/transport/net_ib_cast/p2p_resiliency_recovery.cc"
"${CMAKE_CURRENT_LIST_DIR}/fakes/net_ib_cast_p2p_resiliency_recovery_fakes.cc")
rccl_assert_source_line("${_path_cc}" "NCCL_PARAM(IbCastResiliencyPortRecovery, \"IB_RESILIENCY_PORT_RECOVERY\", 0);"
"fakes/net_ib_cast_p2p_resiliency_recovery_fakes.cc: ncclParamIbCastResiliencyPortRecovery()")
endforeach()
rccl_assert_source_line("${_rccl_src_root}/transport/net.cc"
"NCCL_PARAM(NetOptionalRecvCompletion, \"NET_OPTIONAL_RECV_COMPLETION\", 1);"
"fakes/transport_stubs.cc: ncclParamNetOptionalRecvCompletion()")
rccl_assert_source_line("${CMAKE_CURRENT_LIST_DIR}/fakes/transport_stubs.cc"
"int64_t ncclParamNetOptionalRecvCompletion() { return g_loadParam(\"NET_OPTIONAL_RECV_COMPLETION\", 1); }"
"the NetOptionalRecvCompletion fake default")
unset(_rccl_src_root)

# Define the per-target micro-test source lists shared by BOTH build paths.
Expand Down Expand Up @@ -713,6 +776,43 @@ function(rccl_define_micro_source_lists)
fakes/utils_fakes.cc # getBusId (alloc.h side stream)
../common/main_altrsmi.cpp
PARENT_SCOPE)

# rccl-UnitTestsMicroNetIbCastInit -- src/transport/net_ib_cast/{init,common,capability,reg,gdr,multiplane,gin,
# net_ib_cast_gid_inspect}.cc. Own binary: it fakes gdr_probe.cc, which rccl-UnitTestsMicro compiles.
set(TEST_MICRO_NET_IB_CAST_INIT_SOURCE_FILES
net-ib-cast-init-test.cc
net-ib-cast-capability-test.cc
net-ib-cast-common-test.cc
net-ib-cast-gdr-test.cc
net-ib-cast-gid-inspect-test.cc
net-ib-cast-gin-test.cc
net-ib-cast-multiplane-test.cc
net-ib-cast-reg-test.cc
fakes/env_fakes.cc
fakes/gdr_peermem_fakes.cc
fakes/gdr_probe_fakes.cc
fakes/hip_fakes.cc
fakes/ibvwrap_fakes.cc
fakes/ionicdvwrap_fakes.cc
fakes/libc_fakes.cc
fakes/mlx5dvwrap_fakes.cc
fakes/nccl_fakes.cc
fakes/net_ib_cast_connect_fakes.cc
fakes/net_ib_cast_p2p_fakes.cc
fakes/net_ib_cast_p2p_resiliency_fakes.cc
fakes/net_ib_cast_p2p_resiliency_recovery_fakes.cc
fakes/net_ib_cast_qp_sharing_fakes.cc
fakes/net_ib_cast_scheduler_fakes.cc
fakes/os_fakes.cc
fakes/rocmwrap_fakes.cc # rocmLibraryInit (gdr.cc DMA-BUF probe)
fakes/socket_fakes.cc
fakes/transport_stubs.cc # rcclUseAinic, NET_OPTIONAL_RECV_COMPLETION
${RCCL_HOST_HIPIFY_DIR}/src/graph/xml.cc # real parser for the multiplane map
${RCCL_HOST_HIPIFY_DIR}/src/misc/utils.cc # real NCCL_IB_HCA parsing, pciPathToInt64
${RCCL_HOST_HIPIFY_DIR}/src/transport/net_telemetry.cc # real, off unless RCCL_TELEMETRY_ENABLE=1
../common/ProcessIsolatedTestRunner.cpp
../common/main_altrsmi.cpp
PARENT_SCOPE)
endfunction()

# Create one host-only micro-test binary and apply all the boilerplate that
Expand Down Expand Up @@ -1766,6 +1866,35 @@ rccl_add_micro_binary(rccl-UnitTestsMicroDda
FABRIC_GPU_BARRIER_CC_PATH="${RCCL_HOST_HIPIFY_DIR}/src/algorithms/dda/fabric/fabric_gpu_barrier.cu.cpp"
CATEGORIES_YAML "${CMAKE_CURRENT_SOURCE_DIR}/../test_categories_micro_dda.yaml")

# ---------------------------------------------------------------------------
# rccl-UnitTestsMicroNetIbCastInit
# ---------------------------------------------------------------------------
set_source_files_properties(
${RCCL_HOST_HIPIFY_DIR}/src/graph/xml.cc
${RCCL_HOST_HIPIFY_DIR}/src/misc/utils.cc
${RCCL_HOST_HIPIFY_DIR}/src/transport/net_telemetry.cc
PROPERTIES GENERATED TRUE)
rccl_add_micro_binary(rccl-UnitTestsMicroNetIbCastInit
SOURCES ${TEST_MICRO_NET_IB_CAST_INIT_SOURCE_FILES}
EXTRA_INCLUDES
${RCCL_HOST_HIPIFY_DIR}/src/transport/net_ib_cast # common_cast.h and the other cast headers
${RCCL_HOST_HIPIFY_DIR}/src/transport # net_ib_limits.h, net_ib_gid_inspect.h
EXTRA_DEFS
${_MICRO_MODE_DEFS}
${_MICRO_AMDSMI_DEF}
ENABLE_FAULT_INJECTION # net_ib_cast_gid_inspect.cc and the GID-change hook exist only with it
# init, common, reg, gdr and gin share basenames with net_ib/ (and init.cc with src/), which
# src/CMakeLists.txt lists first, so add_file_unique() renames these copies.
NET_IB_CAST_INIT_CC_PATH="${RCCL_HOST_HIPIFY_DIR}/src/transport/net_ib_cast/init_tmp.cc"
NET_IB_CAST_COMMON_CC_PATH="${RCCL_HOST_HIPIFY_DIR}/src/transport/net_ib_cast/common_tmp.cc"
NET_IB_CAST_REG_CC_PATH="${RCCL_HOST_HIPIFY_DIR}/src/transport/net_ib_cast/reg_tmp.cc"
NET_IB_CAST_GDR_CC_PATH="${RCCL_HOST_HIPIFY_DIR}/src/transport/net_ib_cast/gdr_tmp.cc"
NET_IB_CAST_GIN_CC_PATH="${RCCL_HOST_HIPIFY_DIR}/src/transport/net_ib_cast/gin_tmp.cc"
NET_IB_CAST_CAPABILITY_CC_PATH="${RCCL_HOST_HIPIFY_DIR}/src/transport/net_ib_cast/capability.cc"
NET_IB_CAST_MULTIPLANE_CC_PATH="${RCCL_HOST_HIPIFY_DIR}/src/transport/net_ib_cast/multiplane.cc"
NET_IB_CAST_GID_INSPECT_CC_PATH="${RCCL_HOST_HIPIFY_DIR}/src/transport/net_ib_cast/net_ib_cast_gid_inspect.cc"
CATEGORIES_YAML "${CMAKE_CURRENT_SOURCE_DIR}/../test_categories_micro_net_ib_cast_init.yaml")

# =====================================================================
# Standalone-only tail: coverage + no CTest registration.
# =====================================================================
Expand Down
20 changes: 17 additions & 3 deletions projects/rccl/test/host/MICROTEST_README.md
Original file line number Diff line number Diff line change
Expand Up @@ -464,6 +464,13 @@ export colliding non-`static` symbols; otherwise a unit needs its own binary:
- `fabric/fabric_gpu_barrier.cu` (`FABRIC_GPU_BARRIER_CC_PATH`, from
`fabric-gpu-barrier-test.cc`); suites `FabricGpuBarrier*`.

- **`rccl-UnitTestsMicroNetIbCastInit`** — `transport/net_ib_cast/init.cc`
(`NET_IB_CAST_INIT_CC_PATH`, from `net-ib-cast-init-test.cc`), plus `common.cc`,
`capability.cc`, `reg.cc`, `gdr.cc`, `multiplane.cc`, `gin.cc` and
`net_ib_cast_gid_inspect.cc` from `net-ib-cast-<unit>-test.cc`; suites `NetIbCast*`.
Its own binary: it fakes `misc/gdr_probe.cc`, which `rccl-UnitTestsMicro` compiles.
Comment thread
aduforest marked this conversation as resolved.
See `test_categories_micro_net_ib_cast_init.yaml`.

Everything below (seams, fakes, coverage) applies to all of them; the concrete examples
use `p2p.cc`.

Expand Down Expand Up @@ -607,11 +614,16 @@ symbol.
| `src/mem_manager.cc` | `fakes/mem_manager_fakes.cc`; `ncclMemTrack*` / `ncclMemUntrack*` in `fakes/nccl_fakes.cc` |
| `src/misc/amdsmi_wrap.cc` | `fakes/amdsmi_fakes.cc` |
| `src/misc/api_trace.cc` (`NCCL_API` dispatch) | `fakes/api_trace_fakes.cc` |
| `src/misc/ibvwrap.cc` (PD / MR registration wrappers) | `fakes/ibvwrap_fakes.cc` |
| `src/misc/gdr_peermem.cc` | `fakes/gdr_peermem_fakes.cc` |
| `src/misc/gdr_probe.cc` (targets that do not compile the real file) | `fakes/gdr_probe_fakes.cc` |
| `src/misc/ibvwrap.cc` (verbs wrappers) | `fakes/ibvwrap_fakes.cc` |
| `src/misc/ionicdvwrap.cc` | `fakes/ionicdvwrap_fakes.cc` |
| ibverbs provider dv libraries (`libionic.so`, `libmlx5.so`) | `fakes/dv_provider_fake.cc` |
| `src/misc/kernel_config.cc` | `fakes/kernel_config_fakes.cc` |
| `src/misc/mlx5dvwrap.cc` | `fakes/mlx5dvwrap_fakes.cc` |
| `src/misc/param.cc` + `getenv` interposition | `fakes/env_fakes.cc` |
| `src/misc/rocmwrap.cc` | `fakes/rocmwrap_fakes.cc` |
| `src/misc/socket.cc` | `fakes/socket_fakes.cc` |
| `src/misc/strongstream.cc` | `fakes/strongstream_stubs.cc` |
| `src/misc/utils.cc` | `fakes/utils_fakes.cc` |
| `src/os/linux.cc` | `fakes/os_fakes.cc` |
Expand All @@ -628,6 +640,7 @@ symbol.
| `src/scheduler/*.cc`'s own public entry points (targets that don't compile the real files, e.g. `rccl-UnitTestsMicroEnqueue`) and the deep launch paths | `fakes/sched_stubs.cc` |
| `src/sym_kernels.cc` | `fakes/sym_kernels_fakes.cc` |
| `src/transport/net_ib/connect.cc` params (`ncclParamIbQpsPerConn`) | `fakes/transport_net_ib_fakes.cc` |
| `src/transport/net_ib_cast/{connect,p2p,p2p_resiliency,p2p_resiliency_recovery,qp_sharing,scheduler}.cc` (targets that do not compile the real file) | `fakes/net_ib_cast_<file>_fakes.cc` |
| generated `sym_kernels_host.cc` (targets that do not compile it) | `fakes/sym_kernels_index_fakes.cc` |
| rocSHMEM host API | `fakes/rocshmem_fakes.cc` |
| `src/transport/p2p.cc` shareable-buffer entry points (`rccl-UnitTestsMicroDiagnostics`) | `fakes/transport_p2p_fakes.cc` |
Expand Down Expand Up @@ -975,8 +988,8 @@ can be configured **directly** to build every host binary — `rccl-HostUnitTest
`rccl-UnitTestsMicroInit[-uncached|-faultinj]`, `rccl-UnitTestsMicroEnqueue[-devlinker]`,
`rccl-UnitTestsMicroGinHost`, `rccl-UnitTestsMicroGinHostFinalize`, `rccl-UnitTestsMicroDdaIpc`, `rccl-UnitTestsMicroCe`, `rccl-UnitTestsMicroDiagnostics`,
`rccl-UnitTestsMicroGraph`, `rccl-UnitTestsMicroDiagnostics`, `rccl-UnitTestsMicroDda`,
`rccl-UnitTestsMicroSymKernels`, `rccl-UnitTestsMicroTaskPrep` and
`rccl-UnitTestsMicroRmaProxy` — **without configuring/building all of
`rccl-UnitTestsMicroSymKernels`, `rccl-UnitTestsMicroTaskPrep`,
`rccl-UnitTestsMicroRmaProxy` and `rccl-UnitTestsMicroNetIbCastInit` — **without configuring/building all of
librccl**. It compiles just the tests + fakes + the hipified unit-under-test
sources.

Expand Down Expand Up @@ -1042,6 +1055,7 @@ cmake --build build -j"$(nproc)"
./build/rccl-UnitTestsMicroRoctxNvml-roctx # same, ROCTX_ENABLE arm
./build/rccl-UnitTestsMicroRocmwrap # src/misc/rocmwrap.cc cuMem + DMA-BUF init
./build/rccl-UnitTestsMicroAmdsmiWrap # src/misc/amdsmi_wrap.cc
./build/rccl-UnitTestsMicroNetIbCastInit # src/transport/net_ib_cast/ init, capability and GIN
```

Disable coverage instrumentation for the standalone host-only test binaries
Expand Down
13 changes: 1 addition & 12 deletions projects/rccl/test/host/TopoScene.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
#include <unistd.h>
#include <vector>

#include "AsanCheck.h"
#include "fakes/graph_fakes.h"

#include "comm.h"
Expand All @@ -29,21 +30,9 @@
// Defined in topo-test.cc, which owns topo.cc's NCCL_NETDEVS_POLICY statics.
void TopoSetNetDevsPolicy(enum netDevsPolicy policy, int num);

#define TOPO_SCENE_ASAN 0
#if defined(__SANITIZE_ADDRESS__)
#undef TOPO_SCENE_ASAN
#define TOPO_SCENE_ASAN 1
#elif defined(__has_feature)
#if __has_feature(address_sanitizer)
#undef TOPO_SCENE_ASAN
#define TOPO_SCENE_ASAN 1
#endif
#endif

namespace topo_scene {

constexpr int kXmlNodes = 512;
constexpr bool kAsan = TOPO_SCENE_ASAN; // tests that pin a production leak or overflow skip under ASan

struct FreeDeleter {
void operator()(void* p) const { free(p); }
Expand Down
24 changes: 24 additions & 0 deletions projects/rccl/test/host/fakes/gdr_peermem_fakes.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
/*************************************************************************
* Copyright (c) 2026 Advanced Micro Devices, Inc. All rights reserved.
*
* See LICENSE.txt for license information
************************************************************************/

// Implementation of the src/misc/gdr_peermem.cc fakes. See gdr_peermem_fakes.h.

#include "gdr_peermem_fakes.h"

#include "fail_loud.h"
#include "gdr_peermem.h"
#include "signature-drift.h"

static int DefaultNcclIbScanDefaultPeerMemClients() {
FailLoudUnfaked("gdr_peermem_fakes", "ncclIbScanDefaultPeerMemClients");
}
std::function<int()> g_ncclIbScanDefaultPeerMemClients = DefaultNcclIbScanDefaultPeerMemClients;

ASSERT_HOOK_MATCHES_PROD(g_ncclIbScanDefaultPeerMemClients, ncclIbScanDefaultPeerMemClients);

int ncclIbScanDefaultPeerMemClients(void) { return g_ncclIbScanDefaultPeerMemClients(); }

void ResetGdrPeermemFakes() { g_ncclIbScanDefaultPeerMemClients = DefaultNcclIbScanDefaultPeerMemClients; }
19 changes: 19 additions & 0 deletions projects/rccl/test/host/fakes/gdr_peermem_fakes.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/*************************************************************************
* Copyright (c) 2026 Advanced Micro Devices, Inc. All rights reserved.
*
* See LICENSE.txt for license information
************************************************************************/

// Seam for ncclIbScanDefaultPeerMemClients (src/misc/gdr_peermem.cc), whose real
// answer depends on the host's /sys. Fails loud by default.

#ifndef RCCL_TEST_HOST_GDR_PEERMEM_FAKES_H_
#define RCCL_TEST_HOST_GDR_PEERMEM_FAKES_H_

#include <functional>

extern std::function<int()> g_ncclIbScanDefaultPeerMemClients;

void ResetGdrPeermemFakes();

#endif // RCCL_TEST_HOST_GDR_PEERMEM_FAKES_H_
26 changes: 26 additions & 0 deletions projects/rccl/test/host/fakes/gdr_probe_fakes.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/*************************************************************************
* Copyright (c) 2026 Advanced Micro Devices, Inc. All rights reserved.
*
* See LICENSE.txt for license information
************************************************************************/

// Implementation of the src/misc/gdr_probe.cc fakes. See gdr_probe_fakes.h.

#include "gdr_probe_fakes.h"

#include "fail_loud.h"
#include "gdr_peermem.h"
#include "signature-drift.h"

static int DefaultNcclIbProbeGdrSupport(struct ibv_context*, int) {
FailLoudUnfaked("gdr_probe_fakes", "ncclIbProbeGdrSupport");
}
std::function<int(struct ibv_context*, int)> g_ncclIbProbeGdrSupport = DefaultNcclIbProbeGdrSupport;

ASSERT_HOOK_MATCHES_PROD(g_ncclIbProbeGdrSupport, ncclIbProbeGdrSupport);

int ncclIbProbeGdrSupport(struct ibv_context* context, int relaxedOrderingEnabled) {
return g_ncclIbProbeGdrSupport(context, relaxedOrderingEnabled);
}

void ResetGdrProbeFakes() { g_ncclIbProbeGdrSupport = DefaultNcclIbProbeGdrSupport; }
22 changes: 22 additions & 0 deletions projects/rccl/test/host/fakes/gdr_probe_fakes.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
/*************************************************************************
* Copyright (c) 2026 Advanced Micro Devices, Inc. All rights reserved.
*
* See LICENSE.txt for license information
************************************************************************/

// Seam for ncclIbProbeGdrSupport (src/misc/gdr_probe.cc), for binaries that do not
// compile gdr_probe.cc (rccl-UnitTestsMicro does, so it cannot link this). Fails
// loud by default.

#ifndef RCCL_TEST_HOST_GDR_PROBE_FAKES_H_
#define RCCL_TEST_HOST_GDR_PROBE_FAKES_H_

#include <functional>

struct ibv_context;

extern std::function<int(struct ibv_context* /*context*/, int /*relaxedOrderingEnabled*/)> g_ncclIbProbeGdrSupport;

void ResetGdrProbeFakes();

#endif // RCCL_TEST_HOST_GDR_PROBE_FAKES_H_
Loading
Loading