이번에 다루는 내용은 C-SPY?에서 프로파일러를 사용하는 방법에 대한 설명이다.

고성용 이사/ IAR 시스템즈
Sung-Yong.Ko@iar.com



프로파일러 소개

프로파일러의 소개 파트로 사용하는 이유, 내용, 요구 조건 등에 대해 살펴보도록 하자.

1. 프로파일러를 사용하는 이유
Function profiling을 사용하면  실행되는 동안 가장 많은 시간을 소비하는 소스 코드의 함수를 찾는 데 도움이 될 수 있다. 최적화할 때 이러한 함수들에 초점을 두어야 한다. 함수를 최적화하는 간단한 방법은 속도 최적화를 사용하여 컴파일하는 것이다. 또는 함수가 사용하는 데이터를 효율적인 메모리로 이동하는 것이다.
또는 프로파일되는 개별적인 함수들에 대해 제외할 수 있는 필터링 프로파일을 사용할 수 있다. 코드의 특정 부분만을 프로필하려면 C-SPY 프로파일링 정보를 생성하기 위해 시간 간격(Timeline 윈도우 사용)을 선택할 수 있다.
Instruction profiling은 매우 상세한 수준에서 특히, 어셈블러 소스 코드에 대한 코드를 조정하는데 도움이 될 수 있다. 컴파일된 C/C++ 소스 코드가 대부분의 시간을 보내는 곳을 이해하는데 도움이 되며, 그리고 더 나은 성능을 위해 다시 작성하는 방법에 대한 방안을 제공한다.

2. 프로파일러에 대한 요약
Function profiling 정보는 Function Profiler 윈도우에 표시된다. 즉, 응용 프로그램의 함수에 대한 타이밍 정보를 제공한다. 프로파일이 명시적으로 창의 도구 모음에서 버튼을 사용하여 활성화되어야만 하고, 이 설정이 해제될 때까지 활성화 상태를 유지한다.
Instruction profiling정보는 디스어셈블리 창에 표시된다. 즉, 명령어가 실행된 횟수를 표시한다.

1) 프로파일 소스(Profiling sources)
프로파일러는 프로파일 정보를 수집하기 위해 다른 메커니즘 또는 소스를 사용할 수 있다.
사용 가능한 추적 소스 특성에 따라, 프로파일을 위해 소스중 하나 이상을 사용할 수 있다.

- Trace(calls)
전체 명령 추적(ETM trace)은 모든 함수 호출과 리턴을 결정하기 위해 분석된다. 수집된 명령 시퀀스가 ETM 추적을 사용할 때 가끔씩 발생하는 것처럼 불완전하거나 불연속인 경우, 프로파일 정보의 정확도가 다소 떨어질 수 있다.
- Trace(flat) / Sampling
전체 명령 추적(ETM trace) 또는 각 PC 샘플(SWO trace)은 함수 호출과 리턴에 상관없이 해당 함수나 코드 조각(code fragment)에 할당된다. RTOS를 사용하거나 전체 디버그 정보가 없는 코드를 프로파일하는 경우처럼 정상적인 함수 호출/리턴 순서를 가지지 않은 응용프로그램을 사용할 때 가장 유용하다.
- Breakpoints
프로파일러는 모든 함수 진입점에 중단점을 설정한다. 실행하는 동안 프로파일러는 각 중단점을 만날 때마다 함수 호출 및 리턴에 대한 정보를 수집한다. 이것은 많은 하드웨어 중단점이 지원한다고 가정하며, 실행 성능에 큰 영향을 미치고 있다.

2) 전원 샘플링
일부 디버그 프로브는 개발보드 또는 보드의 구성 요소에 대한 소비 전력의 샘플링을 지원한다. 각 샘플은 PC 샘플과 관련되어 있고 샘플 시간의 작은 시간 간격에 대한 소비 전력(실제로, 전기 전류를)을 나타낸다. 프로파일러가 전원 샘플링을 사용하도록 설정되면 프로파일러 윈도우에 열이 추가되어 표시된다.
그냥 평범한 PC 샘플링과 마찬가지로 파워 샘플링은 함수나 코드 조각과 연결되어 있다. 이 샘플에 해당하는 모든 에너지가 해당 함수나 코드 조각에 기인했다는 것을 의미하지 않는다. 전원 샘플 및 명령 실행의 시간 척도는 매우 다르다. 전원을 측정하는 동안 CPU는 일반적으로 수천의 명령어를 실행한다. 전원 샘플링은 통계 툴이다.

