파워 디버깅(Power Debugging)

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




전원 디버깅 소개

파워 디버깅을 위한 기술과 예상하지 못한 파워 소비의 결과를 갖는 소스코드 구조를 찾기 위해서 C-SPY?를 사용하는 방법에 대해 설명한다.

1. 파워 디버깅을 사용하는 이유
긴 배터리 수명은 거의 모든 시장 세그먼트에서 많은 임베디드 시스템에 있어 매우 중요한 요소가 되었다(의료, 가전 제품, 홈 오토메이션 등). 이러한 시스템의 전력 소비는 하드웨어 설계에 따라 달라질 뿐만 아니라 어떻게 하드웨어를 사용하는지도 관련이 있다. 시스템 소프트웨어가 하드웨어를 어떠한 방법으로 사용할지에 대한 제어를 하게 된다.

2. 파워 디버깅 간단한 소개
파워 디버깅은 전력 소비를 샘플링하는 능력을 기반으로 한다. 좀 더 자세하게 말하면, 전원은 CPU 및 주변 장치에 의해 소비된다. 그리고 응용 프로그램의 명령 시퀀스 그리고 소스코드 및 프로그램 실행의 다양한 이벤트들은 이러한 각각의 샘플들과 상호 연관되어 있다.

전통적으로, 기본 소프트웨어 설계의 목표는 가능한 한 작은 메모리를 사용하는 것이다. 그러나, 소스코드와 응용 프로그램의 전력 소비의 상호 연관 관계를 통해 소프트웨어가 전력 소비에 미치는 영향을 알 수 있으며, 그래서 어떻게 최소화할지에 대한 통찰력이 생기게 된다.

- 소비 전력 측정
디버그 프로브는 디바이스에 전원을 공급하고 있는 일련의 작은 저항에서 전압 강하를 측정한다. 전압 강하는 차등 증폭기에 의해 측정되고 그런 다음 AD 변환기에 의해 샘플링된다. 실행해야 하는 임계값과 그 임계값에 도달했을 경우 적절한 조치를 지정할 수 있다. 이 의미는 전력 측정을 사용하거나 사용하지 않도록 할 수 있으며 응용 프로그램의 실행을 중지하고 예상치 못한 전력 소비의 원인을 확인할 수 있음을 말한다.

- C-SPY을 이용한 파워 디버깅
C-SPY는 파워 디버깅을 구성하기 위한 인터페이스와 전력 소비값에 대한 일련의 윈도우 제공한다. 파워 설정 윈도우에서 임계값과 임계값에 도달할 때 해야 할 작업을 지정할 수 있다.
파워 로그 윈도우는 로그 전력값을 표시한다. 이 창은 파워 로그에서 정점을 찾을 수 있고 그 값이 소스코드와 연관되어 있어 상응하는 코드로 이동하기 위해 파워 로그 윈도우에서 해당 값을 더블 클릭하면 된다. 정밀도는 샘플하는 주기에 따라 다르지만, 정점을 야기하는  소스코드 시퀀스를 찾을 수 있는 좋은 기회가 된다.

타임라인 윈도우는 시간 비율에 대해 전력값을 표시한다. 윈도우에 전력 소비와 관련된 다른 정보를 볼 수 있는 편리한 방법이다. 타임라인 창은 파워 로그 창, 소스코드 창, 디스어셈블리창 모두 서로 관련되어 있으며, 이는 타임라인에서 보는 값에 상응하는 소스코드로 더블 클릭만으로 이동한다.
함수 프로파일러 창은 함수에서 소비하는 전력 소비를(파워 프로파일) 표시하는 파워 로그와 함수 프로파일 기능이 결합되어 있다. 함수에 따른 각각 값에 대한 목록과 최대값 및 최소치와 함께 평균값도 볼 수 있다.
그러므로 전력 소비에 대해 최적화할 때 집중해야 하는 어플리케이션의 영역을 찾을 수 있게 된다.

3. 파워 디버깅에 대한 요구 사항
파워 디버깅을 위해 C-SPY의 기능을 사용하려면 다음의 조건이 필요하다.

- SWO 있는 Cortex-M3 device
- I-jet in-circuit디버깅 프로브, JTAGjet, J-LINK, 또는 J-LINK Ultra디버그 프로브. J-LINK 프로브는 매우  제한된 정확도와 낮은 해상도를 가지고 있음을 주의하자.



전력 소비에 대한 소스코드 최적화


