2013-07-14 3 views
4

ARM cortex M4 평가 보드, 해당 운영 체제가 실행되고 있지 않은 bare metal 응용 프로그램에서 작업하고 있습니다.베어 메탈 시스템의 CPU 사용량 측정

이제 주어진 프로세스/알고리즘의 사용량을 CPU으로 측정하고 싶습니다. 그렇게하는 가장 좋은 방법은 무엇입니까?

이러한 요구에 대한 기능을 가진 CPU 사용량을 측정하는 운영 체제를 구현해야합니까?

+0

즉석에서 CPU 사용량을 측정해야합니까? – junix

+0

왜 CPU 사용을 원하십니까? 그러한 컨트롤러에서는 일반적으로 실시간 동작을 원합니다. 즉 특정 작업이 주어진 시간 내에 충분히 빨리 완료되어야합니다. – starblue

답변

5

질문 자체가 거의 답을합니다. 해당 프로세스/알고리즘에없는 경우 베어 메탈 애플리케이션은 무엇을 수행합니까? 둘 중 하나 또는 둘 다를 측정하십시오. 이 알고리즘에서 CPU를 완전히 소모하지 않는 베어 메탈 애플리케이션이있는 경우이 애플리케이션/함수의 시간을 관리하는 범위 내에서 이미 운영 체제가 있습니다. 타이머와 관련된 루프의 간단한 카운터에서 여러 가지 방법을 사용하여 알고리즘이 타임 슬라이스와 그렇지 않을 때 루프 당 얼마나 많은 카운트를 볼 수 있습니다. 알고리즘 자체의 시간을 간단히 계산할 수 있습니다.

성능을 코드와 대화 내용 모두에 크게 의존하기 때문에 전체 시스템을 의미하는 CPU라고 가정합니다. 시계 속도에 따라 cortex-m4에서 플래시를 실행하는 경우 지침이나 데이터를 기다리는 프로세서 사이클을 태우고있을 수 있습니다 (알고리즘 레코딩 클럭이 아닌 경우 알고리즘에 대한 프로세서 성능의 잘못된 개념을 쉽게 알 수 있습니다). 캐시는 성능을 감추고 조작하며, 사용자가 수행중인 작업을 신중하게 파악하지 않으면 성능에 큰 영향을 줄 수 있습니다. 컴파일러가 코드뿐만 아니라 성능에서 큰 역할을하는 C++ 질문이므로 명령 줄이나 코드를 최소한으로 변경하여 코드를 여러 번 빠르게 또는 느리게 실행할 수 있습니다.

알고리즘이 isr의 일부인 경우 프로세서가 그렇지 않은 경우 잠자기 상태가되면 gpio 핀 및 스코프 techinique를 사용하여 실행 대 수면 비율에 대한 느낌을 얻을 수 있습니다.

4

CPU의 유휴 시간을 측정하기위한 OS를 구현하는 것이 나에게 조금 낫다. 내 지식으로 Cortex-M4에는 cycle counter의 스냅 샷을 만들 수있는 디버그 유닛 (DWT)이 포함되어 있습니다. 하지만 가장 쉬운 방법은 핀을 오실로스코프에 연결하고 알고리즘 입력 및 종료시이를 전환하는 것입니다.

+0

하지만 레지스터 스냅 샷을 사용하면 어떤 도움이됩니까? 내가 알기로는 내가 얻을 수있는 유일한 것은 프로세스가 시작된 이래로 사이클의 수입니다. – Fluffy

+0

그리고 이미 내 프로세스의 시간을 측정하는 데이주기 카운터를 사용하고 있는데 어떻게하면 CPU 사용량을 측정 할 수 있습니까? – Fluffy

+0

CPU가 시작된 이후에 수행 한 사이클 수를 얻습니다. 진입 및 종료시 스냅 샷을 작성하면 전달 된주기의 델타를 계산할 수 있으므로 알고리즘이 사용한 사이클 수를 얻을 수 있습니다. "유휴"작업 같은 것이 있습니까? – junix

1

우선 운영 체제를 구현하는 것만으로는 성능을 측정하는 목적으로는 실용적이지 않거나 가능하지 않습니다. 가능한 한 가지 방법은 해당 기간까지 발생한 틱 수를 기록하는 카운트 변수를 유지하는 것입니다. 타이머의 인터럽트에서 변수를 증가시킵니다.

관련 문제