|
44 | 44 | import multiprocessing as mp |
45 | 45 | import os |
46 | 46 | import sys |
| 47 | +import math |
47 | 48 | from logging import Logger |
48 | 49 | from typing import Optional |
49 | 50 |
|
@@ -131,6 +132,20 @@ def __create_tasks(self, rank_id, objects, migratable): |
131 | 132 | user_defined = o.get_user_defined() |
132 | 133 | if user_defined: |
133 | 134 | task_data["user_defined"] = dict(sorted(user_defined.items())) |
| 135 | + else: |
| 136 | + task_data["user_defined"] = dict() |
| 137 | + |
| 138 | + task_data["user_defined"]["object_memory"] = o.get_size() |
| 139 | + task_data["user_defined"]["object_overhead_memory"] = o.get_overhead() |
| 140 | + task_data["user_defined"]["rank_id"] = o.get_rank_id() |
| 141 | + task_data["user_defined"]["sent_volume"] = o.get_sent_volume() |
| 142 | + task_data["user_defined"]["received_volume"] = o.get_received_volume() |
| 143 | + task_data["user_defined"]["max_volume"] = o.get_max_volume() |
| 144 | + |
| 145 | + if o.get_shared_id() is not None: |
| 146 | + task_data["user_defined"]["shared_id"] = o.get_shared_id() |
| 147 | + else: |
| 148 | + task_data["user_defined"]["shared_id"] = -1 |
134 | 149 |
|
135 | 150 | tasks.append(task_data) |
136 | 151 |
|
@@ -243,7 +258,31 @@ def _json_serializer(self, rank_phases_double) -> str: |
243 | 258 |
|
244 | 259 | # Create data to be outputted for current phase |
245 | 260 | self.__logger.debug(f"Writing phase {p_id} for rank {r_id}") |
| 261 | + rank_info : Rank = [r for r in current_phase.get_ranks() if r.get_id() == r_id][0] |
| 262 | + # JSON can not handle nan so make this ratio -1 when it's not valid |
| 263 | + homed_ratio = -1 |
| 264 | + if not math.isnan(rank_info.get_homed_blocks_ratio()): |
| 265 | + homed_ratio = rank_info.get_homed_blocks_ratio() |
246 | 266 | phase_data= {"id": p_id, |
| 267 | + "user_defined": { |
| 268 | + "id": rank_info.get_id(), |
| 269 | + "load": rank_info.get_load(), |
| 270 | + "num_shared_blocks": rank_info.get_number_of_shared_blocks(), |
| 271 | + "num_homed_blocks": rank_info.get_number_of_homed_blocks(), |
| 272 | + "num_uprooted_blocks": rank_info.get_number_of_uprooted_blocks(), |
| 273 | + "num_homed_ratio": homed_ratio, |
| 274 | + "num_homed_blocks": rank_info.get_number_of_homed_blocks(), |
| 275 | + "shared_memory": rank_info.get_shared_memory(), |
| 276 | + "num_objects": rank_info.get_number_of_objects(), |
| 277 | + "num_migratable_objects": len(rank_info.get_migratable_objects()), |
| 278 | + "num_sentinel_objects": len(rank_info.get_sentinel_objects()), |
| 279 | + "migratable_load": rank_info.get_migratable_load(), |
| 280 | + "sentinel_load": rank_info.get_sentinel_load(), |
| 281 | + "sent_volume": rank_info.get_sent_volume(), |
| 282 | + "received_volume": rank_info.get_received_volume(), |
| 283 | + "max_object_level_memory": rank_info.get_max_object_level_memory(), |
| 284 | + "max_memory_usage": rank_info.get_max_memory_usage() |
| 285 | + }, |
247 | 286 | "tasks": sorted( |
248 | 287 | self.__create_tasks( |
249 | 288 | r_id, rank.get_migratable_objects(), migratable=True) + |
|
0 commit comments