| @@ -55,6 +55,7 @@ class BaseStepTraceParser: | |||||
| self._step_num = 0 | self._step_num = 0 | ||||
| self._tag_map = {} | self._tag_map = {} | ||||
| self._is_training_mode = is_training_mode | self._is_training_mode = is_training_mode | ||||
| self._step_end_tag_id = 255 | |||||
| @property | @property | ||||
| def output_file(self): | def output_file(self): | ||||
| @@ -201,7 +202,7 @@ class BaseStepTraceParser: | |||||
| def _construct_event_info(self, next_event, event_info): | def _construct_event_info(self, next_event, event_info): | ||||
| """Construct event info according to next_event.""" | """Construct event info according to next_event.""" | ||||
| min_job_id = 255 | |||||
| min_job_id = self._step_end_tag_id | |||||
| step_flag: bool = lambda tag: tag > min_job_id or tag == 0 | step_flag: bool = lambda tag: tag > min_job_id or tag == 0 | ||||
| end_flag: bool = lambda tag: tag == min_job_id | end_flag: bool = lambda tag: tag == min_job_id | ||||
| fp_flag: bool = lambda tag: tag == self._fp_tag | fp_flag: bool = lambda tag: tag == self._fp_tag | ||||
| @@ -509,11 +510,39 @@ class AscendStepTraceParser(BaseStepTraceParser): | |||||
| return step_trace_files | return step_trace_files | ||||
| def _get_step_end_tag_id(self, source_files): | |||||
| """ | |||||
| Get step end tag id.This id is 255 before 2020.12.16,and 65535 now. | |||||
| File is an old version if there is no 65535 tag id, or it is a new version. | |||||
| """ | |||||
| step_num = 0 | |||||
| source_file = validate_and_normalize_path(source_files[0]) | |||||
| try: | |||||
| with open(source_file, 'rb') as handler: | |||||
| content = handler.read() | |||||
| for pos in range(0, len(content), 20): | |||||
| next_event = self._get_trace_struct(content[pos:pos + self._event_size]) | |||||
| # 1 means bp_start. | |||||
| if next_event.tag_id == 1: | |||||
| step_num += 1 | |||||
| # Step end tag id is 65535 in the new version. | |||||
| if next_event.tag_id == 65535: | |||||
| self._step_end_tag_id = next_event.tag_id | |||||
| # We only search the first step to find if there is 65535 tag id. | |||||
| if step_num == 2: | |||||
| break | |||||
| except (IOError, OSError) as err: | |||||
| log.warning(f'Failed to read {source_file} while get end tag id', err) | |||||
| raise ProfilerIOException | |||||
| def _parse(self, source_files): | def _parse(self, source_files): | ||||
| """Parse source step trace files.""" | """Parse source step trace files.""" | ||||
| log.info("Start to parse step trace file.") | log.info("Start to parse step trace file.") | ||||
| event_info = {} | event_info = {} | ||||
| self._get_step_end_tag_id(source_files) | |||||
| for source_file in source_files: | for source_file in source_files: | ||||
| source_file = validate_and_normalize_path(source_file) | source_file = validate_and_normalize_path(source_file) | ||||
| try: | try: | ||||