이 섹션에서는 전원 디버깅에 유용할 수 있는 몇 가지 예제를 제공한다. 이로써 낮은 전력 소비에 대해 최적화할 수 있는 소스코드 구조를 식별하는 데 도움이 되기를 바란다.
1. 장치 상태에 대한 대기
불필요한 전력 소모가 발생할 수 있는 일반적인 구조는 예를 들어 주변 장치처럼, 상태 변경을 기다리는 루프를 사용하는 것이다. 이 예와 같은 구조는 예상 상태로 변경될 때까지 중단 없이 실행된다.


while (USBD_GetState() < USBD_STATE_CONFIGURED);
while ((BASE_PMC->PMC_SR & MC_MCKRDY) != PMC_MCKRDY);

전력 소비를 최소화기 위해 장치 상태 폴링에서 가능하면 인터럽트 또는 CPU가 조사하는 사이에 멈출 수 있도록(sleep) 타이머 인터럽트로 재작성한다.

2. 소프트웨어 지연
소프트웨어 지연은 for 또는 while 루프처럼 구현될 수 있다. 예를 들면 다음과 같다.


i = 10000; /* A software delay */
do i--;
while (i != 0);

이러한 소프트웨어 지연은 시간이 경과되는 것을 제외하면 아무것도 하지 많고 명령어를 실행하며 CPU를 지속적으로 바쁘게 한다. 시간 지연은 하드웨어 타이머를 사용하여 구축하는 것이 훨씬 더 좋다. 타이머 인터럽트를 설정하고 그리고 난 후 CPU는 인터럽트에 의해 깨어나기 전까지 저전력 모드로 진입한다.

3. DMA 대 Polled I/O
DMA는 전통적으로 전송 속도증가에 사용됐다. MCU들에 대해 유연성, 속도 증가 및 낮은 전력 소비를 위한 DMA 기술이 많다. 때로는 CPU가 절전 모드에 있는 동안 DMA 전송을 할 수 있다. 파워 디버깅은 디버거에서 기존의 CPU기반 폴링 방식 솔루션과 DMA 기술의 전력 소비에 대해 직접 실험을 해 볼 수 있다.

4. LOW-POWER MODE 진단
대부분의 임베디드 응용 프로그램은 무슨 일이 발생하기를 기다리는 데 많은 시간을 보낸다. 직렬 포트에서 데이터를 수신, I/O 핀의 변화 상태를 관찰하거나, 만료되는 지연 시간 대기와 같은 상황이다. 유휴 상태에서 프로세서가 여전히 최고 속도로 실행하는 경우 배터리 수명은 매우 적은 동작만 수행하고 소모될 것이다.
많은 응용 프로그램에서 마이크로 프로세서는 전체 시간의 매우 작은 시간 동안에만 활성화되어 있으며, 유휴 시간 동안 저전력 모드로 진입하여 배터리 수명을 상당히 연장할 수 있다.

좋은 방법은 작업 지향 설계(task-oriented de sign)를 이용하고 RTOS를 사용하는 것이다. 작업 지향 디자인은 작업이 가장 낮은 우선순위를 정의할 수 있으며, 실행해야 할 다른 일이 없을 때만 실행된다. 이 유휴 작업은 전원 관리를 실행할 수 있는 완벽한 장소이다.

실제로, 유휴 작업이 활성화 될 때마다, 마이크로 프로세서는 저전력 모드로 진입한다. 많은 마이크로 프로세서 및 기타 실리콘 디바이스는 여러 저전력 모드를 가지고 있으며, 그들은 필요하지 않는 경우 마이크로 프로세서를 비활성화할 수 있다. 오실레이터는, 예를 들어, 비활성화 또는 낮은 주파수로 전환할 수 있다. 또한, 개별 주변 장치들, 타이머, 그리고 CPU가 중지 될 수 있다. 다른 저전력 모드는 주변 장치가 켜져 남아있는지에 따라 서로 다른 전력 소비를 가지고 있다. 다른 낮은 수준의 모드를 실험할 때 파워 디버깅 도구는 매우 유용할 수 있다. 다른 저전력 모드를 사용될 때 저전력 모드에서 시스템을 설정하는 테스크 또는 함수에 대해 전력 측정을 비교하기 위해 C-SPY의 함수 프로파일러를 사용할 수 있다. 평균값과 총 전력 소비량의 비율 모두는 비교 상에서 유용한 자료가 된다.

5. CPU 주파수
CMOS MCU의 전력 소비는 이론적으로 수식에 의해 주어진다.

