From 978a72604766c61c51c5c26c69131f033e8649e7 Mon Sep 17 00:00:00 2001 From: Laxmikant Kale Date: Fri, 11 Sep 2026 10:59:15 -0500 Subject: [PATCH 1/3] Bump reconverse to 58921e9 (#217, #222); grow the CI tier; skip classic-only tests Reconverse main 58921e9 carries two fixes found by Charm++'s own tests: - #217: CmiWithinNodeBroadcast now follows the classic delivery contract: nokeep messages shared by reference, a zerocopy broadcast receive delivered to the calling PE only, the caller's buffer consumed. Before it, tests/charm++/within_node_bcast aborted at +pe 2 and six of the nine tests/charm++/zerocopy directories segfaulted at +pe 4. - #222: reconverse declares CMK_ONESIDED_IMPL (and CMK_ONESIDED_RO_DISABLE), so zcQdIncrement creates one quiescence count per Direct-API RDMA operation, matching the single acknowledgement of reconverse's RMA path. Before it, zerocopy_with_qd with two processes never reached quiescence after its Direct API test. It also declares CMK_MACHINE_PROGRESS_DEFINED, so CkNetworkProgress() now drives the network instead of compiling to nothing. reconverse-ci's TEST_DIRS gains within_node_bcast and eight zerocopy directories, the tests that caught both bugs; zerocopy/zc_post_modify_size stays out until reconverse #223 (a two-process data mismatch present before and after these fixes) is resolved. tests/charm++/queue and tests/charm++/longIdle are filtered out of TESTDIRS under reconverse (CMK_GDIR=reconverse): queue tests classic's Cqs API, which the reconverse build does not compile, and longIdle needs CcdCallOnConditionOnPE, which reconverse lacks. tests/converse/megacon is likewise skipped: it is written against the Cpm interface; reconverse carries its own port of the bank (tests/megarecon, reconverse PR #218). Verified on macOS arm64 with the equivalent tree (#217 + #222 as the submodule): the whole TEST_DIRS tier passes in one and two processes, zerocopy_with_qd included; nine of nine zerocopy directories pass single process, eight with two processes. An Anvil run (two nodes, InfiniBand, hwloc) is in progress and gates the merge. Co-Authored-By: Claude Fable 5.1 --- .github/workflows/reconverse-ci.yaml | 14 +++++++++++++- contrib/reconverse | 2 +- tests/charm++/Makefile | 13 ++++++++++++- tests/converse/Makefile | 7 +++++++ 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/.github/workflows/reconverse-ci.yaml b/.github/workflows/reconverse-ci.yaml index 8617e7e4be..321a2b6acc 100644 --- a/.github/workflows/reconverse-ci.yaml +++ b/.github/workflows/reconverse-ci.yaml @@ -38,13 +38,25 @@ env: # Curated test tier. Grows one reviewed PR at a time; every tests/ dir NOT # listed here is by definition unsupported-on-reconverse until added (the - # parity matrix mirrors this list). + # parity matrix mirrors this list). within_node_bcast and the zerocopy + # dirs entered with the reconverse bump to 58921e9 (reconverse #217, #222): + # they are the tests that caught both bugs. zerocopy/zc_post_modify_size + # stays out until reconverse #223 (2-process data mismatch) is fixed. TEST_DIRS: >- tests/charm++/megatest tests/charm++/simplearrayhello tests/charm++/anytime_migration tests/charm++/anytime_bcastred tests/charm++/qd + tests/charm++/within_node_bcast + tests/charm++/zerocopy/zerocopy_with_qd + tests/charm++/zerocopy/direct_api + tests/charm++/zerocopy/large_bcast + tests/charm++/zerocopy/large_p2p + tests/charm++/zerocopy/bcast_nonzero_root + tests/charm++/zerocopy/dereg_and_nodereg + tests/charm++/zerocopy/zc_post_async + tests/charm++/zerocopy/pup_buffer jobs: diff --git a/contrib/reconverse b/contrib/reconverse index 38091f1e95..58921e9f57 160000 --- a/contrib/reconverse +++ b/contrib/reconverse @@ -1 +1 @@ -Subproject commit 38091f1e950446ce6668560db5211ee356b5c2d7 +Subproject commit 58921e9f575fec5caafa69fd2504f700dcb70af4 diff --git a/tests/charm++/Makefile b/tests/charm++/Makefile index ebfe0176ff..f8fc55262a 100644 --- a/tests/charm++/Makefile +++ b/tests/charm++/Makefile @@ -41,7 +41,18 @@ FTDIRS = \ jacobi3d \ jacobi3d-sdag \ -TESTDIRS = $(filter-out $(FTDIRS),$(DIRS)) +# Not applicable on reconverse: queue tests classic's Cqs API, which the +# reconverse build does not compile (reconverse has its own queue and its own +# test for it); longIdle needs CcdCallOnConditionOnPE, which reconverse does +# not provide. +ifeq ($(CMK_GDIR),reconverse) +RECONVERSE_NA = \ + queue \ + longIdle \ + +endif + +TESTDIRS = $(filter-out $(FTDIRS) $(RECONVERSE_NA),$(DIRS)) NONSCALEDIRS = \ alignment \ diff --git a/tests/converse/Makefile b/tests/converse/Makefile index a67ac34d56..f4af500772 100644 --- a/tests/converse/Makefile +++ b/tests/converse/Makefile @@ -3,6 +3,13 @@ DIRS = \ megacon \ +# megacon is written against the Cpm interface and other classic-only +# Converse APIs that reconverse does not provide; reconverse carries its own +# port of the bank (tests/megarecon in the reconverse repository). +ifeq ($(CMK_GDIR),reconverse) +DIRS = +endif + TESTDIRS = $(DIRS) all: $(foreach i,$(DIRS),build-$i) From 872a9c10974aadccd7a0997d100dcc66bea172c4 Mon Sep 17 00:00:00 2001 From: Laxmikant Kale Date: Fri, 11 Sep 2026 11:12:11 -0500 Subject: [PATCH 2/3] cmake: CMK_USE_CMA is 0 for reconverse builds Charm's feature detection turned CMK_USE_CMA on for every Linux build with process_vm_readv, reconverse included. Reconverse has no CMA transport: its conv-rdma.cpp compiles the CMA paths only under a CMK_USE_CMA it never defines, and it does not parse +noCMAForZC. So a reconverse-linux build compiled dead CMA branches into Charm++, and the zerocopy tests' Makefiles, which run their +noCMAForZC variants when CMK_USE_CMA is 1, handed the flag to programs that do not consume it: "Usage: ./zerocopy_with_qd " on Linux CI, while the same tier passes on macOS where CMK_HAS_CMA is 0. Found by the first Linux run of the widened reconverse-ci tier. Co-Authored-By: Claude Fable 5.1 --- cmake/detect-features.cmake | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/cmake/detect-features.cmake b/cmake/detect-features.cmake index c5350ca09a..6bac7ee100 100644 --- a/cmake/detect-features.cmake +++ b/cmake/detect-features.cmake @@ -37,6 +37,14 @@ set(CMK_USE_CMA ${CMK_HAS_CMA}) if(NETWORK STREQUAL "multicore") set(CMK_USE_CMA 0) endif() +# Reconverse has no CMA transport: its conv-rdma.cpp compiles the CMA paths +# only under a CMK_USE_CMA it never defines, and it does not parse +# +noCMAForZC. Leaving CMK_USE_CMA on for a reconverse build compiles dead +# CMA branches into Charm++ and makes the zerocopy tests' +noCMAForZC runs +# (guarded by CMK_USE_CMA in their Makefiles) abort with a usage error. +if(RECONVERSE) + set(CMK_USE_CMA 0) +endif() # Misc. linker flags (mostly for Charm4py) From 14dea131d5ed1e472b386845a780541c1b194cce Mon Sep 17 00:00:00 2001 From: Laxmikant Kale Date: Fri, 11 Sep 2026 11:30:49 -0500 Subject: [PATCH 3/3] reconverse-ci: drop zerocopy/large_p2p from the tier (2 GiB transfer, not for hosted runners) Its own zerocopy/Makefile keeps it out of the test target for the same reason; the first Linux run of the widened tier hit a failed assert in it on both x86_64 (two processes) and arm64 (one process) while every other directory passed. Co-Authored-By: Claude Fable 5.1 --- .github/workflows/reconverse-ci.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/reconverse-ci.yaml b/.github/workflows/reconverse-ci.yaml index 321a2b6acc..2c8ee81657 100644 --- a/.github/workflows/reconverse-ci.yaml +++ b/.github/workflows/reconverse-ci.yaml @@ -41,7 +41,9 @@ env: # parity matrix mirrors this list). within_node_bcast and the zerocopy # dirs entered with the reconverse bump to 58921e9 (reconverse #217, #222): # they are the tests that caught both bugs. zerocopy/zc_post_modify_size - # stays out until reconverse #223 (2-process data mismatch) is fixed. + # stays out until reconverse #223 (2-process data mismatch) is fixed, and + # zerocopy/large_p2p (a 2 GiB transfer, kept out of zerocopy/Makefile's own + # test target as well) does not fit a hosted runner. TEST_DIRS: >- tests/charm++/megatest tests/charm++/simplearrayhello @@ -52,7 +54,6 @@ env: tests/charm++/zerocopy/zerocopy_with_qd tests/charm++/zerocopy/direct_api tests/charm++/zerocopy/large_bcast - tests/charm++/zerocopy/large_p2p tests/charm++/zerocopy/bcast_nonzero_root tests/charm++/zerocopy/dereg_and_nodereg tests/charm++/zerocopy/zc_post_async