3. 프로파일러를 사용하기 위한 요구사항
C-SPY 시뮬레이터는 프로파일러를 지원하며, 특별한 요구 사항은 없다.
하드웨어 디버거 시스템에서 프로파일러를 사용하려면 다음 사항이 필요하다(표 1).
 - 프로브 및 대상 시스템 사이에 SWD/SWO 인터페이스를 가진 I-jet in-circuit디버깅 프로브, JTAGjet, J-Link, J-Trace, ST-LINK 디버그 프로브이며, Cortex-M 디바이스 기반이어야 한다.
- ETM trace가 있는 JTAGjet-Trace in-circuit debugging probe와 ARM 디바이스
- J-Trace 디버그 프로브 및 ETM trace가 있는 ARM7/9 디바이스
- J-LINK 또는 J-TraceUltra 프로브

프로파일러 사용하기

이 섹션은 프로파일러를 사용하여 관련된 다양한 작업을 설명한다.

- 함수 수준에서 프로파일러를 사용하기
- 명령어 수준에서 프로파일러를 사용하기
- 프로파일 정보에 대한 시간 간격 선택


표 1.
C-SPY 드라이버 프로파일 지원(1: Cortex-M 디바이스만 지원, 2: I-jet만 지원)



표 2.
프로파일 활성화를 위한 프로젝트 옵션


1. 함수 수준에서 프로파일러를 사용하기
함수 프로파일러 창에서 함수 프로파일 정보를 표시하려면 다음의 사항을 유의해야 한다.

- 다음 옵션을 사용하여 응용 프로그램을 빌드한다(표 2).
- 함수 프로파일에 대한 프로파일러를 설정하려면 ETM 추적을 사용하는 경우, Trace Settings대화 상자에서Cycle accurate tracing옵션이 선택되어 있는지 확인한다. SWD / SWO 인터페이스를 사용하는 경우 특별한 설정이 필요하지 않다.
- 응용 프로그램을 빌드하고 C-SPY을 시작했을 때, 함수 프로파일러 창을 열기 위해 Driver-menu>Function Profiler를 선택하고, 그리고 프로파일러를 동작시키기 위해 Enable 버튼을 클릭한다. 또는 함수 프로파일러 윈도우에서 마우스 오른쪽 버튼을 클릭하여 사용할 수 있는 문맥 메뉴에서 Enable을 선택한다.
- 프로파일 정보를 수집하기 위해 응용 프로그램을 실행한다.
- 프로파일 정보는 함수 프로파일러 창에 표시된다. 정렬하려면 관련 열 헤더를 클릭한다.
- 새로운 샘플링을 시작할 때, 데이터를 지우기 위해 Clear 버튼을 클릭하거나 문맥 메뉴를 이용한다.

2. 명령어 수준에서 프로파일러를 사용하기
디스어셈블리 윈도우에 명령어 프로파일 정보를 표시하려면 다음의 사항을 유의해야 한다.

- 응용 프로그램을 빌드하고 C-SPY을 시작했을 때, 디스어셈블리 윈도우를 열기 위해 View>Disassembly선택하고, 디스어셈블리 윈도우의 왼쪽 여백에서 오른쪽을 클릭하여 사용할 수 있는 문맥 메뉴에서 Instruction Profiling>Enable을 선택한다.
- 프로파일 정보를 표시하려면 문맥 메뉴에서 Show 명령이 선택되어 있는지 확인한다.
- 프로파일 정보를 수집하기 위해 응용 프로그램 실행을 시작한다.
- 실행이 중지되면, 이는 프로그램 종료에 도달하거나 중단점이 트리거되기 때문이며 명령어 수준 프로파일 정보를 창의 왼쪽 여백에서 볼 수 있다(그림 1).

각 명령어에 대해 실행된 횟수가 표시된다.
명령어 프로파일은 함수 프로파일러와 같은 소스를 사용하려 한다. 함수 프로파일러가 활성화되어 있지 않은 경우 명령어 프로파일러는 먼저 추적 데이터를 이용하려 하고 소스로 PC샘플링을 사용하려 한다. 함수 프로파일러 윈도우에서 사용할 수 있는 문맥 메뉴에서 사용되는 소스를 변경할 수 있다.


그림 1.
디스어셈블리 창에서 명령어 개수




그림 2.
선택된 시간 간격의 전원 그래프



그림 3.
시간 간격 모드에서 함수 프로파일러 창

 

3. 프로파일 정보에 대한 시간 간격 선택
일반적으로, 프로파일러는 수신한 모든 PC 샘플로부터 정보를 계산하는데, 명시적으로 프로파일 정보를 지울 때까지 더 많은 정보를 누적한다. 그러나 프로파일러가 PC 샘플을 계산하는 시간 간격을 선택할 수 있다. 이 기능은 I-jet in-circuit 디버그 프로브, JTAGjet 디버그 프로브, J-Link 프로브, J-Trace 프로브, 그리고 ST-LINK 프로브에서 지원된다.
시간 간격을 선택하려면 다음과 같다.

