Files
ray-project--ray/python/ray/tests/test_object_spilling_no_asan.py
T
2026-07-13 13:17:40 +08:00

55 lines
1.8 KiB
Python

import os
import platform
import sys
import numpy as np
import pytest
import ray
# NOTE(swang): This test currently fails in ASAN mode because it tests a
# performance issue that is likely sensitive to timing.
@pytest.mark.skipif(platform.system() == "Windows", reason="Hangs on Windows.")
def test_spill_fusion(fs_only_object_spilling_config, shutdown_only):
# Limit our object store to 75 MiB of memory.
object_spilling_config, temp_folder = fs_only_object_spilling_config
min_spilling_size = 10 * 1024 * 1024
ray_context = ray.init(
num_cpus=1,
object_store_memory=75 * 1024 * 1024,
_system_config={
"max_io_workers": 1,
"object_spilling_config": object_spilling_config,
"min_spilling_size": min_spilling_size,
"object_spilling_threshold": 0.8,
# Set the timeout between create retries high so that this test
# passes in ASAN and debug mode.
"object_store_full_delay_ms": 1000,
},
)
object_size = 1024 * 1024
# Fill up the object store 4 times with small objects.
# We trigger spilling at 80% and the min spill size is
# about 10 objects.
xs = [ray.put(np.zeros(object_size // 8)) for _ in range(300)] # noqa: F841
spill_dir = os.path.join(
temp_folder,
f"{ray._private.ray_constants.DEFAULT_OBJECT_PREFIX}_{ray_context['node_id']}",
)
under_min, over_min = 0, 0
for filename in os.listdir(spill_dir):
size = os.stat(os.path.join(spill_dir, filename)).st_size
if size < 2 * object_size // 8:
under_min += 1
else:
over_min += 1
# We should almost always spill fused objects.
assert over_min > under_min
if __name__ == "__main__":
sys.exit(pytest.main(["-sv", __file__]))