def test_memory_table_sort_by_pid(): unsort = [1, 3, 2] entries = [build_entry(pid=pid) for pid in unsort] memory_table = MemoryTable(entries, sort_by_type=SortingType.PID) sort = sorted(unsort) for pid, entry in zip(sort, memory_table.table): assert pid == entry.pid
def __init__(self, redis_address, redis_password): self.node_stats = NodeStats(redis_address, redis_password) self.raylet_stats = RayletStats(redis_address, redis_password=redis_password) if Analysis is not None: self.tune_stats = TuneCollector(2.0) self.memory_table = MemoryTable([])
def test_memory_table_sort_by_object_size(): unsort = [312, 214, -1, 1244, 642] entries = [build_entry(object_size=object_size) for object_size in unsort] memory_table = MemoryTable(entries, sort_by_type=SortingType.OBJECT_SIZE) sort = sorted(unsort) for object_size, entry in zip(sort, memory_table.table): assert object_size == entry.object_size
def __init__(self, redis_address, redis_password): self.node_stats = NodeStats(redis_address, redis_password) self.raylet_stats = RayletStats(redis_address, redis_password=redis_password) if Analysis is not None: self.tune_stats = TuneCollector(2.0) self.memory_table = MemoryTable([]) self.v2_api_handler = Dashboardv2APIHandler(self.node_stats, self.raylet_stats)
def test_memory_table_sort_by_reference_type(): unsort = [ ReferenceType.USED_BY_PENDING_TASK, ReferenceType.LOCAL_REFERENCE, ReferenceType.LOCAL_REFERENCE, ReferenceType.PINNED_IN_MEMORY ] entries = [ build_entry(reference_type=reference_type) for reference_type in unsort ] memory_table = MemoryTable(entries, sort_by_type=SortingType.REFERENCE_TYPE) sort = sorted(unsort) for reference_type, entry in zip(sort, memory_table.table): assert reference_type == entry.reference_type
def test_memory_table_summary(): entries = [ build_pinned_in_memory_entry(), build_used_by_pending_task_entry(), build_captured_in_object_entry(), build_actor_handle_entry(), build_local_reference_entry(), build_local_reference_entry() ] memory_table = MemoryTable(entries) assert len(memory_table.group) == 1 assert memory_table.summary["total_actor_handles"] == 1 assert memory_table.summary["total_captured_in_objects"] == 1 assert memory_table.summary["total_local_ref_count"] == 2 assert memory_table.summary["total_object_size"] == len( entries) * OBJECT_SIZE assert memory_table.summary["total_pinned_in_memory"] == 1 assert memory_table.summary["total_used_by_pending_task"] == 1
def test_group_by(): node_second = "127.0.0.2" node_first = "127.0.0.1" entries = [ build_entry(node_address=node_second, pid=2), build_entry(node_address=node_second, pid=1), build_entry(node_address=node_first, pid=2), build_entry(node_address=node_first, pid=1) ] memory_table = MemoryTable(entries) # Make sure it is correctly grouped assert node_first in memory_table.group assert node_second in memory_table.group # make sure pid is sorted in the right order. for group_key, group_memory_table in memory_table.group.items(): pid = 1 for entry in group_memory_table.table: assert pid == entry.pid pid += 1
a = ActorA.remote() actor_pid = ray.get(a.getpid.remote()) reply = reporter_stub.GetProfilingStats( reporter_pb2.GetProfilingStatsRequest(pid=actor_pid, duration=10)) profiling_stats = json.loads(reply.profiling_stats) assert profiling_stats is not None # This variable is used inside test_memory_dashboard. # It is defined as a global variable to be used across all nested test # functions. We use it because memory table is updated every one second, # and we need to have a way to verify if the test is running with a fresh # new memory table. prev_memory_table = MemoryTable([]).__dict__()["group"] def test_memory_dashboard(shutdown_only): """Test Memory table. These tests verify examples in this document. https://docs.ray.io/en/latest/memory-management.html#debugging-using-ray-memory """ addresses = ray.init(num_cpus=2) webui_url = addresses["webui_url"].replace("localhost", "http://127.0.0.1") assert (wait_until_server_available(addresses["webui_url"]) is True) def get_memory_table(): memory_table = requests.get(webui_url + "/api/memory_table").json() return memory_table["result"]
def stop_collecting_memory_table_info(self): # Reset memory table. self.memory_table = MemoryTable([]) self.raylet_stats.include_memory_info = False