P = F * U 2 * K(F는 클럭 주파수, U는 공급 전압이며, K는 상수)

전원 디버깅은 클럭 주파수의 요소로 소비 전력을 확인할 수 있다. 50MHz로 슬립 모드에서 매우 짧은 시간을 보내는 시스템은 100MHz에서 실행시 슬립 모드에 있는 시간이 50%를 차지할 것으로 예측한다.
예상 동작을 확인하기 위해 C-SPY에 수집된 전력 데이터를 사용할 수 있으며, 클럭 주파수에 대한 의존성이 일정하지 않는 경우에는 가장 낮은 전력 소비를 제공하는 운영 주파수를 선택해야 한다.

6. 실수로 무설정 주변 장치를 검출
사용하지 않은 경우에도 주변 장치는 전력을 많이 소모할 수 있다.
만약 저전력을 위해 디자인하는 경우 사용하지 않는 주변 장치에 대해 비활성화하고 설정하는 것은 매우 중요하다.
그러나 여러 가지 이유를 들어, 주변 장치의 전원 공급 장치를 남길 수 있다. 이것은 신중하고 정확한 결정이거나 불충분한 디자인 또는 실수가 될 수 있다. 첫 번째 경우가 아니면 예상보다 더 많은 전력이 응용 프로그램에 의해 소비될 것이다. 이러한 경우, 타임라인 창에서 전원 그래프에 의해 쉽게 드러날 것이다. 타임라인에서 전력 소비가 예기치 않게 높은 곳을 더블 클릭하면 상응하는 소스코드와 디스어셈블리 코드로 이동한다.

대부분의 경우, 동작이 되지 않는 주변 장치를 비활성화하는 것으로 충분한데, 예를 들어, 완전히 전력 소비를 종료하기 위해 그 장치의 클럭을 끈다.

그러나 클럭 게이팅이 충분하지 않는 경우도 있다. 컨버터 또는 비교기와 같은 아날로그 주변 장치는 클럭이 꺼져 있는 경우에도 상당한 전력량을 소비할 수 있다. 타임라인 창에서 클럭을 끄더라도 충분하지 않음을 알 수 있으며, 완전히 주변 장치를 해제해야 한다.

7. 이벤트 중심의 시스템에서 주변 장치
실행하는 동안 하나의 테스크가 아날로그 비교기를 사용하는 시스템을 고려한다면, 그 테스크는 높은 우선순위 테스크에 의해 일시 중지된다.

이상적으로, 비교기는 일시 정지 후 테스크가 재개되면 다시 동작해야 한다. 이러한 방식이 높은 우선순위의 테스크를 실행 중에 소비되는 전력을 최소화 한다.
그림 1은 하나의 이벤트 중심의 시스템의 전력소비에 대한개략도이며, 시간 t0 위치의 시스템은 비활성 모드에 있으며, 전류는 I0이다.

t1에서 시스템이 활성화되고 전류는 I1까지 상승하는데, 적어도 하나의 주변 장치를 활성화시키는 활성화 모드에서 시스템의 전류가 I1까지 상승하기 때문이다.
t2에서 이 실행은 높은 우선순위로 처리되고 인터럽트에 의해 중단된다. 이미 동작한 주변 장치는 높은 우선순위의 테스크에서 사용되지 않지만 해제되지 않았다. 대신에 새로운 테스크로 더 많은 주변 장치가 활성화되고 낮은 우선순위의 테스크로 다시 넘겨지는 t2와 t3 사이에 전류 I2로 증가하게 된다. 시스템의 기능이 더 우수하게 만들 수 있고 속도 및 코드 크기 측면에서 최적화 할 수 있다.

뿐만 아니라 전원 도메인에 더 최적화 될 수 있다. 만약 사용하지 않은 주변 장치가 t2와 t3 사이에 비활성화되어 있거나 두 개의 테스크의 우선순위가 바뀐 경우에 그림자 영역(노란색)은 절약할 수 있는 에너지를 나타내고 있다.
타임라인 창을 사용하는 경우, 사용되지 않는 주변 장치가 활성화되고 필요 이상의 긴 시간 동안 전력을 소비했는지에 대해 자세히 검사하고 식별할 수 있다.

물론, 예와 같은 상황처럼 어느 상황에서 주변 장치를 키고 끄기 위해 여분의 클럭 사이클을 소비할 필요가 있는지에 대해서는 좀 더 고려할 사항이다.


