Skip to content

Commit b14d7f1

Browse files
authored
UCP/CORE: Fallback to blocking registration for network device only (#10954)
1 parent 0210ad6 commit b14d7f1

File tree

1 file changed

+21
-1
lines changed

1 file changed

+21
-1
lines changed

src/ucp/core/ucp_context.c

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1747,11 +1747,28 @@ ucp_update_memtype_md_map(uint64_t mem_types_map, ucs_memory_type_t mem_type,
17471747
}
17481748
}
17491749

1750+
/* Returns the MDs that are part of the fallback mechanism */
1751+
static ucp_md_map_t ucp_fill_fallback_reg_nonblock_mds(ucp_context_h context)
1752+
{
1753+
ucp_md_map_t md_map = 0;
1754+
ucp_rsc_index_t tl_idx;
1755+
1756+
for (tl_idx = 0; tl_idx < context->num_tls; tl_idx++) {
1757+
if (context->tl_rscs[tl_idx].tl_rsc.dev_type == UCT_DEVICE_TYPE_NET) {
1758+
/* Find all memory domains with at least one network device. */
1759+
md_map |= UCS_BIT(context->tl_rscs[tl_idx].md_index);
1760+
}
1761+
}
1762+
1763+
return (md_map == 0) ? ~md_map : md_map;
1764+
}
1765+
17501766
static void ucp_fill_resources_reg_md_map_update(ucp_context_h context)
17511767
{
17521768
UCS_STRING_BUFFER_ONSTACK(strb, 256);
17531769
ucp_md_map_t reg_block_md_map;
17541770
ucp_md_map_t reg_nonblock_md_map;
1771+
ucp_md_map_t fallback_reg_nonblock_md_map;
17551772
ucs_memory_type_t mem_type;
17561773
ucp_md_index_t md_index;
17571774
const uct_md_attr_v2_t *md_attr;
@@ -1767,6 +1784,8 @@ static void ucp_fill_resources_reg_md_map_update(ucp_context_h context)
17671784
}
17681785
}
17691786

1787+
fallback_reg_nonblock_md_map = ucp_fill_fallback_reg_nonblock_mds(context);
1788+
17701789
ucs_memory_type_for_each(mem_type) {
17711790
reg_block_md_map = 0;
17721791
reg_nonblock_md_map = 0;
@@ -1806,7 +1825,8 @@ static void ucp_fill_resources_reg_md_map_update(ucp_context_h context)
18061825
* buffers for rndv pipeline protocols). */
18071826
context->reg_block_md_map[mem_type] = reg_block_md_map;
18081827

1809-
if ((reg_nonblock_md_map == 0) && context->config.ext.reg_nb_fallback) {
1828+
if (context->config.ext.reg_nb_fallback &&
1829+
((reg_nonblock_md_map & fallback_reg_nonblock_md_map) == 0)) {
18101830
/* Fallback to blocking registration if no MD supports non-blocking
18111831
* registration */
18121832
reg_nonblock_md_map = reg_block_md_map;

0 commit comments

Comments
 (0)