[테크월드=이나리 기자] 펑션 프로파일링(Function Profiling)은 응용 프로그램의 함수 수행에 대한 여러 정보를 수집해 표시해 주는 기능이다. IAR 임베디드 워크벤치(IAR Embedded Workbench)는 이와 같은 펑션 프로파일링을 지원하고 있으며 별도의 펑션 프로파일러 창을 제공해 펑션 프로파일링에 대한 많은 정보를 확인 할 수 있다.

펑션 프로파일러 기능은 사용자에 의해 On/Off 제어 될 수 있다. 또한 디스어셈블리(Disassembly) 창에서는 명령어 별 수행 횟수도 표시가 된다. 펑션 프로파일러 기능은 사용되는 디버거 환경에 따라 기능 지원의 차이가 있다.


프로파일러 사용 시 요구사항 
• I-jet in-circuit debugging probe, a JTAGjet, a J-Link, a J-Trace, ST-LINK 디버그 프로브는 SWD/SWO연결이 가능한 코어텍스(Cortex)-M기반의 디바이스에서 사용할 수 있다. 
• JTAGjet-Trace in-circuit debugging probe는 ARM 디바이스에서 ETM trace를 사용할 수 있다. 
• J-Trace는ARM7/9 또는 코어텍스-M디바이스에서ETM trace가 된다. 


프로파일러 사용하는 방법 

펑션 프로파일러를 사용하기 위해 Function Profiler 창을 활성화 시킨다. 
1) 다음의 옵션을 포함해 프로젝트를 빌드Build 한다. 
- C/C++ Compiler 카테고리의 Output탭에서Generate debug information를 체크[그림 1].

[그림 1]


- Linker 카테고리의 Output탭에서 Include debug information in output를 체크한다[그림 2].

[그림 2]


2) 펑션 프로파일러를 사용하기 위한 설정 

- ETM trace를 사용한다면 반드시 Trace Setting에서 Cycle accurate tracing 오션을 선택해야 한다. 
- SWD/SWO 인터페이스를 사용한다면 별도의 설정항목은 없다. 

3) Project를 build 한 후 C-SPY모드로 진입한다. C-SPY Driver 메뉴에서Function Profiler 항목을 선택해Fuction profiler창을 띄운다. Fuction profiler창의 좌측상단에 Enable버튼을 누르거나Fuction profiler창에서 마우스 오른쪽 버튼을 눌러 컨텍스트 메뉴에서 Enable을 선택해 Function profiler를 활성화 시킨다[그림 3]. 

[그림 3]

4) 응용 프로그램을 실행시켜 프로파일링 정보를 수집한다. 

5) 응용 프로그램 실행을 멈추면 수집된 프로파일링 정보는 Function profiler창에 표시된다. 데이터를 정렬해 보려면 해당 열의 Header를 누르면 된다. 

6) 수집된 정보를 삭제하고 새로운 정보를 얻고 싶다면 좌측 상단의 Clear버튼을 누르거나 마우스 오른쪽 버튼을 눌러 컨텍스트 메뉴에서 Clear를 선택한다[그림 4]. 

[그림 4]


인스트럭션 레벨에서 프로파일러 시작하기 

Disassembly 창에서 명령어 레벨의 프로파일링 정보를 확인할 수 있다.

1) Project를 Build한 후 C-SPY 모드로 진입해 Veiw메뉴의 Disassembly를 선택한 후 Disassembly창을 띄운다. Disassembly창에서 마우스 오른쪽 버튼을 눌러 컨텍스트 메뉴의 Instruction Profiling -> Enable을 선택한다[그림 5]. 

[그림 5]

2) 프로파일링 정보 표시를 위해 컨택스트 메뉴의 Instruction Profiling  Show항목이 반드시 체크돼 있어야 한다. 

3) 응용 프로그램을 실행시켜 프로파일링 정보를 수집한다. 

4) 응용 프로그램 실행을 멈추면 Disassembly창 좌측 공간에 Instruction level의 프로파일링 정보가 표시된다[그림 6]. 

[그림 6]


파워 샘플링(Power sampling)