- C-SPY 드라이버 메뉴에서 Function Profiler를 선택한다.
- 함수 프로파일러 창에서 마우스 오른쪽 버튼을 클릭하고 문맥메뉴에서 Source: Sampling을 선택한다.
- 샘플을 수집하기 위해 응용 프로그램을 실행한다.
- View>Timeline을 선택한다.
- 타임 라인 창에서 시간 간격을 선택하기 위해 클릭 후 드래그한다(그림 2).
- 선택한 시간 간격에서 마우스 오른쪽 버튼을 클릭하고 문맥 메뉴에서 Profile Selection을 선택한다. 함수 프로파일러 창은 이제 선택한 시간 동안의 프로파일 정보를 표시한다(그림 3).
- 전체 프로파일보기를 전환하기 위해 Full/Time-interval profiling 버튼을 클릭한다.

프로파일러에 대한 참조 정보

이 섹션에서는 윈도우 및 대화 상자에 대한 참조 정보를 제공한다. 지난 호에서 설명했던 Disassembly window, ETM Trace Settings dialog box, SWO Trace Window Settings dialog box, SWO Configuration dialog box도 참조하기 바란다.

1. 함수 프로파일러 윈도우(Function Profiler window)
함수 프로파일러 윈도우는 C-SPY 드라이버 메뉴에서 사용할 수 있다.
그림 4는 함수 프로파일 정보를 표시한다. Trace(flat)를 선택하면 윈도우의 왼쪽 여백에 각 줄에 체크 박스가 나타난다. 프로파일의 라인을 포함시키거나 제외하기 위해 체크박스를 사용한다. 제외된 라인은 희미하지만 제거되지 않는다.



그림 4.
함수 프로파일러 윈도우


그림 5.
툴바(좌로부터Enable/Disable, Clear, Save, Graphical view, Time-interval mode)

 

1) 요구사항
다음 중 하나를 사용하여야 한다.

- C-SPY 시뮬레이터
- C-SPY I-jet/JTAGjet 드라이버
- C-SPY J-Link/J-Trace 드라이버
- C-SPY ST-LINK 드라이버.

2) 툴바(그림 5)
도구 모음이 포함되어 있다.

- Enable/Disable: 프로파일러를 활성화 또는 비활성화한다.
- Clear(지움): 모든 프로파일 데이터를 지운다.
- Save(저장): 탭으로 분리된 열을 가진 파일로 윈도우의 내용을 저장할 수 있는 표준 Save As 대화 상자를 열어보자. 확장되지 않은 행만이 리스트 파일에 포함된다.
- Graphical view(그래픽보기): 그래픽 바가 있는 비율 항목에 값을 겹쳐 표시한다.
- Progress bar(진행률 표시 줄): 계속해서 처리 중인 프로파일 데이터의 백로그(backlog)를 표시한다. 프로파일러가 데이터를 처리하는 것보다 수신되는 데이터의 비율이 높으면 백로그는 축적된다. 진행률 표시 줄은 프로파일러가 계속해서 데이터를 처리하는 내용뿐만 아니라 프로파일러가 대략 얼마만큼이나 처리했는지를 나타낸다. 프로파일러가 특정 속도로 데이터를 처리하고 대상 시스템이 다른 속도로 데이터를 제공하기 때문에 처리되는 데이터 여분이 증가하거나 감소할 수 있다. 진행률 표시 줄은 그에 따라 증가 또는 감소할 수 있다.
- Time-interval mode(시간 간격 모드): 선택한 시간 간격 또는 전체 프로파일로 전환한다. 이 툴바 버튼은 디버그 프로브가 PC 샘플링을 지원하는 경우에만 사용할 수 있다.
- Status field(상태 필드): 선택한 시간 간격의 범위를 표시한다. 달리 말하면, 프로파일된 선택을 표시한다. 시간 간격 프로파일링 모드가 설정되어 있는 경우 이 필드는 노란색이다. 디버그 프로브가 PC 샘플링을 지원하는 경우 이 필드를 사용할 수 있다(SWO trace).

3) 표시 영역
표시 영역의 내용은 프로파일 정보에서 사용되는 소스에 따라 달라진다.

