Perf Topdown Approach

TAEWOO HA·2023년 6월 29일
0

프로젝트 #2

목록 보기
5/8

PMU란

• Performance Monitoring Unit
• 하드웨어
• CPU 가 수행하는 작업에 대한 로깅을 담당

Architecture specific PMUs

• ARM vs Intel
• ARM(Acronym for Advanced RISC Machine)
• RISC(Reduced Instruction Set Computing)
• 하드웨어 복잡성을 줄이고, 전력 소비 감소에 초점

• ARM vs Intel
• Intel ( 주로 x86)
• CISC(Complex Instruction Set Computing)
• 많은 복잡한 명령어 처리 가능, 고성능 컴퓨팅 환경

• 이때문에, 특정 성능 카운터 들이 다르다.
• ARM - SPE(Statistical Profiling Extension) PMU
• Intel - Top Down analysis

(Intel) Perf Top-down approach

• Intel CPU 의 성능 분석 방법론
• CPU 의 병목 현상을 찾아내는데 유용한 프레임워크
위부터 레벨 1 ,2 ,3

  • cpu에서 Uops로 분리가 되면 Uops가 Allocate가 될까? 안될까?
  • 잘 끝났으면 Retiring or 아니면 예측 실패
  • 할당이 안되면 백엔드 바운드 ? 프론트엔드 바운드?

Frontend Bound

Bad Speculation

Retiring

Backend Bound

  • 요청을 수락하기 위한 슬롯이 부족

ARM SPE counters

• Architecture specific counter 들
• 우리 RPI4 (Cortex-A72) CPU 도 가지고 있다.

Level2

Frontend Bound

  • Fetch Latency : 가져오는 속도
    • CPU -> TLB -> miss -> 돌아오는 시간이 느리다 : Fetch Latency가 느리다.
    • iCacheMiss : 명령어를 가져오려는데 해당 인스트럭션이 없는 경우
      • 코드가 너무 큰 경우
    • Branch Resteers : 분기 예측이 잘못됨, 파이프라인이 클리어가 되는 경우
      • 프로세서가 다음 명령어를 가져오는데 지연이 생김
      • rand()처럼 랜덤으로 함수가 돌아서 순차적이 아니라 branch prediction에 실패하면 발생
  • Fetch Bandwidth : 얼마나 많이 가져오는지
    • Fetch src1 : 인스트럭션을 실행시키는 소스에서 발생하는 대역폭 제약
      • 코드의 길이가 길거나 프로그램이 너무 많은 Vmemory를 사용해서 충분히 매핑이 불가능한 경우
    • Fetch src2 :

Backend Bound

  • 프로그램이 복잡한 연산 or 많은 양의 메모리일 때 발생
  • 병렬화를 하거나 메모리 접근 최적화하기
  • Core Bound : 프로세서 코어의 성능에 의한 제약
    • Divider : 나눗셈 연산에서의 병목
    • Exe prts Utilization : 많은 양의 명령어가 특정 포트에 집중될 경우 해당 포트에서 병목
  • Memory Bound : 메모리 접근과 관련된 성능 제약
    • 메모리에 대한 Access가 병목
    • Stores bound : 대량의 데이터를 메모리에 저장해야할 때 발생
    • DRAM : 외부메모리에 의한 병목 , 캐시에비해 크지만 느리다. 병목이 발생

Retiring

  • 프로세서의 명령이 처리 파이프라인에서 마지막단계에서 잘 끝났을 때 status
  • 프로세서가 성공적으로 실행된 명령어를 파이프라인에서 제거 , status에 반영
  • Base : 프로세서가 성공적으로 완료한 기본 명령어
  • Micor sequencer : 프로세서가 마이크로코드를 사용한 복잡한 명령어
  • 높으면 잘돌아간다.

Bad Speculation

  • cpu가 다음행동을 예측해서 execution을 했는데 실패할 경우
  • 실행한 명령어 취소, 올바른 명령어로
  • Branch miss : 분기예측 기능 실패 (likely, unlikely)
  • Machine clears : 프로세서가 다양한 이유로 인해 명령어 파이프라인을 클리어해야함
  • 특히 복잡한 조건 분기를 많이 포함을 시키거나 메모리에 빈번하게 접근하는 경우 많이 생김

0개의 댓글