그림 1.
이벤트 중심의 시스템에서 소비 전력

 


그림 2.
오실로스코프에 기록된 노이즈 스파이크


8. 충돌 하드웨어 설정 찾기
플로팅 입력을 방지하기 위해 사용하지 않는 MCU I/O핀을 접지에 연결하는 것이 일반적인 설계이다.
만약 실수로 소스코드에서 접지된 I/O핀을 논리 1, 출력으로 지정하면 높은 전류가 그 핀에 배출될 수 있다. 이 높은 예상치 못한 전류는 쉽게 타임라인 창의 파워 그래프에서 현재 값을 읽어 관찰될 수 있다. 응용 프로그램을 시작할 때 전원 그래프를 보고해당 잘못된 초기화 코드를 찾을 수도 있다.

비슷한 상황은 I/O 핀이 입력으로 설계되어 있고 외부 회로에 의해 구동되지만, 코드가 잘못하여 출력으로 입력 핀을 구성되는 경우다.

9. 아날로그 간섭
같은 보드에 아날로그 및 디지털 회로를 혼합하는 경우, 보드 레이아웃 및 라우팅은 아날로그 노이즈 수준에 영향을 미칠 수 있다. 낮은 수준의 아날로그의 정확한 샘플링을 보장하기 위해 노이즈 레벨이 낮게 유지하는 것이 중요하다. 잘 혼합된 신호 설계를 얻기 위해 주의 깊은 하드웨어 고려 사항이 필요하다. 소프트웨어 디자인도 아날로그 측정의 품질에 영향을 미칠 수 있다.

아날로그 신호 샘플링으로 동시에 I/O 동작을 많이 수행하면 동시에 많은 디지털 라인에 토글 상태를 발생한다. 이는 AD 변환기에 추가 노이즈를 일으킬 수 있다(그림 2).

파워 디버깅은 아날로그 부분에 디지털 및 전원 공급 장치의 간섭을 조사하는데 많은 도움이 될 수 있다. AD 전환의 주변에 전원 스파이크는 노이즈의 소스가 될 수 있고 이를 조사해야 한다. 타임라인 창에 표시되는 모든 데이터는 실행 코드에 상관있다. 간단하게 의심스러운 전력값을 두 번 클릭하면 해당 C 소스코드를 표시한다.

파워 도메인에서 디버깅

파워 디버깅에 관련된 다양한 작업을 설명한다.

1. 응용 프로그램의 파워 프로파일을 표시하고 결과 분석

파워 프로파일을 보려면:
- SWO 구성 대화 상자를 열기 위해 driver-menu>SWO Configuration을 선택한다. CPU 클럭 옵션이 응용 프로그램에 의해 설정된 CPU 클럭값과 동일한 값으로 설정되어 있는지 확인하자. SWO clock을 설정하고 디버그 프로브에 올바른 데이터 전송을 위해 필요하다. C-SPY 시뮬레이터를 사용하는 경우, 이 단계를 무시할 수 있다.
- 타임라인 창을 열기 위해C-SPY driver>Tim eline 선택한다.
- 전원 그래프를 활성화하기 위해 그래프 영역에서 마우스 오른쪽 버튼을 클릭하고 컨텍스트 메뉴에서 Enable을 선택하자.
- 전원 로그 창을 열기 위해 C-SPY driver>Po wer Log를 선택하자.
- 선택적으로, 특정 인터럽트나 변수와 함께 전원값을 관련지어 보려는 경우, 각각 인터럽트 또는 데이터 로그 그래프 영역에서 마우스 오른쪽 버튼을 클릭하고 컨텍스트 메뉴에서 Enable을 선택하자. 변수의 경우, 또한 타임라인 창에서의 그래픽으로 표현되기를 원하는 각 변수에 대한 데이터 로그 중단점을 설정해야 한다.
- 선택적으로 응용 프로그램을 실행하기 전에 그래프의 Y축 범위를 구성할 수 있다.
- 응용 프로그램을 실행하기 위해 도구 모음에서 Go를 클릭한다. 파워 로그 창에서 모든 전력값이 표시된다. 타임라인 창에서 전력값의 그래픽 표현을 볼 수 있으며, 데이터와 인터럽트 로그도 그래프를 활성화한 경우 그래픽 표현을 볼 수 있다.
- 전력 소비를 분석하려면: 해당 소스를 강조하기 위해 관심 있는 전력값을 두 번 클릭하면 코드 편집기 창 및 디스어셈블리 창에서 강조 표시된다. 해당 로그는 파워 로그 창에 강조 표시된다. 이용하지 않을 때 비활성화 할 수 있는 주변 장치를 식별할 수 있다. 타임라인 창에서 다른 그래프와 조합된 파워 그래프를 분석함으로써 이 장치를 감지할 수 있다. 특정 인터럽트를 들어, 인터럽트 종료 후 예상치 못한 방법으로 전력 소비에서 변경 여부를 확인할 수 있다. 예를 들어, 인터럽트가 발생했을 때 전력 집약적 장치를 활성화하고 종료 전에 해제하지 않은 경우다.