몇몇 디버그 프로브들은 보드 전체의 전류소모를 측정 하거나 일정 파트의 전류 소모를 측정 할 수 있다. 각각 측정된 전류 샘플들은 Program Counter(PC) 샘플 값과의 연관관계를 가지고 있기 때문에 측정된 전류값 또한 프로파일링 정보가 될 수 있다. Power smaple을 표시하기 위해 Function profiler 창에서 마우스 오른쪽 버튼을 눌러 컨택스트 매뉴에서 Power Sampling을 체크한다[그림 7].

[그림 7]

Power sample과 관련된 몇몇의 항목이 추가된다. 참고로 Power sample과 명령어 수행의 시간적 의미는 매우 다르다. 한개의 Power sample이 측정될 때 CPU에서는 수천개의 명령어가 처리될 수 있다. 

프로파일링 정보의 시간 간격 선택 

일반적으로 프로파일러는 누적된 정보 Clear 명령이 있을 때까지 모든 PC 샘플에 대한 정보를 계속해서 누적시켜 표시한다. 그러나 몇몇 디버깅 프로브(I-jet, JTAGjet, J-Link, J-Trace, ST-LINK)에서는 시간 간격을 정하고, 정해진 시간에 격 내 측정된 PC Sample들의 정보만 볼 수 있는 기능이 지원된다.

시간 간격을 선택하는 방법 

1) C-SPY모드 진입 후 사용 중인 C-SPY Driver 메뉴에서 Function Profiler를 선택해 프로파일러 창을 띄운다. 
2) Fuction profiler창에서 마우스 오른쪽 버튼을 눌러 컨텍스트 메뉴에서 Source: Sampling을 체크 한다. 
3) 응용 프로그램을 실행시켜 프로파일링 정보를 수집한다.
4) C-SPY Driver 메뉴에서 Timeline을 선택해 Timeline 창을 띄운다. 
5) Timeline 창에서 Click and Drag로 프로파일링 정보를 확인할 구간을 설정한다[그림 8]. 

[그림 8]

6) 설정된 구간에서 마우스 오른쪽 버튼을 눌러 컨텍스트 메뉴의 Profile Selection을 선택한다. Function Profiler 창에 선택된 구간의 프로파일링 정보가 표시된다[그림 9]. 

[그림 9]

7) Full/Time-interval profiling 버튼을 눌러 모든 정보 표시와 선택구간 정보 표시를 서로 전환 할 수 있다.

Reference information on the profiler

[그림 10]은 Function Profiler 창의 모습이다. 

[그림 10]

Function Profiler의 내용이 Source: Trace(flat) 또는 Source: Sampling이 선택돼 있는 경우(연결된 디버깅 프로브에 따라 선택 가능한 내용 선택이 다를 수 있다) 함수명 왼편에 체크박스가 활성화 된다. 기본적으로 모든 함수가 체크돼 있으며, 체크 해제를 하면 해당 함수는 프로파일링 정보 수집이 제외되고, 옅은 회색으로 표시된다.

Function Profiler 창의 상세 항목들의 내용은 다음과 같다.

맺음말

펑션 프로파일러는 SWO를 통해 프로그램 카운터(Program counter)의 샘플 정보를 받아 함수마다 프로파일링 정보를 보여주는 기능을 한다. 만일 트레이스(Trace) 기능의 장비를 사용한다면 함수 마다 콜 횟수, 함수 수행시간 등 다양한 정보를 확인할 수 있다. 펑션 프로파일러는 직접 디버깅에 유용하게 사용되는 기능은 아니지만, 프로젝트 코드의 최적화 진행에 함수 별 우선 순위를 정하거나 프로젝트의 성능 평가에 활용할 수 있는 자료를 만들어 낸다.

글: 이현도 IAR시스템즈 기술지원팀 과장
자료제공: IAR SYSTEMS

회원가입 후 이용바랍니다.
개의 댓글
0 / 400
댓글 정렬
BEST댓글
BEST 댓글 답글과 추천수를 합산하여 자동으로 노출됩니다.
댓글삭제
삭제한 댓글은 다시 복구할 수 없습니다.
그래도 삭제하시겠습니까?
댓글수정
댓글 수정은 작성 후 1분내에만 가능합니다.
/ 400
내 댓글 모음
저작권자 © 테크월드뉴스 무단전재 및 재배포 금지