- 중단점 및 Trace(call) 소스에 대해 디스플레이 영역에는 디버그 정보가 포함되어 컴파일된 각 함수를 한 줄씩 포함한다. 일부 프로파일 정보가 수집되었고, 다른 함수에서 호출되는 함수의 행을 확장할 수 있다. 주어진 함수에 대한 하위(자식) 항목들은(child items) 상위(부모) 함수에서 호출되는 모든 함수와 해당 통계 내용을 나열한다.
- 샘플링 및 Trace(flat) 소스에 대해 디스플레이 영역에는 응용 프로그램의 각 C함수에 대한 하나의 행을 포함할 뿐만이 아니라 런타임 라이브러리 또는 해당 어셈블러 레이블에서만 나타나는 디버그 정보 없는 기타 코드에 대한 코드 섹션에 대해서도 표시한다. 추적 데이터에서 각 실행된 PC 주소는 별도의 샘플로 처리되고 프로파일 윈도우에서 해당 라인과 연결되어 있다. 각 행은 그 샘플의 개수가 포함되어 있다.

4) 디스플레이 영역
보다 구체적으로, 디스플레이 영역은 다음 항목에 대한 정보를 제공한다.

- Function(All sources): 프로파일된 C함수의 이름이다. 런타임 라이브러리 또는 해당 어셈블러 레이블에서만 나타나는 디버그 정보 없는 기타 코드에 대한 코드 섹션에 대해서도 표시한다.
- Calls(Breakpoints and Trace(calls)): 함수가 호출된 횟수
- Flat time(Breakpoints and Trace(calls)): 함수 내에서 소비한 사이클 시간
- Flat time(%)(Breakpoints and Trace(calls)): 플랫 시간을 총 시간의 비율로 표현
- Acc. time(Breakpoint and Trace(calls)): 사이클 시간은 함수 내에서, 이 함수에서 호출한 모든 함수에서 소비한 시간
- Acc. time(%)(Breakpoints and Trace(calls)): 축적된 시간이 총 시간의 비율로 표현
- PC Samples(Trace(flat)and Sampling): 함수와 관련된 PC 샘플의 수다.
- PC Samples(%)(Trace(flat)and Sampling): 샘플 총 수에 대한 비율로 함수와 관련된 PC 샘플의 수에 해당한다.
- Power Samples(Power Sampling): 그 함수와 연관된 전력 샘플의 수다.
- Energy(%)(Power Sampling): 그 함수와 관련된 모든 측정의 축적된 값으로 전체 측정에 대한 비율로 표현
- Avg Current[mA](Power Sampling): 그 함수와 관련된 모든 샘플에 대한 평균 측정값이다.
- Min Current[mA](Power Sampling): 그 함수와 관련된 모든 샘플에 대한 최소 측정값이다.
- Max Current[mA](Power Sampling): 그 함수와 관련된 모든 샘플에 대한 최대 측정값이다.
- Context menu(문맥 메뉴): 이 문맥 메뉴를 사용할 수 있다(그림 6).



그림 6.
Function Profiler 윈도우 문맥 메뉴(내용은 사용하는 C-SPY 드라이버에 따라 달라진다)

 

5) 명령
- Enable: 프로파일을 활성화한다. 또한 이 윈도우가 닫혀 있어도 시스템은 정보를 수집한다.
- Clear: 모든 프로파일 데이터를 지운다.
- Filtering: 프로파일하려는 코드의 부분을 선택한다. Check All과 Uncheck All, Load, Save 중에서 선택할 수 있다. 이 중 'Check All'은 '프로파일에서 모든 라인을 제외한다'이고, 'Uncheck All'은 '프로파일의 모든 라인을 포함한다', 'Load'는 '저장된 파일에서 제외된 모든 라인을 읽는다', 'Save'는 '제외된 모든 라인들을 파일에 저장한다. 일반적으로이 엔지니어의 한 그룹이며 제외된 세트를 공유하기 원하는 경우 매우 유용할 수 있다'이다. 'Save'는 Trace(flat) 또는 샘플링 모드 중 하나를 사용하는 경우에서만 사용할 수 있다.

- Source: 프로파일 정보를 위해 사용되는 소스를 선택한다. 다만 사용 가능한 소스는 사용하고 있는 C-SPY 드라이버에 따라 달라진다. Sampling과 Trace(calls), Trace(flat) 중에서 선택할 수 있는데, 'Sampling'은 '명령어 프로파일에 대한 명령어 수는 각 명령어에 대한 샘플 수를 나타낸다'이고, 'Trace(calls)'은 '명령어 프로파일에 대한 명령어 수는 수집된 추적 데이터만큼 가능하다', 'Trace(flat)'은 '명령어 프로파일에 대한 명령어 수는 수집된 추적 데이터만큼 가능하다'이다.
- Power Sampling: 전력 샘플링에 대한 정보를 on/off를 전환한다. 이러한 명령은 I-jet in-circuit 디버깅 프로브, JTAGjet, J-LINK 및 J-Trace, J-LINK Ultra디버그 프로브에서 지원한다.


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