2. 응용 프로그램 실행 동안 예상치 못한 전력 사용량 감지

예상치 못한 전력 소비를 감지하려면 :
- SWO 구성 대화 상자를 열려면 driver-menu>SWO Configuration 선택하자. 다음의 설정을 사용하고 있는지 확인하자. CPU 클럭은 응용 프로그램에서 설정한 CPU 클럭값으로 동일한 값으로 설정해야 한다. 디버그 프로브에서 올바른 데이터를 전송하기 위해 SO 클럭을 설정해야 한다.
- 전원 설정 창을 열기 위해 driver-menu>Po wer Setup을 선택한다.
- 전원 설정 창에서 임계값과 적절한 조치를 지정한다. 예를 들어 Log All and Halt CPU Above Threshold다.
- 파워로그 창을 열기 위해 driver-menu>Power Log를 선택한다. 파일에 전력값을 지속적으로 저장하려면 컨텍스트 메뉴에서 Choose Live Log File을 선택한다. 이 경우 또한 Ena ble Live Logging to를 선택해야 한다.
- 실행을 시작한다.

전력 소비가 임계값을 통과하면 실행 중지되고 지정한 작업을 수행한다.
파일에 전력값을 저장하는 경우, 추가 분석을 위해 외부 도구에서 해당 파일을 열 수 있다.

파워 디버깅에 대한 참조 정보

파워 디버깅과 관련된 윈도우와 대화 상자에 대한 참조 정보를 제공한다.

1. 파워 로그 설정 윈도우(Power Log  Setup window)
파워 로그 설정 창은 디버그 세션동안 C-SPY 드라이버 메뉴에서 사용할 수 있다. 전력 측정을 구성하려면 이 창을 사용하자(그림 3).


그림 3.
파워 로그 설정 윈도우

※ 참고: 전원 로깅을 활성화하려면 이 전원 로그 창에서 컨텍스트 메뉴 또는 타임라인 창에서 전원 로그 그래프의 컨텍스트 메뉴에서 Enable을 선택한다.

2. 전원 로그 윈도우(Power Log window)
전원 로그 창은 디버그 세션동안 C-SPY 드라이버 메뉴에서 사용할 수 있다(그림 4).
이 창은 수집된 전력값을 표시한다. 시간/사이클 및 프로그램 카운터만 회색으로 되어 있는 행은 실제 수집하는 동안 활성화된 한 채널의 전력 데이터의 값을 나타내지만, 현재는 전원 설정 창에서 비활성화되어 있다.


그림 4.
파워 로그 윈도우

※ 참고: 로그된 전력값의 개수에 제한이 있다. 이 제한을 초과하는 경우 버퍼의 시작 부분의 항목이 삭제된다.

3. 타임라인(Timeline)
Timeline window에서는 시간정보와 함께 파워샘플에 대한 소비 전류값을 그래프로 표현하여 시각적으로 소비전류에 대한 상황을 쉽게 파악할 수 있게 해준다. 전력소비에 대한 양상을 시간단위를 조정하면서 파악할 수 있다(그림 5). 해당 위치에서 더블클릭하면 상응하는 소스코드와 연계 동작한다.



그림 5.
타임라인


4. 함수 프로파일러(Function Profiler)
함수 프로파일러는 실행되는 동안 가장 많은 시간을 소비하고 있는 함수들이 어떤 것들인지를 파악하는 데 매우 유용하다(그림 6). function profiler와 power profiler를 결합시켜 함수당 소비전류에 대한 내용을 측정할 수 있다.
또한 Function profiler는 함수에 대한 리스트를 나열하며, 파워 소비전류에 대한 평균치, 최대, 최소값을 표시한다.
전체 측정시간에 대한 정보를 표시하며, 특정시간에 대한 구간내용도 선택하여 확인할 수 있다.

 

그림 6.
함수 프로파일러


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