Skip to content

Commit 18c04d0

Browse files
committed
Cap memory pool size in some tests
1 parent 23eb350 commit 18c04d0

2 files changed

Lines changed: 19 additions & 7 deletions

File tree

cuda_core/tests/test_memory.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1452,11 +1452,13 @@ def test_pinned_mr_numa_id_default_no_ipc(init_cuda):
14521452
device = Device()
14531453
skip_if_pinned_memory_unsupported(device)
14541454

1455-
mr = create_pinned_memory_resource_or_xfail(PinnedMemoryResourceOptions(), xfail_device=device)
1455+
mr = create_pinned_memory_resource_or_xfail(PinnedMemoryResourceOptions(max_size=POOL_SIZE), xfail_device=device)
14561456
assert mr.numa_id == -1
14571457
mr.close()
14581458

1459-
mr = create_pinned_memory_resource_or_xfail(PinnedMemoryResourceOptions(ipc_enabled=False), xfail_device=device)
1459+
mr = create_pinned_memory_resource_or_xfail(
1460+
PinnedMemoryResourceOptions(ipc_enabled=False, max_size=POOL_SIZE), xfail_device=device
1461+
)
14601462
assert mr.numa_id == -1
14611463
mr.close()
14621464

@@ -1491,7 +1493,9 @@ def test_pinned_mr_numa_id_explicit(init_cuda):
14911493
if host_numa_id < 0:
14921494
pytest.skip("System does not support NUMA")
14931495

1494-
mr = create_pinned_memory_resource_or_xfail(PinnedMemoryResourceOptions(numa_id=host_numa_id), xfail_device=device)
1496+
mr = create_pinned_memory_resource_or_xfail(
1497+
PinnedMemoryResourceOptions(numa_id=host_numa_id, max_size=POOL_SIZE), xfail_device=device
1498+
)
14951499
assert mr.numa_id == host_numa_id
14961500
mr.close()
14971501

cuda_core/tests/test_memory_peer_access.py

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,14 @@
1111
from cuda.core._utils.cuda_utils import CUDAError
1212

1313
NBYTES = 1024
14+
# Every owned pool below holds at most NBYTES, but a pool created without an
15+
# explicit max_size reserves a system-dependent window that scales with device
16+
# memory -- hundreds of GiB on large-memory GPUs. The per-process virtual
17+
# address budget is bounded (~1 TB on Windows MCDM), and reservations are not
18+
# returned until a pool is torn down and its stream-ordered frees retire, so
19+
# oversized windows accumulate across a session and eventually starve later
20+
# pool creations with CUDA_ERROR_OUT_OF_MEMORY (issue #2381). Cap them.
21+
POOL_SIZE = 2097152 # 2MB size
1422

1523
pytestmark = pytest.mark.thread_unsafe(reason="peer access tests mutate process-global CUDA memory-pool access state")
1624

@@ -22,7 +30,7 @@ def test_peer_access_basic(mempool_device_x2):
2230
one_on_dev0 = make_scratch_buffer(dev0, 1, NBYTES)
2331
stream_on_dev0 = dev0.create_stream()
2432
# Use owned pool to ensure clean initial state (no stale peer access).
25-
dmr_on_dev1 = DeviceMemoryResource(dev1, DeviceMemoryResourceOptions())
33+
dmr_on_dev1 = DeviceMemoryResource(dev1, DeviceMemoryResourceOptions(max_size=POOL_SIZE))
2634
buf_on_dev1 = dmr_on_dev1.allocate(NBYTES, stream=dev1.default_stream)
2735

2836
# No access at first.
@@ -73,7 +81,7 @@ def test_peer_access_transitions(mempool_device_x3):
7381
pgens = [PatternGen(devs[i], NBYTES, streams[i]) for i in range(3)]
7482
# Use owned pools (with options) to ensure clean initial state.
7583
# Default pools are shared and may have stale peer access from prior tests.
76-
dmrs = [DeviceMemoryResource(dev, DeviceMemoryResourceOptions()) for dev in devs]
84+
dmrs = [DeviceMemoryResource(dev, DeviceMemoryResourceOptions(max_size=POOL_SIZE)) for dev in devs]
7785
bufs = [dmr.allocate(NBYTES, stream=dev.default_stream) for dmr, dev in zip(dmrs, devs)]
7886

7987
def verify_state(state, pattern_seed):
@@ -163,7 +171,7 @@ def isolated_dmr_x2(mempool_device_x2):
163171
proxy tests are not polluted by other tests sharing a default pool.
164172
"""
165173
dev0, dev1 = mempool_device_x2
166-
dmr = DeviceMemoryResource(dev0, DeviceMemoryResourceOptions())
174+
dmr = DeviceMemoryResource(dev0, DeviceMemoryResourceOptions(max_size=POOL_SIZE))
167175
dmr.peer_accessible_by = []
168176
return dmr, dev0, dev1
169177

@@ -273,7 +281,7 @@ def test_peer_accessible_by_no_cache_across_proxies(mempool_device_x2):
273281
def test_peer_accessible_by_iteration_order_is_sorted(mempool_device_x2):
274282
"""``__iter__`` yields peers in ascending device-ordinal order."""
275283
dev0, dev1 = mempool_device_x2
276-
dmr = DeviceMemoryResource(dev0, DeviceMemoryResourceOptions())
284+
dmr = DeviceMemoryResource(dev0, DeviceMemoryResourceOptions(max_size=POOL_SIZE))
277285
dmr.peer_accessible_by = [dev1]
278286
devices = list(dmr.peer_accessible_by)
279287
ids = [d.device_id for d in devices]

0 commit comments

Comments
 (0)