Sui Trace Analysis
Replaying a transaction 은 가스 사용량, 호출된 함수, 실행된 명령어 등 transaction 실행에 대한 자세한 정보가 포함된 추적 파일이 생성된다. Sui CLI를 사용하여 추적 파일을 분석하고 유용한 정보를 추출하기 바란다.
Profile a transaction
sui analyze-trace -p <PATH_TO_TRACE_FILE> gas-profile 명령을 사용하여 transaction에 대한 추적을 분석하고 가스 프로파일을 생성한다.
이 명령은 현재 작업 디렉터리에 gas_profile_{TRACE_FILE_NAME}.json 형식으로 프로파일을 출력한다. analyze-trace 명령에 --output/-o 플래그를 사용하여 프로파일의 다른 출력 디렉터리를 지정할 수도 있다. speedscope를 사용하여 생성된 프로파일을 표시한다.
Speedscope를 설치하려면 다음을 실행한다:
$ npm install -g speedscope
다음으로 SpeedScope에서 프로파일을 열기 위해서는 다음을 실행한다:
$ speedscope <PATH/PROFILE-OUTPUT-FILE>
Speedscope에서 프로파일을 볼 때 세 가지 보기 방식을 사용할 수 있다: Time Order, Left Heavy, 그리고 Sandwich.
각 뷰에서 막대의 세로 너비는 해당 함수로 인해 발생한 가스 소비량 백분율에 해당한다. 막대 위에 마우스를 올리거나 클릭하면 함수 호출로 인해 발생한 계산 단위를 확인할 수 있다.
Transaction의 총 계산 및 스토리지 단위에 가스 가격을 곱하여 티어 시스템을 기반으로 transaction의 총 가스 비용을 결정한다.
Time Order 함수 호출의 호출 스택을 호출 순서대로 왼쪽에서 오른쪽으로 표시하는 반면, Left Heavy 는 중첩된 호출의 반복 시퀀스를 하나의 결합된 호출 스택으로 결합한다.
Left Heavy 결합된 호출 스택당 총 가스 소비량을 기준으로 왼쪽에서 오른쪽으로 시퀀스를 표시한다. 이는 동일한 함수에 대한 수백 건의 반복 호출이 있을 때 모든 호출의 총 가스 소비량을 빠르게 파악하는 데 유용하다.
두 가지 뷰 모두에서 상단 섹션을 클릭하고 끌어서 프로파일의 다른 섹션을 확대하거나 축소한다.
Sandwich 뷰는 함수별 가스 소비량에 해당하는 불연속 값 목록을 보여 준다. Total 값은 해당 함수가 호출하는 모든 함수에서 발생한 가스 비용을 보여 준다. Self 값은 해당 함수의 가스 비용만 보여 준다.
Transaction의 가스 소비량을 관찰하면 패키지의 예상 가스 비용을 파악할 수 있다. 패키지 개발 과정에서 run a local network 와 패키지를 로컬에 게시할 수 있다. 그런 다음 패키지를 호출하는 transaction을 생성하고 해당 transaction에 프로파일러를 실행하여 가스 비용 내역을 확인할 수 있다.