ARM cortex M4
평가 보드, 해당 운영 체제가 실행되고 있지 않은 bare metal
응용 프로그램에서 작업하고 있습니다.베어 메탈 시스템의 CPU 사용량 측정
이제 주어진 프로세스/알고리즘의 사용량을 CPU
으로 측정하고 싶습니다. 그렇게하는 가장 좋은 방법은 무엇입니까?
이러한 요구에 대한 기능을 가진 CPU
사용량을 측정하는 운영 체제를 구현해야합니까?
ARM cortex M4
평가 보드, 해당 운영 체제가 실행되고 있지 않은 bare metal
응용 프로그램에서 작업하고 있습니다.베어 메탈 시스템의 CPU 사용량 측정
이제 주어진 프로세스/알고리즘의 사용량을 CPU
으로 측정하고 싶습니다. 그렇게하는 가장 좋은 방법은 무엇입니까?
이러한 요구에 대한 기능을 가진 CPU
사용량을 측정하는 운영 체제를 구현해야합니까?
질문 자체가 거의 답을합니다. 해당 프로세스/알고리즘에없는 경우 베어 메탈 애플리케이션은 무엇을 수행합니까? 둘 중 하나 또는 둘 다를 측정하십시오. 이 알고리즘에서 CPU를 완전히 소모하지 않는 베어 메탈 애플리케이션이있는 경우이 애플리케이션/함수의 시간을 관리하는 범위 내에서 이미 운영 체제가 있습니다. 타이머와 관련된 루프의 간단한 카운터에서 여러 가지 방법을 사용하여 알고리즘이 타임 슬라이스와 그렇지 않을 때 루프 당 얼마나 많은 카운트를 볼 수 있습니다. 알고리즘 자체의 시간을 간단히 계산할 수 있습니다.
성능을 코드와 대화 내용 모두에 크게 의존하기 때문에 전체 시스템을 의미하는 CPU라고 가정합니다. 시계 속도에 따라 cortex-m4에서 플래시를 실행하는 경우 지침이나 데이터를 기다리는 프로세서 사이클을 태우고있을 수 있습니다 (알고리즘 레코딩 클럭이 아닌 경우 알고리즘에 대한 프로세서 성능의 잘못된 개념을 쉽게 알 수 있습니다). 캐시는 성능을 감추고 조작하며, 사용자가 수행중인 작업을 신중하게 파악하지 않으면 성능에 큰 영향을 줄 수 있습니다. 컴파일러가 코드뿐만 아니라 성능에서 큰 역할을하는 C++ 질문이므로 명령 줄이나 코드를 최소한으로 변경하여 코드를 여러 번 빠르게 또는 느리게 실행할 수 있습니다.
알고리즘이 isr의 일부인 경우 프로세서가 그렇지 않은 경우 잠자기 상태가되면 gpio 핀 및 스코프 techinique를 사용하여 실행 대 수면 비율에 대한 느낌을 얻을 수 있습니다.
CPU의 유휴 시간을 측정하기위한 OS를 구현하는 것이 나에게 조금 낫다. 내 지식으로 Cortex-M4에는 cycle counter의 스냅 샷을 만들 수있는 디버그 유닛 (DWT)이 포함되어 있습니다. 하지만 가장 쉬운 방법은 핀을 오실로스코프에 연결하고 알고리즘 입력 및 종료시이를 전환하는 것입니다.
하지만 레지스터 스냅 샷을 사용하면 어떤 도움이됩니까? 내가 알기로는 내가 얻을 수있는 유일한 것은 프로세스가 시작된 이래로 사이클의 수입니다. – Fluffy
그리고 이미 내 프로세스의 시간을 측정하는 데이주기 카운터를 사용하고 있는데 어떻게하면 CPU 사용량을 측정 할 수 있습니까? – Fluffy
CPU가 시작된 이후에 수행 한 사이클 수를 얻습니다. 진입 및 종료시 스냅 샷을 작성하면 전달 된주기의 델타를 계산할 수 있으므로 알고리즘이 사용한 사이클 수를 얻을 수 있습니다. "유휴"작업 같은 것이 있습니까? – junix
우선 운영 체제를 구현하는 것만으로는 성능을 측정하는 목적으로는 실용적이지 않거나 가능하지 않습니다. 가능한 한 가지 방법은 해당 기간까지 발생한 틱 수를 기록하는 카운트 변수를 유지하는 것입니다. 타이머의 인터럽트에서 변수를 증가시킵니다.
즉석에서 CPU 사용량을 측정해야합니까? – junix
왜 CPU 사용을 원하십니까? 그러한 컨트롤러에서는 일반적으로 실시간 동작을 원합니다. 즉 특정 작업이 주어진 시간 내에 충분히 빨리 완료되어야합니다. – starblue