KR20230013124A - 프로세싱 회로부에 의해 프로세싱된 샘플링된 동작들의 프로파일링 - Google Patents

프로세싱 회로부에 의해 프로세싱된 샘플링된 동작들의 프로파일링 Download PDF

Info

Publication number
KR20230013124A
KR20230013124A KR1020227044786A KR20227044786A KR20230013124A KR 20230013124 A KR20230013124 A KR 20230013124A KR 1020227044786 A KR1020227044786 A KR 1020227044786A KR 20227044786 A KR20227044786 A KR 20227044786A KR 20230013124 A KR20230013124 A KR 20230013124A
Authority
KR
South Korea
Prior art keywords
instruction
address
circuitry
profiling
sampled
Prior art date
Application number
KR1020227044786A
Other languages
English (en)
Inventor
마이클 존 윌리엄스
알라스다이어 그랜트
존 마이클 홀리
Original Assignee
에이알엠 리미티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 에이알엠 리미티드 filed Critical 에이알엠 리미티드
Publication of KR20230013124A publication Critical patent/KR20230013124A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/342Extension of operand address space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3409Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment
    • G06F11/3419Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment for performance assessment by assessing time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/34Recording or statistical evaluation of computer activity, e.g. of down time, of input/output operation ; Recording or statistical evaluation of user activity, e.g. usability assessment
    • G06F11/3466Performance evaluation by tracing or monitoring
    • G06F11/348Circuit details, i.e. tracer hardware
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/22Microcontrol or microprogram arrangements
    • G06F9/26Address formation of the next micro-instruction ; Microprogram storage or retrieval arrangements
    • G06F9/261Microinstruction address formation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5066Algorithms for mapping a plurality of inter-dependent sub-tasks onto a plurality of physical CPUs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/86Event-based monitoring
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/865Monitoring of software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/88Monitoring involving counting

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)
  • Executing Machine-Instructions (AREA)
  • Machine Tool Copy Controls (AREA)
  • Numerical Control (AREA)

Abstract

프로세싱 회로부(4)는 캐시(16) 또는 메모리(34)로부터 페칭된 명령어들 또는 명령어들로부터 디코딩된 마이크로 동작들에 응답하여 데이터 프로세싱 동작들을 수행한다. 샘플링 회로부(50)는 프로파일링될 샘플링된 동작들로서 명령어들 또는 마이크로 동작들의 서브세트를 선택한다. 프로파일링 회로부(52)는, 샘플링된 동작으로서 선택된 명령어 또는 마이크로 동작의 프로세싱에 응답하여, 샘플링된 동작의 동작 유형 및 샘플링된 동작에 직접적으로 기인하는 샘플링된 동작의 거동에 관한 정보를 특정하는 샘플 기록을 캡처한다. 프로파일링 회로부(52)는 주어진 명령어에 대응하는 샘플링된 동작에 대한 샘플 기록에, 프로그램 순서상 주어진 명령어보다 이전에 또는 나중에 나타나는 참조 명령어의 주소를 나타내는 참조 명령어 주소 표시자를 포함시킬 수 있으며, 이 경우, 제어 흐름은 프로그램 순서상 참조 명령어와 주어진 명령어 사이에 발생하는 임의의 명령어들 사이에서 순차적이다.

Description

프로세싱 회로부에 의해 프로세싱된 샘플링된 동작들의 프로파일링
본 기술은 데이터 프로세싱의 분야에 관한 것이다. 보다 구체적으로, 본 발명은 프로파일링에 관한 것이다.
프로세싱 회로부는 캐시 또는 메모리로부터 페칭된 명령어들 또는 명령어들로부터 디코딩된 마이크로 동작들에 응답하여 데이터 프로세싱 동작들을 수행한다. 페칭된 명령어들은 소프트웨어 개발자에 의해 요구되는 동작들을 행하도록 작성되거나 컴파일링된 프로그램을 표현한다. 소프트웨어 개발을 보조하기 위해, 개발자는 프로그램의 프로파일링을 수행할 수 있으며, 여기서 프로그램의 거동에 관한 정보는 그것이 프로세싱 회로부에 의해 프로세싱될 때 캡처되며, 이에 따라 이러한 정보가 분석되어, 불량한 성능을 야기할 수 있는 프로그램의 부분들 및 불량한 성능에 대한 가능한 이유들을 식별할 수 있다. 소프트웨어 엔지니어들은 프로파일링의 결과들을 사용하여, 실행 시간을 감소시키고 프로세싱 시스템에서 이용가능한 자원들을 더 양호하게 이용할 수 있도록 그들의 소프트웨어를 최적화할 수 있다.
적어도 일부 예들은 장치를 제공하고, 장치는,
캐시 또는 메모리로부터 페칭된 명령어들 또는 명령어들로부터 디코딩된 마이크로 동작들에 응답하여 데이터 프로세싱 동작들을 수행하기 위한 프로세싱 회로부;
프로파일링될 샘플링된 동작들로서 명령어들 또는 마이크로 동작들의 서브세트를 선택하기 위한 샘플링 회로부; 및
샘플링 회로부에 의해 샘플링된 동작으로서 선택된 명령어 또는 마이크로 동작의 프로세싱에 응답하여, 샘플링된 동작의 동작 유형 및 샘플링된 동작에 직접적으로 기인하는 샘플링된 동작의 거동에 관한 정보를 특정하는 샘플 기록을 캡처하기 위한 프로파일링 회로부를 포함하고, 여기서,
프로파일링 회로부는 주어진 명령어에 대응하는 샘플링된 동작에 대해 캡처된 샘플 기록에, 프로그램 순서상 주어진 명령어보다 이전에 또는 나중에 나타나는 참조 명령어의 주소를 나타내는 참조 명령어 주소 표시자를 포함시킬 수 있으며, 이 경우, 제어 흐름은 프로그램 순서상 참조 명령어와 주어진 명령어 사이에 발생하는 임의의 명령어들 사이에서 순차적이다.
적어도 일부 예들은 방법을 제공하고, 방법은,
캐시 또는 메모리로부터 페칭된 명령어들 또는 명령어들로부터 디코딩된 마이크로 동작들에 응답하여 데이터 프로세싱 동작들을 수행하는 단계;
프로파일링될 샘플링된 동작들로서 명령어들 또는 마이크로 동작들의 서브세트를 선택하는 단계; 및
샘플링 회로부에 의해 샘플링된 동작으로서 선택된 명령어 또는 마이크로 동작의 프로세싱에 응답하여, 샘플링된 동작의 동작 유형 및 샘플링된 동작에 직접적으로 기인하는 샘플링된 동작의 거동에 관한 정보를 특정하는 샘플 기록을 캡처하는 단계를 포함하고, 여기서,
프로파일링 회로부는 주어진 명령어에 대응하는 샘플링된 동작에 대해 캡처된 샘플 기록에, 프로그램 순서상 주어진 명령어보다 이전에 또는 나중에 나타나는 참조 명령어의 주소를 나타내는 참조 명령어 주소 표시자를 포함시킬 수 있으며, 이 경우, 제어 흐름은 프로그램 순서상 참조 명령어와 주어진 명령어 사이에 발생하는 임의의 명령어들 사이에서 순차적이다.
본 기법의 추가의 태양들, 특징들 및 이점들은 첨부 도면과 관련하여 읽혀질 예들의 하기의 설명으로부터 명백해질 것이다.
도 1은 프로파일링 회로부를 갖는 데이터 프로세싱 장치의 예를 개략적으로 예시한다.
도 2는 샘플 기록이 캡처될 동작들을 선택하기 위한 명령어들 또는 마이크로 동작들의 샘플링을 예시한다.
도 3은 샘플링된 동작에 대한 샘플 기록의 캡처 및 샘플 기록이 진단 분석을 위해 액세스가능해지는지 여부의 필터링을 예시하는 흐름도이다.
도 4는 샘플 기록에 포함될 수 있는 다수의 패킷 유형들을 예시한다.
도 5는 다수의 패킷들을 포함하는 샘플 기록의 예를 예시한다.
도 6은 샘플 기록에 포함될 수 있는 주소 패킷의 예를 예시한다.
도 7은 분기 명령어들을 포함하는 프로그램 명령어들의 시퀀스의 예를 예시한다.
도 8 내지 도 11은 도 7의 예시적인 시퀀스에 대한 참조 명령어 주소를 포함하는 주소 패킷을 생성하는 예들을 예시한다.
도 12는 추적된 명령어 표시자를 사용하여 후속하는 샘플링된 동작에 대한 참조 명령어 주소로서 어느 주소가 표시되어야 하는지를 추적하는 방법을 도시하는 흐름도이다.
도 13은 샘플링된 동작에 대한 참조 명령어 주소 표시자를 설정하기 위한 추적된 명령어 표시자의 사용을 도시하는 흐름도이다.
도 14는 참조 명령어 주소 표시자를 설정하는 제2 예를 도시하는 흐름도를 도시하며, 여기서 참조 명령어 주소 표시자는 프로그램 순서상 샘플링된 동작과 연관된 명령어보다 나중의 명령어의 주소를 나타낸다.
프로세서 상에서 프로그램 실행을 프로파일링할 때 직면하게 되는 문제는 프로세서가 초당 수백만 개의 또는 수십억 개의 동작들을 실행하고 있을 수 있고, 이에 따라 실행되는 모든 명령어의 정확한 명령어별 거동에 관한 정보를 상세히 기록하는 것이 실현가능하지 않다는 것이다. 프로파일링에 대한 하나의 접근법은, 불량한 성능에 영향을 줄 수 있는 캐시 누락들 또는 분기 예측실패들과 같은 특정 이벤트들을 카운트하는 일부 성능 모니터링 카운터들을 정의하는 것, 및 주어진 수의 그러한 이벤트들이 검출되었을 때, 성능 모니터링 중단(performance monitoring interrupt)을 생성하여, 예외 처리 루틴으로 하여금 레지스터들로부터의 아키텍처적 상태 또는 이어서 진단 분석을 위해 액세스가능해질 수 있는 다른 성능 모니터링 정보를 판독해낼 수 있게 하는 것일 수 있다. 그러나, 이러한 접근법의 문제는, 그것이 빈번한 샘플링 간격들로 정보를 모으기 위해 정규 프로그램 흐름의 중단을 요구하는 것인데, 이것은, 관찰된 거동이 프로파일링을 수행하지 않을 때 발생하는 거동과 일관되지 않을 수 있으므로 진단 분석의 결과들을 덜 의미 있게 만들 수 있고 프로그램의 정상적인 실행(running)에 영향을 미칠 수 있는 높은 중단율을 요구한다. 다른 쟁점은, 실제로, 성능 모니터링 중단이 시그널링되는 시간과 예외 처리기가 캡처된 아키텍처적 상태 또는 성능 모니터링 정보를 모으기 시작하는 시간 사이에 "스키드(skid)" 지연이 있을 수 있고, 중간 기간에, 프로세서가 수백 개의 다른 명령어들을 계속 실행할 수 있어, 캡처된 정보가 중단이 트리거되었던 시점에 진행 중이었던 동작에 직접적으로 기인할 수 없게 된다는 것이다. 또한, 프로파일링 정보의 이벤트 구동식 캡처로, 이벤트들은 자체적으로 위치에 대한 매우 정확한 결과들을 제공하지 않는다. 코드를 최적화하기 위해, 엔지니어는, 제어 평면 문제들에 대한, 정확히 어느 명령어, 코드 라인, 클래스 및/또는 모듈이 영향을 받는지, 또는 그러한 명령어에 대한 경로 및/또는 호출 스택(평이한(flat) 프로파일들은 종종 눈에 뜨이지 않기 때문임); 그리고 데이터 평면 문제들에 대한, 어느 변수, 어레이, 또는 객체가 영향을 받는지의 표시와 같은, 어디에 문제가 있는지에 관한 정확한 정보를 필요로 할 수 있다. 이것은 전형적인 이벤트 트리거식 샘플링 기법들로는 식별하기 어려울 수 있다.
후술된 예들에서, 프로세싱 회로부는 캐시 메모리로부터 페칭된 명령어들 또는 명령어들로부터 디코딩된 마이크로 동작들에 응답하여 데이터 프로세싱 동작들을 수행한다. 샘플링 회로부는 프로파일링될 샘플링된 동작들로서 명령어들 또는 마이크로 동작들의 서브세트를 선택한다. 프로파일링 회로부는, 샘플링 회로부에 의해 샘플링된 동작으로서 선택된 명령어 또는 마이크로 동작의 프로세싱에 응답하여, 샘플링된 동작의 동작 유형 및 샘플링된 동작에 직접적으로 기인하는 샘플링된 동작의 거동에 관한 정보를 특정하는 샘플 기록을 캡처한다.
이러한 접근법으로, 샘플 기록이 샘플링된 동작에 직접적으로 기인하는 정보를 캡처함에 따라, 이것은 앞서 논의된 바와 같은 중단 기반 프로파일링 메커니즘들에 의해 발생하는 스키드 문제를 회피한다. 샘플 기록에 포함된 정보는 샘플링된 동작을 프로세싱하는 동안 발생했던 이벤트들, 예컨대 주어진 레벨의 캐시에서 캐시 누락이 발생했는지 여부 또는 주어진 분기에 대해 분기 예측실패가 발생했는지 여부를 직접적으로 나타낼 수 있거나, 샘플링된 동작을 프로세싱하는 동안 소정 이벤트들의 레이턴시를 측정하는 사이클 카운트들을 나타낼 수 있다. 그럼에도 불구하고, 샘플링 회로부가 샘플링된 동작들로서 명령어들 또는 마이크로 동작들의 서브세트만을 선택하므로, 이것은 샘플링된 동작들에 대한 정보를 모으는 데 있어서 하드웨어 및 전력 오버헤드를 크게 감소시킨다. 샘플링된 동작들에 대해 캡처된 샘플 기록들은 모든 동작의 거동을 캡처하려고 시도하기보다는, 전체적으로 프로그램의 성능의 통계적 뷰를 제공할 수 있다. 각각의 샘플링된 동작의 동작 유형을 대응하는 샘플 기록에 나타냄으로써, 샘플링 회로부에 의해 샘플링된 동작들로서 어떤 유형들의 샘플링된 동작들이 선택되는지에 대한 어떠한 제한도 제공할 필요가 없으며, 이에 따라 샘플 기록들이 단일의 미리결정된 유형의 샘플링된 동작에 대한 정보를 캡처하도록 제한되지 않게 된다. 이는 (고정된 유형의 이벤트가 정보의 캡처를 트리거하는 이벤트 트리거식 샘플링을 사용하기보다는) 하나의 샘플링 정보 세트에서 2개 이상의 상이한 문제들을 모니터링하기 위해 단일의 프로파일링 실행 런(profiling execution run)을 사용하는 것을 보조할 수 있다. 또한, 특정 명령어들 또는 마이크로 동작들을 프로파일링될 샘플링된 동작들로서 선택하기 위해 샘플링 회로부를 제공하는 것은, 샘플링된 동작이 파이프라인을 통해 진행함에 따라, 파이프라인의 상이한 스테이지들에서 발생하는 이벤트들이 추척될 수 있게 할 수 있는데, 이것은, 프로파일링이 특정 이벤트의 발생 시의 성능 모니터링 카운터들 또는 아키텍처적 상태의 캡처에 기초하는 예들에서는 가능하지 않을 수 있으며, 여기서 그 정보는 특정 동작에 직접적으로 기인할 수는 없지만 다수의 상이한 동작들에 기초할 수는 있다.
샘플링 회로부 및 프로파일링 회로부는 프로세싱 회로부에 의해 프로세싱되고 있는 특정 동작들의 결과들 및 성능에 대한 상세한 정보를 제공하는 데 유용할 수 있으며, 이는 주어진 프로그램을 실행할 때의 불량한 성능에 대한 가능한 이유들을 식별하는 데 유용할 수 있다. 그러나, 프로파일링의 다른 태양은 프로그램 코드의 어떤 부분들이 다른 부분들보다 더 빈번하게 실행되는지를 식별하는 것일 수 있다. 소프트웨어 개발자는 유한한 양의 시간만을 코드 최적화에 이용할 수 있고, 덜 빈번하게 실행되는 코드 섹션들에 우선하여 더 빈번하게 실행되는 코드 부분들에 대한 성능을 개선시키는 데 그들의 시간을 집중하기를 원할 수 있다. 개발자는, 프로파일링을 위한 샘플링 기반 접근법으로는, 프로그램 내의 상이한 코드 섹션들의 실행 빈도를 분석하는 것이 어려울 것이라고 생각할 수 있는데, 그 이유는, 샘플링이 샘플링된 동작들에 대해 캡처된 샘플 기록들에서 많은 동작들이 추적되지 않는다는 것을 의미하기 때문이며, 따라서, 각각의 샘플 기록은 단일 명령어가 실행되었다는 표시만을 제공할 뿐, 프로그램이 어떻게 그리고 어떤 경로의 제어 흐름을 통해 그러한 명령어에 도달했는지에 대한 정보를 제공하지는 않을 것이다. 따라서, 개발자는, 샘플링 기반 접근법이 상대적인 실행 빈도에 대한 의미 있는 핫스팟 프로파일링 정보를 제공하기 위해 매우 큰 수의 샘플들이 캡처되는 것을 요구할 것이고, 이는 그러한 높은 볼륨의 샘플링 정보를 생성하는 것에 대해 저장소 및 데이터 출력 오버헤드의 측면에서 너무 높은 비용을 초래할 수 있다고 생각할 수 있다.
후술된 예들에서, 프로파일링 회로부는 주어진 명령어에 대응하는 샘플 동작에 대해 캡처된 샘플링된 기록에, 프로그램 순서상 주어진 명령어보다 이전에 또는 나중에 나타나는 참조 명령어의 주소를 나타내는 참조 명령어 주소 표시자를 포함시킬 수 있으며, 이 경우, 제어 흐름은 참조 명령어와 주어진 명령어 사이에 발생하는 임의의 명령어들 사이에서 순차적이다. 프로파일링 회로부는 참조 명령어와 주어진 명령어 사이에 발생하는 임의의 2개의 명령어들 사이에서 제어 흐름의 비순차적 변경이 있었던 명령어의 주소에 참조 명령어 주소 표시자를 설정하는 것이 금지될 수 있다(주어진 명령어는 취해진 분기 명령어일 수 있으며, 이에 따라 이것은 주어진 명령어와 바로 이어지는 명령어 사이에 제어 흐름의 비순차적 변경이 있는 것을 방지하지 않음 - 그러한 경우에, 참조 명령어 주소는, 주어진 명령어에 의해 취해진 분기 후에 제어 흐름의 후속하는 비순차적 변경들이 없는 한, 주어진 명령어보다 나중의 명령어의 주소를 여전히 나타낼 수 있음).
따라서, 주어진 샘플링된 동작에 대한 샘플 기록에, 주어진 명령어까지 또는 그것에 이어서 제어 흐름이 순차적이었던 명령어의 주소의 표시를 포함시킴으로써, 이것은 단일 샘플 기록이, 명령어 주소들의 전체 범위가 실행되었다는 증거를 제공할 수 있게 하여, 프로그램의 상이한 부분들을 실행하는 상대적 빈도를 나타내는 통계적으로 의미 있는 핫스팟 프로파일을 생성하기에 충분한 정보를 제공하기 위해 캡처될 필요가 있는 샘플 기록들의 수를 크게 감소시킨다. 이것은 참조 명령어 주소 표시자의 사용을 지원하지 않는 샘플 기반 프로파일링 접근법에 비해 필요한 프로파일링 데이터의 볼륨을 감소시킨다. 따라서, 소프트웨어 개발자에 의한 프로그램 최적화는 더 효율적일 수 있다. 그러나, 취해진 제어 흐름의 경로에 대한 정보만을 캡처할 뿐, 임의의 다른 정보를 나타내지 않는 프로그램 흐름 프로파일들을 생성하기 위한 대안적인 트레이스 기반 기법(trace-based technique)들과 달리, 캡처된 샘플 기록들은 또한 이벤트들 또는 사이클 카운트들과 같은, 다른 제어 흐름이 아닌 정보를 나타낼 수 있는데, 이는 단일의 진단 실행 런이 다수의 목적들을 위해 프로파일링 정보를 모을 수 있게 할 수 있다.
일부 예들에서, 프로파일링 회로부는 프로그램 순서상 주어진 명령어보다 이전에 나타나는 이전 명령어의 주소를 나타내도록 참조 명령어 주소 표시자를 설정할 수 있을 수 있으며, 이 경우, 제어 흐름은 이전 명령어에서부터 주어진 명령어까지 순차적이다. 이러한 접근법은 참조 명령어 주소를 추적하기 위해 제공되는 하드웨어 회로 로직의 측면에서 구현하기에 더 간단할 수 있다. 예를 들어, 참조 명령어를 마킹하는 데 사용될 수 있고 재설정 지점에서의 명령어의 주소를 추적하는 것 또는 재설정 지점 후에 보이는 명령어들의 수를 카운트하는 것 중 어느 하나를 위해 사용될 수 있는 다수의 유형들의 이벤트들 중 하나를 표현하는 명령어가 식별될 때 재설정될 수 있는 저장 요소가 제공될 수 있다. 후속하는 샘플링된 동작에 직면할 때, 그러한 저장 요소에서 추적된 값은 샘플링된 동작에 대한 샘플 기록에 참조 명령어 주소 표시자를 설정하는 데 사용될 수 있다.
그러나, 다른 예들은 프로그램 순서상 주어진 명령어보다 나중에 나타나는 나중 명령어의 주소를 나타내도록 참조 명령어 주소 표시자를 설정할 수 있는 프로파일링 회로부를 제공할 수 있으며, 이 경우, 제어 흐름은 주어진 명령어 후의 다음 명령어에서부터 나중 명령어까지 순차적이다. 이러한 접근법에 의해, 참조 명령어 주소 표시자는, 제어 흐름의 비순차적인 변경 또는 참조 명령어 주소의 추적이 중지되도록 요구하는 다른 이벤트에 도달하기 전에, 주어진 명령어를 지나 얼마나 멀리까지 제어 흐름의 다음 순차적 블록이 계속되는지에 대한 뷰를 효과적으로 제공한다.
일부 실시예들은 이러한 옵션들 둘 모두를 지원할 수 있으며, 여기서 참조 명령어 주소 표시자는 이전 명령어의 주소 또는 나중 명령어의 주소 중 어느 하나의 표시를 제공할 수 있거나(예를 들어, 핫스팟 프로파일을 위한 최대로 가능한 수의 "명령어 실행 카운트들"을 제공하기 위해 가장 긴 런의 순차적인 실행을 나타내는 것을 선택함), 또는 샘플링된 동작에 대응하는 주어진 명령어 전의 그리고 후의 둘 모두의 제어 흐름에 대한 훨씬 더 많은 정보를 제공하기 위해 동일한 샘플 기록에 두 유형들 모두의 참조 명령어 주소 표시자를 나타낼 수 있다. 그러나, 많은 실시예들에서, 참조 명령어 주소의 추적의 하드웨어 비용을 제한하기 위해, 주어진 명령어에 관련해 단지 하나의 방향에서 제어 흐름을 추적하는 것이 충분할 수 있다(프로그램 순서상 단지 이전 명령어들만을 뒤돌아보거나, 또는 프로그램 순서상 단지 나중 명령어들만을 내다 봄).
프로파일링 회로부는 주어진 명령어 전에 가장 최근에 취해진 분기 명령어의 분기 타깃 주소를 나타내도록, 또는 주어진 명령어 후에 다음으로 취해진 분기 명령어의 명령어 주소를 나타내도록 참조 명령어 주소 표시자를 설정할 수 있을 수 있다. 취해진 분기 명령어들이 제어 흐름의 비순차적 변경이 있는 지점들을 표현하기 때문에, 가장 최근에 또는 다음에 취해진 분기의 표시를 제공하도록 참조 명령어 주소 표시자를 사용하는 것은 주어진 명령어 전에 또는 후에 실행되는 명령어들의 순차적인 런의 크기에 대한 최대 정보량을 제공할 수 있어, 핫스팟 프로파일에 기여할 수 있는 더 큰 수의 "명령어 실행 카운트들"을 제공한다. 따라서, 주어진 명령어 전의 이전 명령어들을 뒤돌아보는 경우, 참조 명령어는 가장 최근에 취해진 분기 명령어의 분기 타깃 주소에서의 명령어일 수 있는 반면, 참조 명령어 주소 표시자가 프로그램 순서상 주어진 명령어 후의 나중 명령어들을 내다보는 데 사용되고 있는 경우, 참조 명령어는 주어진 명령어 자체 후에 다음으로 취해진 분기 명령어일 수 있다.
그러나, 실제로, 본 발명자들은, 가장 최근에 또는 다음에 취해진 분기의 포지션을 나타내도록 참조 명령어 주소 표시자를 사용하는 것이 더 큰 블록의 순차적으로 프로세싱되는 명령어들이 표시될 수 있게 할 수 있지만, 일부(전부는 아님) 프로파일링 시나리오들에서, 항상 취해진 분기 포지션을 사용하여 참조 명령어 주소 표시자를 설정하는 접근법이 핫스팟 프로파일링의 편향된 결과들을 제공할 수 있다는 것을 인식했다. 따라서, 하기 중 임의의 것 이외의 명령어의 명령어 주소를 나타내도록 참조 명령어 주소 표시자를 설정하는 능력을 또한 지원하는 프로파일링 회로부를 제공하는 것이 유용할 수 있다: 주어진 명령어 전에 가장 최근에 취해진 분기 명령어의 분기 타깃 주소에서의 명령어, 및 주어진 명령어 후에 다음으로 취해진 분기 명령어의 명령어 주소. 보다 구체적으로, 때때로 다음 중 하나의 명령어 주소를 나타내도록 참조 명령어 표시자를 설정할 수 있는 것이 유용할 수 있다: 주어진 명령어 전의 가장 최근의 분기 명령어가 취해졌는지 또는 취해지지 않았는지에 관계없이, 가장 최근의 분기 명령어 후의 프로그램 흐름이 지향되는 명령어; 또는 주어진 명령어 후의 다음 분기 명령어가 취해지는지 또는 취해지지 않는지에 관계없이, 다음 분기 명령어의 명령어 주소.
취해지지 않은 분기 전에 또는 후에는 순차적으로 실행되는 다른 명령어들이 있을 것이기 때문에, 이전의/다음의 취해지지 않은 분기 명령어의 위치를 나타내도록 참조 명령어 주소 표시자를 사용하기를 원하는 것은 직관에 반하는 것으로 보일 수 있으며, 따라서, 이러한 접근법은 단일 샘플 기록의 콘텐츠들에 의해 실행된 것으로 확인될 수 있는 명령어들의 범위를 증가시킬 기회를 포기하는 것으로 보인다. 그러나, 아래에서 더 상세히 설명되는 바와 같이, 취해진 및 취해지지 않은 분기들 둘 모두에 대한 샘플 기록들이 취해진 분기들만을 참조하여 참조 명령어 주소 표시자를 기록하고, 결과적인 참조 명령어 주소 표시자들이 핫스팟 프로파일링에 사용되는 경우, 이것은, 일관적으로 취해지지 않은 분기의 하나의 측 상의 코드 섹션이 일관적으로 취해지지 않은 분기의 다른 측 상의 다른 코드 섹션보다 더 빈번하게 실행되었다는 것을 부정확하게 나타내는 결과적인 핫스팟 프로파일링을 야기할 수 있는데, 이는 두 코드 섹션들 모두가 동일한 횟수 실행되었더라도 그러하다. 왜곡된 프로파일링 결과들의 이러한 문제는, 그 분기가 취해진 분기였는지 또는 취해지지 않은 분기였는지에 관계없이, 이전 분기 또는 다음 분기의 위치를 사용하여 참조 명령어 주소 표시자를 설정함으로써 방지될 수 있다. 일부 프로파일링 시나리오들의 경우, 이것은 특정 명령어 세트들이 실행되었던 상대적 빈도들을 더 정확하게 나타낼 수 있다.
그러나, 이러한 문제가 발생하지 않을 때(예를 들어, 취해지지 않은 분기들에 대한 샘플들이 분석을 위해 출력되지 않는 경우)의 다른 프로파일링 시나리오들이 있으며, 그러한 경우, 참조 명령어 주소 표시자를 생성하기 위한 기준으로서 이전에/나중에 취해진 분기를 사용하는 것이 바람직할 수 있다.
본 출원에서, 달리 언급되지 않는 한, 명령어들의 상대적인 순서를 정의하는 용어들(예컨대, "이전", "나중", "다음", "가장 최근", "전(before, prior to)" 또는 "후")은 명령어들이 프로그램 순서상 나타나는 순서를 지칭한다. 프로그램 순서는 명령어들이 순서적 프로세서(in-order processor)에서 실행될 순서를 지칭한다. 다시 말해, 프로그램 순서는 프로그램을 생성한 프로그래머 또는 컴파일러에 의해 정의된 순서에 대응한다. 프로세싱 회로부의 페치 스테이지는 프로그램 순서상 실행될 명령어들을 페칭할 수 있다. 일부 구현물들은 순서적 프로세싱 회로부를 사용할 수 있으며, 이는 또한 프로그램 순서에 대응하는 순서로 명령어들 또는 마이크로 동작들을 실행한다. 그러나, 다른 예들에서, 프로세싱 회로부는, 명령어들 또는 마이크로 동작들이 프로그램 순서와는 상이한 순서로 프로세싱될 수 있도록, 명령어들/마이크로 동작들을 재순서화할 수 있는 비순서적 프로세싱 회로부(out-of-order processing circuitry)일 수 있다. 예를 들어, 프로그램 순서상 이전 명령어가 피연산자들이 이용가능하게 되기를 기다리는 동안 정지되는 경우, 프로그램 순서상 나중 명령어는 이전 명령어 전에 실행될 수 있다. 따라서, 참조 명령어 주소 표시자를 추적하기 위한 목적들을 위해, 명령어들 사이의 상대적 순서를 지칭하는 용어들은 프로그램 순서를 지칭한다. 이것은 프로세싱 회로부가 상이한 순서로 명령어들을 실행하는 것을 배제하지는 않는다. 예를 들어, 프로그램 순서상 가장 최근의 분기는, 일부 경우에, 피연산자들이 이용가능하게 되는 타이밍 및 명령어들 간의 종속성에 따라, 실제로 프로그램 순서상 이전 분기 후에 실행될 수 있다.
참조 명령어 주소로서 어느 주소를 나타낼지 선택하는 한 가지 방식은 참조 명령어 주소 재설정 이벤트와 연관된 주소가 나중 또는 이전 샘플링된 동작에 대한 참조 명령어 주소로서 기록되어야 함을 나타내는 소정 유형들의 참조 명령어 주소 재설정 이벤트들을 정의하는 것일 수 있다. 샘플 기록이 주어진 명령어보다 이전 명령어의 주소를 참조 주소로서 특정하는 예에서, 참조 명령어 주소 표시자는 주어진 명령어 전에 발생하는 가장 최근의 참조 명령어 주소 재설정 이벤트와 연관된 주소로 설정될 수 있다. 샘플 기록이 주어진 명령어보다 나중 명령어의 주소를 참조 주소로서 특정하는 예에서, 참조 명령어 주소 표시자는 주어진 명령어 후에 발생하는 다음 참조 명령어 주소 재설정 이벤트와 연관된 주소로 설정될 수 있다.
전술한 바와 같이, 주어진 명령어에 관련하여 프로그램 순서상 가장 최근에 또는 다음으로 취해진 분기 명령어의 포지션들은 대체적으로 참조 명령어 주소 표시자를 사용하여 식별될 수 있을 주어진 명령어 전의 또는 후의 최대 범위를 표현할 수 있다. 따라서, 프로파일링 회로부가, 참조 명령어 주소 재설정 이벤트로서, 취해진 분기의 프로세싱을 검출하는 것이 유용할 수 있다.
그러나, 참조 명령어 주소 재설정 이벤트가 취해진 분기 명령어와 주어진 명령어 사이에서 발생하는 경우, 대신에 참조 명령어 주소 표시자가 재설정 이벤트가 발생했던 지점에 대응하는 명령어의 위치를 마킹하도록 설정될 수 있게, 참조 명령어 주소의 추적을 재설정할 수 있는 하나 이상의 다른 유형들의 재설정 이벤트가 있을 수 있다.
예를 들어, 취해지지 않은 분기 동작의 프로세싱이 또한 참조 명령어 주소 재설정 이벤트로서 검출될 수 있으며, 따라서 주어진 명령어와 가장 최근에/다음에 취해진 분기 사이에 취해지지 않은 분기가 있는 경우, 참조 명령어 주소는 대신에 취해지지 않은 분기 동작과 연관된 주소를 가리킬 수 있다. 취해지지 않은 분기의 주소(또는 취해지지 않은 분기 다음의 명령어의 주소)를 참조 명령어로서 참조하는 옵션을 지원함으로써, 이것은 핫스팟 프로파일링 결과들의 통계적 유효성을 개선하는 것을 도울 수 있으며, 이에 따라, 핫스팟 프로파일링에 의해 샘플 기록들의 세트로부터 도출된 핫스팟 프로파일링 측정들은 상이한 명령어 블록들의 실행의 실제 상대적 빈도들을 표현한다. 취해지지 않은 분기를 그러한 재설정 이벤트로서 사용하는 것이 통계적 편향을 회피하는 이유에 대한 더 상세한 설명은 도 7과 관련하여 아래에 제공된다.
일부 구현물들에서는, 취해지지 않은 분기의 프로세싱이 항상 참조 명령어 주소 재설정 이벤트로서 취급될 수 있다.
그러나, 다른 구현물들은, 취해지지 않은 분기 동작의 프로세싱이 참조 명령어 주소 재설정 이벤트로서 검출되어야 하는지 여부를 정의하기 위한, 소프트웨어 또는 외부 디바이스에 의해 구성가능한 구성 정보(예를 들어, 구성 레지스터에 저장됨)를 제공할 수 있다. 프로파일링 회로부는, 구성 정보에 기초하여 취해지지 않은 분기가 참조 명령어 주소 재설정 이벤트로서 검출되어야 하는지 여부를 결정할 수 있다. 일부 형태들의 분석의 경우에는(예를 들어, 취해지지 않은 샘플 기록들이 출력되기 전에 폐기되거나 출력되지만 분석에 사용되지 않을 때), 취해진 분기들에 관련하여 참조 명령어 주소 표시자들을 나타내는 것만이 수용가능할 수 있으며, 이에 따라, 취해지지 않은 분기들이 참조 명령어 주소 재설정 이벤트로서 취급되지 않도록 프로파일링 회로부를 구성함으로써, 이것은 참조 명령어 주소 표시자들이 취해지지 않은 분기를 지나 취해진 분기로 확장하는 더 큰 범위의 순차적으로 실행되는 명령어들을 나타낼 수 있게 하여, 핫스팟 프로파일링에 사용될 수 있는 더 큰 명령어 카운트들을 제공할 수 있다. 대조적으로, 참조 주소 추적이 취해지지 않은 분기들을 참조하지 않는 한 프로파일링 결과들을 왜곡할 위험이 있는 분석이 수행될 경우, 취해지지 않은 분기들이 참조 명령어 주소 재설정 이벤트로서 검출되어야 한다는 것을 나타내도록 구성 정보가 설정될 수 있다. 취해지지 않은 분기들이 재설정 이벤트로서 취급되는지 또는 아닌지를 제어하기 위해 구성 정보를 제공함으로써, 이것은 수행되고 있는 분석의 유형에 적합하게 취해진 접근법을 바꾸는 유연성을 제공한다.
일부 예들에서, 장치는, 샘플링된 동작이 적어도 하나의 필터 기준을 충족하는지 여부에 기초하여, 프로파일링 회로부에 의해 샘플링된 동작에 대해 캡처된 샘플 기록이 진단 분석에 이용가능해지는지 여부를 제어하는 필터링 회로부를 가질 수 있다. 프로파일링 회로부에 의해 캡처된 모든 샘플 기록들이 프로파일링이 수행되고 있는 목적과 관련이 있을 수는 없으며, 따라서 필터링 회로부는, 샘플 기록들을 저장하고 출력하기 위한 자원들의 용량 또는 대역폭을 보존하기 위해, 단지 소정 유형들의 샘플 기록들만이 진단 분석에 이용가능해진다는 것을 보장하도록 구성가능할 수 있다. 예를 들어, 샘플 기록들은, 예를 들어, 샘플 기록을 메모리에 기입함으로써(이에 의해 샘플 기록은 디버깅되고 있는 프로세싱 시스템 상에서 실행되는 다른 소프트웨어에 의해 판독가능할 수 있음), 온-칩 트레이스 버퍼에 샘플 기록을 온-칩으로 출력함으로써, 그리고/또는 샘플 기록을 트레이스 포트를 통해 샘플 기록을 저장하고 샘플 기록을 사용하여 진단 분석을 수행하는 외부 디바이스에 출력함으로써, 상이한 방식들로 진단 분석에 이용가능해질 수 있다. 일부 시스템들은 샘플 기록을 진단 분석에 이용가능해지게 하는 것에 대한 하나 초과의 이들 형태들을 지원할 수 있다. 어떤 형태가 지원되는지에 관계없이, 적어도 하나의 필터 기준(이는 프로파일링 회로부와 연관된 구성 레지스터들에 저장된 필터 구성 데이터를 조정함으로써 사용자에 의해 구성가능할 수 있음)에 기초하여 필터링을 제공함으로써, 이것은 소프트웨어 개발자가 어떤 유형들의 샘플 기록들이 캡처되는지를 제어할 수 있게 할 수 있다.
일례에서, 취해지지 않은 분기들이 재설정 이벤트로서 취급되어야 하는지 여부를 결정하는 데 사용되는 구성 정보는 필터링 회로부에 대한 하나 이상의 필터 기준들을 또한 제어하는 필터 기준 구성 정보일 수 있다. 예를 들어, 구성 정보는 사용자에 의해 필터 기준들을 정의하는 것으로 보일 수 있지만, 소정 필터 기준 설정들의 경우, 프로파일링 회로부는 취해지지 않은 분기들을 재설정 이벤트로서 취급할 수 있는 한편, 다른 필터 기준 설정들의 경우, 취해지지 않은 분기들이 재설정 이벤트로서 취급되지 않을 수 있다. 예를 들어, 취해지지 않은 분기 동작에 대한 샘플 기록이 진단 분석에 이용가능해질 수 있도록 필터 기준들이 설정되고, 참조 명령어 주소 표시자가 취해지지 않은 분기 동작에 대해 캡처된 샘플 기록에 포함될 경우, 프로파일링 회로부는 (취해지지 않은 분기 동작 자체가 샘플링된 동작으로서 선택되었는지 여부에 관계없이) 취해지지 않은 분기 동작의 프로세싱을 참조 명령어 주소 재설정 이벤트로서 검출할 수 있다. 취해지지 않은 분기 동작에 대한 샘플 기록이 진단 분석에 이용가능해지지 않을 것이라고 나타내도록 필터 기준들이 설정되는 경우, 또는 취해지지 않은 분기 동작에 대한 샘플 기록이 참조 명령어 주소 표시자를 포함하지 않을 경우, 취해지지 않은 분기 동작의 프로세싱을 재설정 이벤트로서 취급할 필요는 없다.
그러나, 다른 예들에서, 취해지지 않은 분기를 재설정 이벤트로서 취급할지 여부를 결정하기 위한 구성 정보는 필터링 회로부에 대한 필터 기준들을 설정하는 임의의 구성 정보와 별도로 정의될 수 있다. 이러한 경우, 참조 명령어 주소 추적을 재설정하는 것으로서 검출될 재설정 이벤트들의 유형들과 필터에 의해 사용될 필터 기준들에 대한 직교 제어들이 있을 수 있다. 편향된 분석 결과들의 위험을 고려할 때, 재설정 이벤트/필터 설정들의 어떤 조합들이 그들이 수행하고자 원하는 분석 유형에 사용될 설정들인지를 결정하는 것은 사용자(또는 프로파일링 분석을 구현하는 소프트웨어)에게 남겨질 수 있다.
다른 유형들의 참조 명령어 주소 재설정 이벤트들은 다음을 포함할 수 있다:
Figure pct00001
프로파일링이 이전에 디스에이블링(disabling)된 후에 프로파일링 회로부에 의한 프로파일링의 인에이블링(enabling). 프로파일링이 잠시 동안 디스에이블링되었을 경우, 임의의 이전에 발생한 취해진 분기가 추적되지 않았을 수 있으므로, 참조 명령어 주소에 대한 참조 지점은 프로파일링이 인에이블링되는 지점일 수 있다.
Figure pct00002
예외를 취하는 것, 및/또는 예외로부터 복귀하는 것. 이것은, 프로파일링되고 있는 프로그램의 프로세싱을 중단하는 예외 처리기의 프로세싱 동안, 예외 처리기 내의 명령어들이 참조 명령어 주소 표시자를 추적하는 데 사용되는 임의의 추적 자원들을 포함하는 프로파일링 회로부의 추적 자원들 중 일부로 하여금 상태를 변경하게 할 수 있는 것이 가능하므로, 예외로부터의 복귀 시에, 이전에 취해진 분기의 추적은 더 이상 신뢰할 수 없을 수 있다는 것을 인식한다. 따라서, 유효한 프로파일링 결과를 제공하기 위해, 예외가 취해질 시에 또는 예외 복귀 시에 참조 명령어 주소의 추적을 재설정하는 것이 바람직할 수 있다.
Figure pct00003
또한, 때때로 샘플링된 동작의 프로세싱 자체가 참조 명령어 주소 재설정 이벤트로서 취급될 수 있음. 예를 들어, 샘플링된 동작이 취해진/취해지지 않은 분기뿐만 아니라, 샘플링된 분기 명령어보다 나중의/이전의 참조 명령어의 주소를 나타내는 샘플 기록 내의 참조 명령어 주소 표시자를 캡처하는 것일 때, 샘플링된 분기 명령어 자체(또는 샘플링된 분기 후의 다음 명령어)의 주소가 다른 샘플링된 동작에 대한 참조 주소로서 사용하기 위해 기록될 수 있다.
모든 구현물들이 이들 유형들의 재설정 이벤트를 모두 지원할 필요는 없다. 또한, 일부 구현물들은 어떤 유형들의 이벤트들이 (적어도 일부 형태들의 재설정 이벤트에 대한) 재설정을 야기하는지를 정의하는 구성 정보를 지원할 수 있다. 또한, 일부 유형들의 재설정 이벤트(예를 들어, 샘플링된 동작의 프로세싱)의 경우, 때때로 그러한 이벤트가 재설정을 야기할 수 있지만, 다른 상황들에서, 이벤트는 재설정을 야기하지 않을 수 있다(예를 들어, 이벤트가 재설정 이벤트인지 여부는 또한 다른 조건들에 따를 수 있음).
앞서 논의된 다른 유형들의 재설정 이벤트(프로파일링의 인에이블링, 예외를 취하고/예외로부터 복귀하는 것, 샘플링된 동작의 프로세싱)에 응답하여, 참조 명령어 주소의 추적을 재설정하는 것에 대한 대안물은 대신에 그러한 이벤트들이 발생할 때 참조 명령어 주소의 추적이 무효화될 수 있는 것일 수 있다. 이러한 경우, 참조 명령어 주소 표시자는 유효하고 취해진 또는 취해지지 않은 분기(또는 취해진 또는 취해지지 않은 분기 다음의 명령어)의 위치를 나타낼 수 있거나, 또는 참조 주소 표시자가 신뢰할 수 없음을 나타내는 무효화 이벤트들 중 하나가 발생하는 경우(예컨대, 프로파일링의 인에이블링 또는 예외가 취해짐/복귀 이벤트들이 발생할 때)에 무효화될 수 있다. 또한, 샘플 기록 내의 정보의 캡처의 마이크로 아키텍처적 구현물을 단순화하기 위해, 샘플링된 동작 자체의 프로세싱을 참조 명령어 주소 무효화 이벤트로서 취급하는 것이 유용할 수 있는데(필수는 아님), 그 이유는, 샘플링된 동작이 참조 명령어로서 검출될 수 있는 명령어들의 유형들 중 하나와 종종 동일한 유형의 것일 수 있으므로(예를 들어, 샘플링된 동작 자체가 취해진/취해지지 않은 분기일 수 있음), 샘플링된 동작 자체가 앞서 언급된 바와 같이 참조 명령어 주소의 재설정을 야기할 수 있기 때문이다. 따라서, 샘플링된 동작 자체에 응답하여, 참조 명령어 주소가 재설정되기 전에, 샘플링된 동작에 대해 출력될 샘플 기록을 위해 임의의 이전에 설정된 참조 명령어 주소가 캡처되는 것을 보장하는 것이 바람직할 수 있지만, 이것은 캡처/재설정의 타이밍들을 관리하는 데 어려움을 생성할 수 있다. 이전에 추적된 주소가 샘플 기록에 캡처되기 전에 오버라이팅(overwritting)되는 것을 방지하는 하나의 방식은 샘플링된 동작 자체가 참조 명령어로서 기능하는 것을 억제하는 것일 수 있는데, 그 이유는, 그것이 샘플링되어, 이에 따라, 샘플링된 동작에 응답하여 참조 명령어 주소를 변경되지 않은 채로 남겨두기 때문이다. 샘플링 간격이 대체적으로 연속적인 참조 명령어 주소 재설정 이벤트들(예를 들어, 분기들) 사이의 간격보다 상당히 더 클 것으로 예상된다고 고려하여, 다음 샘플링된 동작에 직면하기 전에 참조 명령어 주소가 재설정되지 않을 가능성이 매우 낮지만, 확실히 하기 위해(그리고 후속하는 샘플링된 동작이 프로그램 흐름의 중간 비순차적 변경이 있었던 참조 주소를 잠재적으로 참조할 위험을 회피하기 위해), 참조 명령어 주소는, 그것이 샘플링된 동작에 대한 샘플 기록으로 전달된 후, 샘플링된 동작에 응답하여 무효화될 수 있다.
프로파일링 회로부가 주어진 명령어에 대한 샘플 기록에 저장된 참조 명령어 주소 표시자에, 프로그램 순서상 주어진 명령어보다 이전의 또는 나중의 명령어들의 주소들을 나타낼 수 있지만, 일부 시나리오들에서는, 참조 명령어 주소 표시자가 주어진 명령어 자체의 주소를 나타내면서 종료되는 것이 가능할 수 있다는 것에 주의한다. 예를 들어, 참조 명령어 주소 표시자가 취해진/취해지지 않은 분기 명령어의 분기 타깃 주소를 나타내도록 설정된 예에서, 샘플링 회로부가 샘플링된 동작으로서, 취해진 분기의 분기 타깃 주소에의 명령어 또는 순차적으로 취해지지 않은 분기 다음의 명령어를 선택하는 경우, 참조 명령어 주소 표시자는 주어진 명령어 자체의 주소를 나타낼 것이다. 따라서, 프로파일링 회로부가 참조 명령어 주소 표시자를, 그것이 프로그램 순서상 주어진 명령어보다 이전의 또는 나중의 명령어의 주소를 나타내도록, 인코딩할 수 있지만, 이것은 때때로 프로파일링 회로부가 참조 명령어 주소 표시자를 사용하여 주어진 명령어 자체의 주소를 나타낼 수 있다는 것을 배제하지는 않는다.
일부 구현물들에서, 샘플링된 동작에 대응하는 명령어의 유형에 관계없이, 프로파일링 회로부는 임의의 유형의 샘플링된 동작에 대해 캡처된 샘플 기록에 참조 명령어 주소 표시자를 포함시킬 수 있을 수 있다.
그러나, 실제로, 앞서 논의된 유형의 통계적 편향을 회피하기 위해, 참조 주소 추적을 위한 참조 지점들이 샘플 기록들이 참조 명령어 주소 표시자를 제공할 동작 유형들의 집단과 동일한 동작 유형들의 집단으로부터 선택되는 것이 바람직할 수 있다. 따라서, 임의의 동작 유형이 참조 명령어 주소 표시자를 포함하는 샘플 기록을 제공할 수 있었던 경우, 더 많은 수의 샘플들이 핫스팟 프로파일링을 위해 카운트될 수 있지만, 실제로 통계적으로 편향되지 않은 결과들을 보장하기 위해, 단일 샘플 내의 참조 명령어 주소 표시자에 의해 표시될 수 있는 이전의/나중의 명령어들의 범위를 제한하는 참조 명령어 주소 표시자가 임의의 동작 유형의 가장 최근에/다음에 프로세싱된 명령어의 포지션을 참조로서 사용할 필요가 있을 수 있다.
따라서, 편향되지 않은 프로파일링 결과들을 달성하면서, 하나의 샘플 기록 내의 참조 명령어 주소 표시자에 의해 실행되는 것으로 표시될 수 있는 명령어들의 범위를 증가시키기 위해, 참조 명령어 주소 표시자를 소정 서브세트의 명령어 유형들에 대한 샘플 기록에만 포함되도록 제한하는 것이 바람직할 수 있으며, 이에 따라 참조 명령어 주소 표시자가 프로파일링 결과들을 왜곡시키지 않으면서 프로그램 순서상 주어진 명령어의 더 앞/뒤를 보는 것이 가능해지게 된다.
일례에서, 참조 명령어 주소 표시자는, 적어도 주어진 명령어가 취해진 또는 취해지지 않은 분기 명령어일 때, 주어진 명령어에 대응하는 샘플 동작으로부터 캡처된 샘플 기록에 포함될 수 있다. 일부 예들은, 취해지지 않은 분기 명령어들은 제외하고, 취해진 분기 명령어들에 대한 참조 명령어 주소 표시자만을 포함할 수 있다. 다른 예들은 취해진 및 취해지지 않은 분기 명령어 둘 모두에 대한 샘플 기록들 내의 참조 명령어 주소 표시자를 추적하는 것을 지원할 수 있다(그리고 이러한 경우, 샘플링된 또는 샘플링되지 않은 취해지지 않은 분기 동작의 프로세싱이 앞서 논의된 바와 같은 참조 명령어 주소의 추적을 재설정하는 것이 바람직할 수 있음). 어느 유형들의 명령어들이, 그 명령어가 샘플링된 동작으로서 선택된 경우, 표시된 참조 명령어 주소 표시자를 갖는지는 하드웨어로 고정될 수 있거나, 또는 어느 유형들의 명령어가 참조 명령어 주소 표시자를 포함하는 그들의 샘플 기록들을 가져야 하는지를 사용자가 (예를 들어, 구성 레지스터에 구성 정보를 설정함으로써) 구성할 수 있도록 가변적일 수 있다.
그러한 구성 정보는 또한 참조 명령어 주소 표시자가 어쨌든 (임의의 유형들의 동작에 대해) 임의의 샘플 기록들에 포함되어야 하는지 여부를 제어할 수 있다. 따라서, 프로파일링 회로부가 항상, 참조 명령어 주소 표시자들이 샘플 기록들에 포함되도록 동작하는 것이 필수는 아니다. 프로파일링 회로부는, 프로파일링 구성 정보가 참조 명령어 주소 표시자의 캡처가 디스에이블링된다고 특정할 때, 참조 명령어 주소 표시자를 생략할 수 있다. 프로파일링 구성 정보가 참조 명령어 주소 표시자의 캡처가 인에이블링된다고 특정할 때, 참조 명령어 주소 표시자는 포함될 수 있다(그러나 다른 이유로, 예를 들어, 참조 명령어 주소 무효화 이벤트가 전술한 바와 같이 발생했기 때문에, 또한 생략될 수 있음). 따라서, 사용자는 참조 명령어 주소 표시자가 진단 저장소/대역폭의 보존에 대해 핫스팟 프로파일링을 수행하는 능력의 균형을 맞추는 데 관련 있는지 여부를 선택할 수 있다.
일부 예들에서, 샘플 기록들은 샘플 기록이 하나 이상의 패킷들을 포함할 수 있는 패킷화된 포맷을 가질 수 있다. 하나의 샘플 기록 내의 패킷들의 수는 구현물에 따라 고정될 수 있거나 가변적일 수 있다. 패킷화된 포맷을 제공함으로써, 이것은 특정 구현물에 사용되는 샘플 기록의 특정 포맷에 관계없이, 소프트웨어가 일관된 방식으로 패킷을 해석할 수 있도록, 상이한 마이크로아키텍처 설계자들이 패킷들의 소정 아키텍처적 정의를 여전히 준수하면서 적절하게 상이한 포맷을 선택하는 유연성을 제공한다. 샘플 기록에 기록될 수 있는 상이한 유형들의 정보를 나타내기 위해 상이한 유형들의 패킷들이 정의될 수 있다. 이러한 유형들의 패킷들 중 하나는 샘플링된 동작과 연관된 주소를 특정하는 주소 패킷일 수 있다. 주소 패킷은 패킷이 주소 패킷(주소를 제공하지 않는 다른 유형들의 패킷과 구별됨)임을 식별하지만 어떤 유형의 주소가 샘플링된 동작과 연관되는지를 또한 특정할 수 있는 패킷 헤더를 가질 수 있다. 이것은 상이한 방식들로, 예를 들어, 그 패킷을 주소 패킷으로서 식별하는 제1 헤더 부분 및 주소 유형 표시자로서 기능하는 제2 부분을 가짐으로써, 또는 패킷이 주소 패킷임을 식별하는 것 그리고 또한 주소 유형 표시자로서 기능하는 것 둘 모두를 하는 단일의 조합된 헤더 값을 가짐으로써(이러한 예에서, 상이한 주소 유형 표시자들에 대응하는 패킷 헤더의 다수의 상이한 값들 모두가 주소 패킷들의 헤더들로서 취급될 수 있음) 행해질 수 있다.
주소 패킷에 대한 주소 유형 표시자는 대응하는 주소 패킷이 참조 명령어 주소 표시자를 특정한다는 것을 나타내는 참조 명령어 주소 인코딩 및 주소 패킷이 참조 명령어 주소 표시자 이외의 주소를 특정한다는 것을 나타내는 적어도 하나의 다른 인코딩을 포함하는, 다수의 유효한 인코딩들을 가질 수 있다. 주소 패킷들이 참조 명령어 주소를 특정한다는 것을 식별하기 위해 주소 유형 표시자의 전용 인코딩을 할당함으로써, 이것은 진단 분석 도구가 다양한 샘플링된 기록들로부터 참조 명령어 주소들을 추출하고 이들을 프로파일링에 사용할 수 있게 한다.
전술한 바와 같이, 프로파일링 회로부에 의해 캡처된 샘플 기록들은 진단 분석에 이용가능해질 수 있다. 일례에서, 샘플 기록은 샘플 기록 기입 회로부를 사용하여 샘플 기록들을 메모리에 기입함으로써 이용가능해질 수 있다. 프로세싱 회로부가 중단되지 않은 프로세싱을 계속하는 동안, 샘플 기록 기입 회로부는 프로파일링 회로부에 의해 캡처된 샘플 기록들을 메모리에 기입할 수 있을 수 있다. 따라서, 앞서 논의된 중단 기반 접근법과 달리, 샘플 기록은 초기에는 프로파일링 회로부의 하드웨어 저장 요소들에 캡처될 수 있고, 이어서, 샘플 기록이 메모리에 저장되게 하기 위해 특정 저장 명령어들이 프로세싱 회로부에 의해 소프트웨어로 실행될 필요 없이, 대체적으로 프로세싱 회로부 상에서 실행되는 로드/저장 명령어들에 의해 액세스가능한 메모리에 기입될 수 있다. 이것은 프로파일링이 프로세싱 회로부 상에서 실행되는 코드의 성능에 미치는 영향을 크게 감소시키고 모아진 프로파일링 정보의 아티팩트들로 이어지는 성능 모니터링 목적들을 위한 중단들을 회피한다. 예를 들어, 소정 수의 샘플 기록들을 저장하기에 충분한 소정 크기의 버퍼 구조가 메모리에 유지될 수 있으며, 중단은 샘플 기록이 생성될 때마다 생성되기보다는, 일단 메모리 내의 버퍼가 오버플로우할 위험이 있을 때에만 트리거될 필요가 있을 것이다.
필터링 회로부는, 샘플링된 동작이 적어도 하나의 필터 기준을 충족하는지 여부에 기초하여, 샘플 기록 기입 회로부가 샘플링된 동작에 대해 프로파일링 회로부에 의해 캡처된 샘플 기록을 메모리에 기입해야 하는지 여부를 결정하도록 제공될 수 있다. 필터 기준들은 샘플링된 동작의 유형에 기초할 수 있거나, 또는 샘플 기록 자체 내의 정보에 기초할 수 있다. 예를 들어, 소프트웨어 개발자가 예를 들어 예측실패들에 대한 이유들을 조사하는데 관심이 있는 경우, 필터 기준들은 예측실패된 분기들에 대한 샘플 기록들만이 메모리에 기입되어야 한다고 특정할 수 있고, 반면 정확하게 예측된 분기들에 대해 캡처된 샘플 기록들을 메모리에 기입할 필요는 없다. 대안적으로, 필터 기준들은 로드 동작에 대하여 소정 레벨의 캐시에서 누락이 있는지 여부 또는 샘플링된 동작의 명령어 주소가 주어진 주소 범위에 있는지 여부 등에 기초할 수 있다. 광범위한 필터 기준들이 필터링 회로부에 의해 지원될 수 있다.
필터 기준에 대한 하나의 옵션은 주어진 샘플 기록에 대응하는 샘플링된 동작이 취해진 분기 동작이라는 기준일 수 있다. 이것은 따라서 핫스팟 프로파일링에 유용할 수 있다. 비순차적 프로그램 흐름의 지점들을 표현하는 취해진 분기들에 대한 샘플 기록들만을 기록함으로써, 이것은 안전하게 참조 명령어 주소 표시자를 사용하여 가장 최근에 취해진 분기의 분기 타깃 주소 또는 다음에 취해진 분기의 명령어 주소를 참조할 수 있게 하여(핫스팟 프로파일링 결과들을 왜곡시키지 않음), 이전/나중 명령어들의 최대 가능한 범위가 실행되는 것으로 각각의 샘플에 표시될 수 있어, 주어진 수의 샘플 기록들에 대해 최대로 가능한 양의 핫스팟 프로파일링이 가능해질 수 있다. 그러나, 취해진 분기들만을 추적하면 핫스팟 프로파일링에 더하여 동일한 샘플 기록 세트에 대해 다른 형태들의 성능 분석이 수행되지 못할 수 있다.
다른 예에서, 필터링 회로부는 적어도 하나의 필터 기준 중 하나로서, 주어진 샘플 기록에 대응하는 샘플링된 동작이 취해진 분기 동작이라는 또는 취해지지 않은 분기 동작이라는 기준을 특정하도록 구성가능할 수 있다. 취해진 분기도 취해지지 않은 분기도 아닌 동작들에 관련된 다른 샘플 기록들을 배제하면서, 취해진 및 취해지지 않은 분기 동작들 둘 모두에 대한 샘플 기록들이 메모리에 저장되거나 이와 달리 진단 분석에 이용가능해지는 것을 보장하기 위한 능력을 제공함으로써, 이것은, 동일한 실행 런에 기초하여 다른 유형들의 성능 분석(예를 들어, 예측실패된 분기들에 의해 야기되는 불량한 성능을 분석하는 것, 이는 취해진 및 취해지지 않은 분기들 둘 모두가 진단 분석을 위해 출력된 샘플 기록들에 포함되는 경우, 더 신뢰할 수 있음)을 또한 지원하면서, 취해진/취해지지 않은 분기들에 대한 샘플 기록들에 포함된 참조 명령어 주소 표시자를 사용하여 핫스팟 프로파일링이 수행되게 할 수 있다. 따라서, 프로그램을 실행하는 단일 인스턴스에 대해 캡처된 샘플 기록들의 세트는 두 목적들 모두를 위해 사용될 수 있다(핫스팟 프로파일링을 위해 취해진 분기들을 추적하는 것 및 예측실패된 분기들을 추적하는 다른 것의, 2개의 별개의 실행 런들을 행할 필요가 없음). 필터가 취해진 그리고 취해지지 않은 분기들 둘 모두에 대한 샘플들을 출력하도록 구성될 때, 참조 명령어 주소 표시자가 취해진 및 취해지지 않은 분기 이벤트들 모두에 포함되어 있는 경우, 참조 명령어 주소 추적은 앞서 제공된 이유로 핫스팟 프로파일링의 체계적인 왜곡을 회피하기 위해 취해진 또는 취해지지 않은 분기들 중 어느 하나에 관련되는 것이 바람직하다.
샘플링 회로부에 의한 동작들의 샘플링은 상이한 방식들로 제어될 수 있다. 예를 들어, 샘플링 회로부는 프로세싱 파이프라인의 페치 스테이지 또는 디코드 스테이지에서, 또는 나중의 파이프라인 스테이지에서 명령어들을 선택할 수 있다. 그러나, 파이프라인의 비교적 이른 스테이지(예컨대, 페치 또는 디코드)에서 샘플링된 동작들을 선택함으로써, 후속하는 스테이지들에서의 동작의 프로세싱의 수명에 걸쳐 그러한 샘플링된 동작들과 연관된 이벤트들을 추적하는 것이 가능해진다.
샘플링 회로부는 간격 카운터에 의해 카운트되는 샘플링 간격의 경과에 응답하여 다음 샘플링된 동작을 선택할 수 있다. 간격 카운터는 다음으로 샘플링된 동작을 선택할 때를 결정하기 위해 상이한 형태들의 동작들을 카운트할 수 있다. 예를 들어, 간격은 캐시 또는 메모리로부터 페칭된 명령어들의 수, 명령어 디코더에 의해 디코딩된 명령어들의 수, 또는 실행을 위해 디코더에 의해 생성된 마이크로 동작들의 수에 기초하여 카운트될 수 있다.
샘플링 회로부는 샘플링 간격의 랜덤 섭동(random perturbation)을 지원할 수 있으며, 이에 따라 샘플링 간격의 랜덤 섭동이 인에이블링되는 경우, 프로파일링 회로부는, 주어진 기간에 간격 카운터에 의해 카운트되는 샘플링 간격을 설정하도록, 랜덤 또는 의사랜덤 값에 의해 샘플링 간격을 조정할 수 있다. 예를 들어, 샘플링 간격은 2개의 연속적인 샘플링된 동작들 사이에 카운트할 명령어들 또는 마이크로 동작들의 명목상의 수를 특정하도록 (레지스터에 제어 데이터를 설정함으로써) 사용자에 의해 구성가능할 수 있지만, 이러한 명목상의 값은 다음 카운트 기간에 비해 하나의 카운트 기간에서 정확한 간격을 바꾸기 위해 랜덤/의사랜덤 값에 의해 조정될 수 있다. 이는 샘플링 회로부가 루프를 통한 다수의 반복들 시에 프로그램 루프 내에서 동일한 동작을 반복적으로 선택할 수 있는 위험(이는 프로파일링 결과들을 왜곡시킬 위험이 있을 수 있음)을 감소시킨다.
참조 명령어 주소 표시자는 다수의 방식들로 표현될 수 있다. 대체적으로, 참조 명령어 주소 표시자는 참조되는 명령어의 주소가 식별될 수 있게 하는 임의의 값일 수 있다. 일례에서, 참조 명령어 주소 표시자는 참조 명령어의 주소의 절대 값일 수 있다. 다른 예는, 참조 명령어 주소 표시자가 주어진 명령어 및 참조 명령어 중 하나의 명령어의 주소의, 다른 하나의 명령어의 주소에 대한 상대적 오프셋을 특정하는 것일 수 있다. 이러한 접근법은 샘플 기록에 필요한 데이터의 양을 압축하는 것을 도울 수 있는데, 그 이유는, 상대적 오프셋이 전형적으로 참조 명령어의 주소의 절대 값보다 더 적은 비트들을 사용하여 표현될 수 있기 때문이다. 다른 예에서, 참조 명령어 주소 표시자는 프로그램 순서상 주어진 명령어와 참조 명령어 사이의 명령어들의 수를 나타낼 수 있다.
도 1은 데이터 프로세싱을 수행하기 위해 프로세싱 회로부(4)를 포함하는 데이터 프로세싱 장치(2)의 예를 개략적으로 예시한다. 프로세싱 회로부(4)는 이러한 예에서 데이터의 페치(6), 디코드 스테이지(8), 발행 스테이지(10), 실행 스테이지(12), 및 라이트 백 스테이지(writeback stage)(14)를 포함하는, 다수의 파이프라인 스테이지들을 갖는 프로세싱 파이프라인을 포함한다. 이것이 가능한 파이프라인형 구성의 단지 일례이고 다른 예들이 상이한 수의 스테이지들을 가질 수 있고, 추가적인 유형들의 파이프라인 스테이지를 포함할 수 있다는 것이 이해될 것이다.
페치 스테이지(6)는 레벨 1 명령어 캐시(16)로부터 파이프라인에 의해 실행될 명령어들을 페칭한다. 분기 예측기(18)는 분기를 지나 어떤 명령어들을 페칭할지를 결정하기 위해 페치 스테이지(6)에 의해 사용될 수 있는 분기 명령어들의 결과들의 예측들을 제공한다. 페치 스테이지(6)에 의해 페칭된 명령어들은 디코드 스테이지(8)에 의해 디코딩되어, 명령어들에 의해 표현되는 동작들을 수행하도록 나중의 파이프라인 스테이지들을 제어하기 위한 제어 신호들을 생성한다. 디코드 스테이지(8)는 실행 스테이지(12)가 그들을 실행할 수 있는 입도(granularity)에서 수행될 동작들을 표현하는 마이크로 동작들에 명령어들을 맵핑할 수 있다.
일부 파이프라인 구현물들에서, 메모리로부터 페칭된 명령어들과 나중의 스테이지들에서 보일 수 있는 것과 같은 마이크로 동작들 사이에 항상 일대일 맵핑이 있으므로, 마이크로 동작들은 간단히 원래 페칭된 명령어들 자체와 동등한 것 또는 그것의 표현으로서 보여질 수 있다(그렇지만, 마이크로 동작들이 대응하는 명령어들을 상이한 형태로 표현되게 하는 것이 여전히 가능함, 예를 들어, 마이크로 동작은 후술된 "샘플링된 동작" 태그와 같은, 추가적인 정보로 태깅될 수 있음). 그러한 파이프라인 구현물은 (맵핑에 변경이 없기 때문에, 명령어들을 마이크로 동작들로 디코딩하지 않고) 명령어들을 직접 실행하는 것으로 보여질 수 있거나, 또는 일대일 맵핑을 사용하여 명령어들로부터 디코딩되는 마이크로 동작들을 실행하는 것으로 보일 수 있다. 두 가지 관점들 모두는 동일한 파이프라인을 동등하게 나타내는 것으로서 보일 수 있다.
다른 예들에서, 적어도 일부 명령어들에 대해, 파이프라인은 명령어들 대 마이크로 동작들의 일대다 또는 다대일 맵핑들을 지원할 수 있다. 일부 명령어들은 여전히 단일 마이크로 동작에 대응할 수 있다. 다른 명령어들은 디코드 스테이지(8)에 의해 다수의 마이크로 동작들로 분할될 수 있다. 디코드 스테이지(8)는 또한 실행 스테이지(12)에 의해 지원되는 단일의 조합된 마이크로 동작을 형성하기 위해 캐시(16)로부터 페칭된 2개 이상의 프로그램 명령어들의 융합을 지원할 수 있다. 따라서, 실행 스테이지(12)에 의해 보여지는 마이크로 동작들은 데이터 프로세싱 장치(2)에 의해 지원되는 명령어 세트 아키텍처에 정의된 명령어들의 아키텍처적 정의와는 상이할 수 있다.
아래의 설명에서, 용어 "마이크로 동작"은 실행 스테이지에서 보여지는 것과 같은 명령어의 형태를 지칭한다. 이것은 단순히 일부 파이프라인들에 대한 원래의 명령어들 자체들일 수 있거나, 하나의 명령어를 다수의 마이크로 동작들로 분할하거나 다수의 명령어들을 조합된 마이크로 동작으로 융합함으로써 획득되는 수정된 형태의 명령어 또는 마이크로 동작일 수 있다.
발행 스테이지(10)는 피연산자들이 이용가능하게 되기를 기다리는 동안 디코더(8)에 의해 생성된 마이크로 동작들을 큐잉하고, 그것의 피연산자들이 이용가능할 때(또는 마이크로 동작이 피연산자를 필요로 하는 실행 스테이지의 관련 사이클에 도달할 때까지 피연산자가 이용가능하게 될 것임이 알려질 때) 실행할 마이크로 동작을 발행한다. 실행 스테이지(12)는 상이한 유형들의 마이크로 동작을 실행하기 위한 다수의 실행 유닛들(22 내지 28)을 포함한다. 프로세싱 동작들은 레지스터들(20)로부터 판독된 피연산자들에 기초하여 실행 유닛들(22 내지 28)에 의해 수행된다. 예를 들어, 실행 스테이지(12)의 실행 유닛들은 산술 또는 논리 연산들을 수행하기 위한 산술/논리 유닛(arithmetic/logic unit, ALU)(22), 부동 소수점 값들로서 표현되는 수들을 수반하는 연산들을 수행하기 위한 부동 소수점 유닛(24), 분기 명령어들이 취해져야 하는지 또는 취해지지 않아야 하는지를 결정하기 위한 그리고 분기가 취해질 때 프로그램 흐름의 비순차적인 변경을 수행하도록 프로그램 흐름을 조정하기 위한 분기 유닛(26), 및 메모리 시스템으로부터 레지스터들(20)로 데이터를 로드하기 위한 로드 동작들 및 레지스터들(20)로부터 메모리 시스템으로 데이터를 저장하기 위한 저장 동작들을 프로세싱하기 위한 로드/저장 유닛(28)을 포함할 수 있다. 도 1의 예의 실행 스테이지(12)에 도시된 특정 실행 유닛(22 내지 28) 세트는 단지 하나의 가능한 배열이고, 다른 예들은 상이한 유형들의 실행 유닛을 가질 수 있거나 동일한 유형의 다수의 실행 유닛들(예를 들어, 다수의 ALU(22)들)을 가질 수 있다는 것이 이해될 것이다. 라이트 백 스테이지(14)는 실행된 마이크로 동작들의 결과들을 레지스터들(20)에 기입한다.
프로세싱 파이프라인(4)은, 명령어들이 프로그래머 또는 컴파일러에 의해 정의되고 명령어들이 페치 스테이지(6)에 의해 페칭되는 프로그램 순서에 대응하는 순서로 마이크로 동작들을 실행하는 것으로 제한되는, 순서적 프로세싱 파이프라인일 수 있다. 대안적으로, 프로세싱 파이프라인(4)은 비순서적 프로세싱을 지원할 수 있는데, 여기서 발행 스테이지(10)는 프로그램 순서와는 상이할 수 있는 순서로 실행할 마이크로 동작들을 발행될 수 있게 한다. 예를 들어, 하나의 마이크로 동작이 그것의 피연산자들이 이용가능해지도록 기다리며 정지되어 있는 동안, 프로그램 순서상 나중 명령어와 연관된 나중 마이크로 동작이 정지된 명령어에 앞서 실행될 수 있다. 파이프라인이 비순서적 프로세싱을 지원하는 경우, 디코딩된 프로그램 명령어들에 의해 특정되는 아키텍처적 레지스터 특정자들을 레지스터 뱅크(20) 내의 특정 하드웨어 레지스터들을 식별하는 물리적 레지스터 특정자들로 재맵핑하기 위한 리네임 스테이지(rename stage)와 같은 추가적인 파이프라인 스테이지들이 제공될 수 있다.
이러한 예에서, 메모리 시스템은 레벨 1 명령어 캐시(16), 레벨 1 데이터 캐시(30), 데이터 및 명령어들 둘 모두에 사용될 수 있는 공유되는 레벨 2 캐시(32), 및 메인 메모리(34)를 포함하며, 이는 파이프라인(4)에 의해 실행되는 로드/저장 명령어들을 통해 액세스가능한 다수의 메모리 저장 유닛들, 주변 디바이스들 및 다른 디바이스들을 포함할 수 있다. 도 1에 도시된 특정 캐시 계층구조는 단지 일례이고 다른 예들이 상이한 수의 캐시 레벨들을 가질 수 있거나, 또는 데이터 캐시들에 관련된 명령어 캐시의 상이한 배열을 제공할 수 있다(예를 들어, 레벨 2 캐시(32)는 별개의 레벨 2 명령어 및 데이터 캐시들로 분할될 수 있음)는 것이 이해될 것이다. 메모리 관리 유닛(memory management unit, MMU)(36)은 가상 주소들(프로세싱 파이프라인(4)에 의해 프로세싱되는 명령어들의 피연산자들에 기초하여 생성됨)과 메모리 시스템에서 액세스될 위치들을 식별하는 물리적 주소들 사이의 주소 변환을 제어하기 위해 제공된다. MMU(36)는 주소 변환 맵핑들을 정의하는 메모리 시스템(34)으로부터 획득된 페이지 테이블 데이터에 따른 정보를 캐싱하기 위한 적어도 하나의 변환 색인 버퍼(translation lookaside buffer, TLB)(38)를 포함할 수 있고, 또한 소정 영역들의 주소 공간이 파이프라인(4) 상에서 실행되는 특정 프로세스들에 액세스가능한지 여부를 제어하는 액세스 허가들을 제공할 수 있다. 간결성을 위해, MMU(36)가 데이터 액세스들 시의 사용을 위해 로드/저장 유닛(28)에 접속된 것으로 도 1에 도시되어 있지만, MMU(36)는 또한 주소들을 변환하는 데에, 그리고 실행할 명령어들을 페칭할 때, 페치 유닛(6)에 의해 발행되는 명령어 페치 주소들의 액세스 허가들을 검사하는 데에 사용될 수 있다.
도 1은 가능한 프로세서 아키텍처의 단지 일례이며, 다른 예들은 도 1에 명시적으로 표시되지 않은 다른 구성요소들을 가질 수 있다.
소프트웨어 개발을 보조하기 위해, 프로세서(2)에는 프로세싱 파이프라인(4)에 의해 프로세싱된 명령어들의 거동에 관한 프로파일링 정보를 모을 수 있게 하는 하드웨어 자원들이 제공되며, 이는 소프트웨어 개발자가 더 효율적으로 실행하기 위해 그들의 코드를 수정할 목적으로 코드 최적화를 수행하는 데 사용할 수 있다. 샘플링 회로부(50)는 프로파일링 회로부(52)에 의해 프로파일링될 샘플링된 동작들로서 소정 명령어들 또는 마이크로 동작들을 선택하기 위해 제공된다. 샘플링 회로부(50)는 파이프라인의 상이한 스테이지들에서 샘플링된 동작들을 선택할 수 있다. 예를 들어, 샘플링 회로부(50)는 소정의 페칭된 명령어들을 샘플링된 동작들로서 선택할 수 있고, 페치 스테이지(6)에서의 그러한 페칭된 명령어들을, 명령어가 파이프라인(4) 아래로 진행함에 따라, 프로파일링 회로부(52)가 샘플링된 동작의 거동에 대한 정보를 모아야 한다는 것을 나타내기 위해 그러한 명령어들을 라벨링하도록 태깅할 수 있다. 대안적으로, 샘플링 회로부에 의한 샘플링된 동작들의 명령어들의 태깅은 디코드 스테이지(8)에서 또는 나중 스테이지에서 일어날 수 있다. 또한, 샘플링된 동작들은 메모리로부터 페칭된 아키텍처적 프로그램 명령어들의 입도에서보다는 개별 마이크로 동작들의 입도에서 선택되는 것이 가능하다.
샘플링 회로부는 다음 샘플링된 동작이 선택되어야 할 때를 결정하기 위해 명령어들 또는 마이크로 동작들을 카운트하기 위한 간격 카운터(54)를 갖는다. 도 2는 샘플링 회로부(50)에 의한 동작들의 샘플링을 도시하는 흐름도를 도시한다. 단계(60)에서, 샘플링 회로부(50)는 선택되고 있는 2개의 연속적인 샘플링된 동작들 사이에서 카운트될 명령어들 또는 마이크로 동작들의 수를 표현하는 특정 샘플링 간격을 선택한다. 샘플링 간격은 제어 레지스터 내의 사용자 구성가능 파라미터에 의해 정의될 수 있거나, 특정 간격으로 고정될 수 있다. 선택적으로, 샘플링 회로부(50)는 사용자에 의해 선택된 설정된 샘플링 간격이 난수 발생기 또는 의사난수 발생기(56)에 의해 생성된 랜덤 또는 의사랜덤 값에 의해 섭동될 수 있는 랜덤 섭동 함수를 지원할 수 있다. 도 1은 의사난수 발생기(56)가 샘플링 회로부(50) 내에 있는 것을 도시하지만, 다른 예들에서, 샘플링 회로부는 명령어 또는 마이크로 동작 샘플링 이외의 다른 목적들을 위해 또한 사용되는, 프로세싱 시스템의 다른 곳에 제공되는 (의사)난수 발생기에 의해 생성된 (의사)난수들을 재사용할 수 있다. 예를 들어, (의사)난수 발생기(56)는 다음 동작 기간 동안 간격 카운터(54)에 의해 카운트될 샘플링 간격을 생성하기 위해, 사용자에 의해 공칭 샘플링 간격으로서 특정된 샘플링 간격에 가산되는(또는 그로부터 감산되는) 소정 범위의 랜덤 값을 생성할 수 있다. 랜덤 섭동을 가능하게 하는 것은 유용할 수 있는데, 그 이유는, 그것이, 명령어들의 루프를 프로세싱할 때, 루프의 다수의 반복들에서 동일한 명령어들 또는 마이크로 동작들이 샘플링된 동작으로서 계속 선택되는 위험을 감소시키기 때문이다. 일부 구현물들에서, 랜덤 섭동이 인에이블링되는지 또는 디스에이블링되는지는 선택적일 수 있으며, 이때, 사용자 구성가능 제어 파라미터가 랜덤 섭동이 인에이블링되는지 여부를 선택한다.
따라서, 단계(60)에서, 샘플링 간격이 선택되고(고정 값으로 설정되거나, 가변 사용자 구성가능 파라미터에 의해 직접적으로 특정되거나, 고정/가변 간격 값으로부터 랜덤하게 또는 의사 랜덤하게 섭동됨), 이어서, 단계(62)에서, 간격 카운터(54)가 프로세싱 회로부(4)에 의해 프로세싱되는 동작들의 수를 카운트하기 시작한다. 카운트된 동작들은 페칭된 명령어들, 디코딩된 명령어들 또는 디코딩된 마이크로 동작들 중 어느 하나일 수 있다. 일부 시스템들은 이러한 옵션들 중 하나만을 지원할 수 있다. 다른 시스템들은, 사용자가, 어떤 유형의 동작이 간격 카운터(54)에 의해 카운트되는지를 선택하는 구성 데이터를 설정하는 능력을 지원할 수 있다. 단계(64)에서, 샘플링 회로부(50)는 간격 카운터(54)가, 단계(60)에서 선택된 샘플링 간격이 경과했다고 나타내는지 여부를 결정하고, 그렇지 않은 경우, 간격 카운터(54)는 계속 동작들을 카운트한다. 카운터가 샘플링 간격이 경과했다고 나타내는지 여부의 결정은 상이한 방식들로 수행될 수 있다. 예를 들어, 카운터는 단계(60)에서 선택된 샘플링 간격에 대응하는 값으로 설정될 수 있고, 이어서 카운트되는 동작들 중 하나가 보일 때마다 감소될 수 있고, 카운터가 0에 도달하거나 또는 0을 지나 오버플로우될 때 경과하는 것으로 고려될 수 있다. 대안적으로, 카운터는 단계(60)에서 0으로 재설정되고, 이어서 단계(62)에서 카운트된 각각의 동작에 응답하여 증가되거나 감소될 수 있고, 단계(64)에서 카운터와 샘플링 간격에 대응하는 값 간의 비교가 샘플링 간격 값에 도달하기에 충분한 수의 동작들이 카운트되었다는 것을 나타낼 때 경과하는 것으로 고려될 수 있다.
샘플링 간격의 경과가 결정되는 방법에 관계없이, 샘플 간격이 경과되었을 경우, 단계(66)에서 다음 동작(예를 들어, 페칭된 명령어, 디코딩된 명령어 또는 디코딩된 마이크로 동작)이 샘플 동작으로서 태깅된다. 예를 들어, 명령어와 연관된 태그 비트가 설정될 수 있고, 이러한 태그 비트는, 샘플링된 동작으로서 선택된 명령어 또는 마이크로 동작이 파이프라인(4) 아래로 진행함에 따라, 그것에 동반될 수 있다. 이어서, 샘플링 회로부(50)는 새로운 샘플링 간격(이는 랜덤 섭동이 지원되지 않거나 디스에이블링된 경우 이전에 설정된 샘플링 간격과 동일할 수 있거나, 또는 랜덤 섭동이 인에이블링된 경우 이전에 설정된 샘플링 간격과는 상이할 수 있음)에 기초하여 다시 한번 카운터(54)를 재설정하기 위해 단계(60)로 복귀한다. 도 2의 루프를 돌면서, 샘플링된 동작들이 주기적 간격들로 계속 선택된다.
샘플링된 동작으로서 동작들의 서브세트만을 선택하는 것의 이점은, 이것이 프로파일링을 위해 정보를 추적하는데 있어서 오버헤드를 크게 감소시킨다는 것이다. 예를 들어, 샘플링 간격은 실제로 한 번에 파이프라인(4) 내에서 진행 중인 단일 동작만이 샘플링된 동작으로서 선택될 정도로 충분히 길게 설정될 수 있으며, 이에 따라, 프로파일링 회로부(52)가 한 번에 단일의 샘플링된 동작의 거동을 추적하기에 충분한 하드웨어 자원들만을 제공받을 필요가 있게 된다. 이것은 특정 샘플링된 동작에 대한 정보에 기초하여 저장 구조의 어떤 엔트리를 업데이트할지를 선택하기 위해, 특정 샘플링된 동작과 연관된 동작 식별자에 기초하여, 다수의 동작들에 대한 정보를 저장할 수 있는 저장 구조들을 인덱싱해야 하는 것에 대한 오버헤드를 회피한다.
그럼에도 불구하고, 다른 구현물들은 더 큰 하드웨어 비용을 초래하도록 선택할 수 있고, 한 번에 다수의 샘플링된 동작들이 선택되는 것을 지원하도록 선택할 수 있다. 그러한 실시예들에서, 샘플링된 동작들로서 동작들의 서브세트를 샘플링하는 것은, 모든 명령어를 추적하려고 시도할 구현물들에 비해, 생성되는 프로파일링 정보의 양을 크게 감소시키는 이점을 여전히 가지므로, 각각의 샘플링된 동작에 대해 더 넓은 범위의 데이터가 캡처되고, 그리고 그에 따라 더 의미 있는 프로파일링 분석이 수행되는 것을 실현가능하게 한다.
프로파일링 회로부(52)는 샘플링 회로부(50)에 의해 선택된 샘플링된 동작의 거동에 관한 정보를 모으기 위해 모니터링 회로부(70)를 포함한다. 모니터링 회로부(70)가 프로파일링 회로부(52) 내에 단일 블록으로 도시되어 있지만, 실제로 모니터링 회로부는 프로세서의 상이한 구성요소들로부터 정보를 모으기 위해 프로세서 주위에 분산된 다수의 요소들을 포함할 수 있다. 예를 들어, 모니터링 회로부(70)는 샘플링된 동작에 대한 다양한 유형들의 이벤트들의 발생을 검출하기 위한 이벤트 검출 회로부를 포함할 수 있다. 검출된 이벤트들의 유형들은 샘플링된 동작의 유형에 따를 수 있다. 예를 들어, 샘플링된 동작으로서 선택된 분기 동작의 경우, 이벤트들은 분기 예측실패가 발생했는지 여부 또는 분기 예측기(18)가 분기를 정확하게 예측했는지 여부를 추적할 수 있다. 로드/저장 동작들의 경우, 이벤트들은, 예를 들어, 로드/저장 동작이 소정 레벨의 캐시(30, 32)에서 누락되었는지 여부, 로드/저장 명령어에 대한 주소 변환 룩업이 TLB(38)에서 또는 특정 레벨의 TLB에서 누락되었는지 여부, 또는 로드/저장 명령어에 대해 주소 결함이 발생했는지 여부를 포함할 수 있다. 모니터링될 수 있는 다른 유형들의 이벤트들은 명령어 캐시(16) 내에서의 명령어 페치들 누락, 정의되지 않은 명령어 예외와 같은 결함들, 또는 자원들에 대한 경합으로 인해 소정 명령어들이 지연되었는지 여부일 수 있다. 모니터링 회로부(70)는 또한 샘플링된 동작의 명령어 주소, 로드/저장 동작의 타깃 주소, 또는 분기 동작의 분기 타깃 주소, 및 샘플링된 동작이 프로세싱의 소정 스테이지에 도달하는 지점에서 캡처된 레지스터들(20)로부터의 아키텍처적 상태의 항목들(예를 들어, 샘플링된 동작이 프로세싱되었던 프로세싱 콘텍스트를 식별하는 콘텍스트 식별자들)과 같은 특정 명령어들에 관한 정보를 캡처할 수 있다. 모니터링 회로부(70)는 또한, 예를 들어, 주소 변환 또는 캐시 룩업의 레이턴시를 측정하는 것과 같은 소정 동작들이 끝나는 데 걸리는 프로세싱 사이클들의 수 또는 동작이 제1 프로세싱 지점과 제2 프로세싱 지점 사이에서 진행하는 사이클들의 수를 카운트하는 사이클 카운터들을 가질 수 있다. 따라서, 모니터링 회로부(70)에 의해 다양한 정보가 모아질 수 있다는 것이 이해될 것이다.
캡처된 모니터링 정보는 프로파일링 회로부(52)의 샘플 기록 저장 회로부(72)(예를 들어, 레지스터들 또는 버퍼)에 저장되는 샘플 기록에 기록될 수 있다. 샘플 기록은 후술된 바와 같이 패킷화된 포맷을 사용하여 생성될 수 있다. 주어진 샘플링된 동작에 대해 캡처된 샘플 기록 내에서, 기록은 샘플링된 동작과 연관된 동작의 유형(예를 들어, 그것이 분기, 로드/저장 동작, 또는 ALU 동작 등인지 여부)을 특정할 수 있고, 또한 샘플링된 동작에 직접적으로 기인하는 다양한 정보를 제공한다. 샘플 기록 저장소(72) 내의 샘플 기록의 캡처는 파이프라인(4) 상에서 수행되고 있는 프로세싱의 백그라운드에서 하드웨어로 수행되므로, 샘플 기록 내에 정보를 모으기 위해 임의의 특정 소프트웨어 명령어들이 실행되도록 요구하지 않는다.
필터링 회로부(74)는, 프로파일링 회로부(52)가, 특정 샘플링된 동작에 대해 캡처된 샘플 기록이 진단 분석을 위해 액세스가능해지는지 여부를 선택할 수 있게 하기 위해 제공된다. 도 1에 도시된 실시예에서, 샘플 기록은 메모리 시스템(34)에 저장된 프로파일링 버퍼 구조(76)에 그것을 기입함으로써 진단 분석을 위해 액세스가능해질 수 있다. 프로파일링 버퍼(76)로서 사용하기 위해 할당된 주소 범위는 프로파일링 회로부(52)의 구성 레지스터들(78)에 저장된 버퍼 주소 식별 정보에 기초하여 결정될 수 있으며, 이는 소프트웨어 제어 하에서 사용자에 의해 설정될 수 있다. 구성 레지스터(78)는 또한 특정 유형들의 샘플링된 동작에 대해 샘플 기록 내에 어떤 유형들의 정보가 포함되어야 하는지를 특정하는 그리고 샘플 기록 기입 회로부(79)가 샘플 기록 저장소(72)로부터 캡처된 샘플 기록을 프로파일링 버퍼(76)에 기입해야 하는지 여부를 결정하기 위해 필터링 회로부(74)에 의해 사용되는 필터링 기준을 설정하기 위한 구성 정보를 포함할 수 있다. 샘플 기록을 메모리 내의 프로파일링 버퍼(76)에 기입하는 것은 파이프라인(4) 상의 프로세싱을 중단할 필요 없이 수행될 수 있으며, 이에 따라, 샘플 기록으로 하여금 메모리 시스템에 저장되게 하는 데 어떠한 특정 소프트웨어 명령어들도 필요하지 않다. 따라서, 충분한 수의 샘플 기록들이 생성되고 프로파일링 버퍼가 오버플로우할 위험이 있다는 것이 기입될 때까지, 소정 수의 샘플 기록들이 어떠한 중단들도 발생하지 않으면서 프로파일링 버퍼(76)로 출력될 수 있으며, 그 때, 성능 모니터링 중단이 프로세싱을 중단시키기 위해 트리거될 수 있으며, 그에 따라, 예외 처리기는 이어서 (예를 들어, 후속하는 샘플 기록들이 주소 공간의 상이한 영역에서 프로파일링 버퍼에 저장되게 할 수 있도록 구성 레지스터(78) 내의 주소 파라미터들을 업데이트함으로써, 또는 프로파일링 버퍼로부터 샘플 기록들을 판독하여 그들을 다른 곳에 저장하거나 그들을 외부 분석을 위해 출력함으로써) 프로파일링 버퍼(76)에 이전에 저장되었던 샘플 기록들이 진단 분석을 위해 액세스가능하게 남아 있을 수 있다는 것을 보장하기 위한 액션을 취할 수 있다. 도 1은 샘플 기록들을 메모리에 기입함으로써 그들이 진단 분석을 위해 액세스가능해지는 예를 도시하고 있지만, 대안물은 진단 정보를 온-칩으로 저장하기 위해 메모리 시스템(34)과는 별개인 전용 하드웨어 구조인 트레이스 버퍼(73)에 그들을 출력하고/하거나 (직접적으로 또는 트레이스 버퍼(73)를 통해) 트레이스 출력 포트(75)를 통해 캡처된 샘플 기록을 출력하는 것일 것이며, 여기서, 트레이스 출력 포트는 그것을 통해 샘플 기록이 외부 오프-칩 트레이스 분석기 또는 저장 디바이스로 출력될 수 있는 집적 회로 핀들의 세트이다. 일부 시스템들은 샘플 기록들을 메모리에 기입하는 능력 대신에 이러한 트레이스 출력 기능성을 지원할 수 있는 반면, 다른 시스템들은 두 접근법들 모두를 지원할 수 있고, 어떤 접근법을 사용할지 선택하기 위해 레지스터(78) 내의 구성 정보를 사용할 수 있다.
도 3은 프로파일링 회로부(52)에 의한 프로파일링을 도시하는 흐름도이다. 단계(80)에서, 프로파일링 회로부(52)는 샘플링된 동작이 프로세싱되고 있는지 여부를 결정한다. 그렇지 않은 경우, 모니터링이 필요하지 않다. 결국, 일단 샘플링 회로부(50)에 의해 선택된 샘플링된 동작이 식별되었으면, 단계(82)에서 모니터링 회로부(70)는 샘플링된 동작의 동작 유형 및 샘플링된 동작에 직접적으로 기인하는 샘플링된 동작의 거동에 관한 정보를 특정하는 샘플 기록을 캡처한다. 샘플 기록은 또한, 예를 들어, 레지스터 상태의 스냅샷과 같은 샘플링된 동작에 직접적으로 기인하지 않는 다른 정보를 포함할 수 있다(예를 들어, 조건부 명령어들의 결과들을 결정하는 데 사용되는 조건부 코드 플래그들의 현재 값들이, 그러한 조건부 코드 플래그 값들이 샘플링된 동작에 의해 직접적으로 야기되었는지 여부에 관계없이, 캡처될 수 있음). 캡처된 샘플 기록은 샘플 기록 저장소(72)에 저장된다. 단계(82)는, 모두가 동시에 준비되지 않을 수 있는, 프로세싱 시스템의 다양한 지점들에서 다양한 모니터링 정보 조각들을 캡처하는 다수의 별개인 인스턴스들을 포함할 수 있다는 것이 이해될 것이다. 샘플 기록 저장소(72) 내의 샘플 기록은 파이프라인의 상이한 지점들에서 모아진 다수의 정보 조각들로 점진적으로 구성될 수 있다. 대안적으로, 모니터링 회로부(70)는, 이벤트들 및 정보 조각들이 검출됨에 따라, 그들을 추적하는 일부 임시 레지스터들을 포함할 수 있는데, 이어서 그들은 출력을 위해 준비된 알려진 샘플 기록 포맷의 샘플 기록을 구성하는 데 사용될 수 있다.
단계(84)에서, 필터링 회로부는 샘플링된 동작이 구성 레지스터들(78)에 특정된 적어도 하나의 필터 기준을 충족하는지 여부를 결정한다. 이러한 필터링되는 기준은 샘플링된 동작의 동작 유형에 기초할 수 있다(예를 들어, 분기 동작들이 샘플링된 동작으로서 선택되는 경우, 사용자는 다른 유형들의 동작들에 관한 것은 제외하고 분기 동작들에 관한 정보만을 모으도록 필터를 구성했을 수 있음). 또한, 필터 기준은 모니터링 회로부(70)에 의해 캡처된 모니터링된 정보 및/또는 샘플 기록에 추가되는 정보 중 일부에 따를 수 있다. 예를 들어, 필터 기준은, 예측실패된 분기들과 연관된 기록들만이 필터를 통과하도록 허용되어야 한다고 또는 레벨 1 데이터 캐시(30)에서 누락된 로드/저장 명령어들에 대한 샘플 기록들이 추적되어야 한다고 특정할 수 있다. 특정 필터 기준 세트는 레지스터들(78) 내의 사용자 제어 구성 데이터에 따르고, 다수의 기준들 중 임의의 하나 이상을 만족하는 샘플 기록들이 필터를 지나 진행될 수 있게 할 수 있도록 OR 연산으로 조합되거나 또는 2개 이상의 기준들 각각을 만족하는 샘플 기록들이 필터를 통과하지만 이들 기준들 중 하나만을 통과한 샘플 기록들은 거절되도록 AND 연산으로 조합된 몇몇의 대안적인 기준들을 포함할 수 있다.
샘플링된 동작이 적어도 하나의 필터 기준도 충족하지 않는 경우, 단계(86)에서 프로파일링 회로부(52)는, 샘플 기록을 진단 분석에 이용가능하게 하지 않으면서, 캡처된 샘플 기록이 폐기되거나 오버라이팅될 수 있게 한다. 따라서, 이러한 샘플 기록을 메모리 시스템에 기입하거나 그것을 트레이스 버퍼(73) 또는 트레이스 출력 포트(75)에 출력할 필요가 없다. 다음으로, 샘플링된 동작이 프로세싱되고, 이어서 임의의 이전에 캡처된 정보가 오버라이팅될 수 있다.
샘플링된 동작이 적어도 하나의 필터 기준을 충족하는 경우, 단계(88)에서, 진단 분석을 위해 샘플 기록에 액세스가능하게 하기 위해 어떤 옵션이 인에이블링되는지가 결정된다. 시스템이 샘플 기록 기입 회로부(79)를 갖고 메모리에 샘플 기록을 기입하는 것이 인에이블링되는 경우, 단계(90)에서 프로파일링 회로부(52)는 프로파일링 버퍼(76)의 현재 점유도가 설정된 임계치를 초과하는지 여부를 결정하고, 그러한 경우, 단계(92)에서 성능 모니터링 중단이 트리거되어, 파이프라인(4) 상의 프로세싱을 중단시키고 샘플 기록 캡처가 계속될 수 있게 프로파일링 버퍼가 오버플로우하는 것을 회피하도록 액션을 취할 수 있는 예외 처리기의 실행을 (소프트웨어로) 호출한다. 예를 들어, 예외 처리기는 상이한 주소 범위를 나타내도록, 프로파일링 버퍼(76)에 추가적인 용량을 할당하도록, 또는 동일한 프로파일링 버퍼 위치가 계속 사용될 수 있게 프로파일링 버퍼(76)로부터의 정보를 상이한 저장 위치로 전달하도록 프로파일링 버퍼 주소 파라미터들을 업데이트할 수 있다. 단계(90)에서 사용되는 임계치는 프로파일링 버퍼의 용량과 매칭하도록 설정될 수 있거나, 또는 오버플로우가 발생하기 전에 성능 모니터링 중단이 트리거될 수 있도록 최대 용량 미만의 레벨로 설정될 수 있다. 단계(90)에서 임계치에 아직 도달하지 않은 경우, 단계(94)에서 샘플 기록 저장소(72)에 캡처된 샘플 기록은 메모리 내의 프로파일링 버퍼(76)에 기입될 수 있고, 현재 버퍼 점유도를 추적하는 파라미터는 업데이트된 버퍼 점유도를 반영하도록 업데이트될 수 있다. 단계(94)에서의 기입은, 프로세싱이 파이프라인(4)에서 중단되지 않은 채로 계속되는 동안, 샘플 기록 기입 회로부(79)에 의해 트리거된다.
한편, 단계(88)에서 트레이스 출력 방법이 인에이블링되고 지원되는 경우, 단계(96)에서 샘플 기록 저장소(72)에 캡처된 샘플 기록은 (프로세싱이 중단되지 않은 채로 계속되는 동안) 샘플 기록을 트레이스 버퍼(73)로 그리고/또는 트레이스 출력 포트(75)를 통해 외부 디바이스로 출력함으로써 진단 분석에 이용가능해진다. 일부 시스템들은 메모리 기입 및 트레이스 출력 옵션들 둘 모두를 지원할 수 있고 다른 시스템들은 이러한 옵션들 중 하나만을 지원할 수 있다.
도 4는 주어진 샘플링된 동작에 대해 캡처된 샘플 기록(100)의 패킷화된 포맷의 예를 예시한다. 샘플 기록(100)은 다수의 패킷들(102)을 포함할 수 있으며, 여기서 각각의 패킷은 사용될 수 있는 이용가능한 패킷 유형들의 세트로부터 선택된다. 각각의 패킷은 패킷의 유형을 식별하는 헤더 부분(104)을 적어도 포함할 수 있고, 선택적으로 다른 정보를 또한 포함할 수 있다(예를 들어, 단일 유형의 패킷들 내에서도, 패킷 헤더에 의해 구별될 수 있는 다수의 변형들이 있을 수 있거나, 샘플링된 동작 자체에 대한 제한된 양의 정보가 헤더에 표시될 수 있음). 또한 헤더는 그 패킷과 연관된 모니터링 데이터를 제공하는 연관된 페이로드(106)의 크기를 특정할 수 있다. 일부 유형들의 패킷들은 페이로드(106)를 갖지 않을 수 있고, 헤더(104)만을 포함할 수 있다. 예를 들어, 패킷 유형들은 하기를 포함할 수 있다:
Figure pct00004
헤더 패킷: 전체적으로 샘플 기록(100)에 대한 헤더 정보를 제공함. 예를 들어, 헤더 패킷은 샘플 기록을 캡처했던 소스를 식별하는 프로파일링 소스 식별자를 특정할 수 있다. 예를 들어, 다중 프로세서 시스템에는, 각각이 프로파일링 회로부(52)를 갖는 다수의 프로세서 코어들이 있을 수 있고 소스 ID가 샘플 기록이 캡처되었던 동작을 프로세싱한 원하는 프로세서 코어 인스턴스를 구별할 수 있다.
Figure pct00005
타임 스탬프 패킷: 샘플링된 동작이 프로세싱되었던 시간을 식별하는 시스템 타이머 값을 제공함.
Figure pct00006
콘텍스트 패킷: 샘플링된 동작이 프로세싱되었던 프로세싱 콘텍스트를 식별하는 하나 이상의 콘텍스트 식별자들을 제공함. 예를 들어, 콘텍스트 식별자들은 상이한 가상 주소 공간들과 연관된 프로세스들 사이를 구별하는 주소 공간 식별자, 및/또는 샘플링된 동작이 프로세싱되었던 가상 머신을 식별하는 가상 머신 식별자를 포함할 수 있다.
Figure pct00007
이벤트 패킷: 샘플링된 동작에 대해 발생하는 하나 이상의 이벤트들의 요약을 제공함. 예를 들어, 이벤트 패킷은 각각의 비트가 대응하는 유형의 이벤트가 발생했는지 또는 아닌지를 나타내는 다수의 비트들을 포함하는 이벤트 마스크를 제공할 수 있다. 이벤트 패킷의 헤더 부분(104)은 상이한 이벤트 유형 세트들을 나타내기 위해 다수의 대안적인 유형들의 이벤트 마스크 사이를 구별할 수 있다. 이것은 어떠한 이벤트들도 발생하지 않은 이벤트 유형들의 세트들에 대해 이벤트 마스크들을 인코딩할 필요성을 없앤다.
Figure pct00008
카운터 패킷: 샘플링된 동작을 위해 취해진 특정 액션과 연관된 레이턴시를 나타내는 적어도 하나의 카운터 값을 제공함. 예를 들어, 레이턴시는 메모리 액세스 동작 또는 주소 변환과 연관될 수 있다. 레이턴시는 또한, 샘플링된 동작이 파이프라인의 주어진 지점에 도달하는 것과 파이프라인 내의 주어진 나중의 지점에 도달하는 것 사이의 사이클들의 수를 나타낼 수 있다.
Figure pct00009
동작 유형: 샘플링된 동작의 유형을 나타내는 패킷. 예를 들어, 동작 유형은 로드/저장 동작들, 분기 동작들 또는 ALU 동작들 사이를 구별할 수 있다.
Figure pct00010
주소 패킷: 샘플링된 동작과 연관된 주소를 나타냄.
Figure pct00011
종료 마커 패킷: 현재 샘플 기록(100)의 종료를 나타내어, 임의의 후속하는 패킷이 다음 샘플 기록의 일부인 것으로 해석되게 할 것임. 종료 마커 패킷(102)의 사용은, 기록할 얼마나 많은 관심 정보가 있는지에 따라 가변 수의 패킷들이 포함될 수 있도록 가변 크기를 갖는 샘플 기록 포맷들을 지원하는 데 유용할 수 있다. 그러나, 다른 접근법들은 일부 알려진 크기의 샘플 기록들의 고정된 포맷을 가질 수 있다(또는 주어진 유형의 샘플링된 동작에 대해 샘플 기록의 크기를 고정시킬 수 있으며, 이는 다른 유형들의 샘플링된 동작들에 대한 고정된 크기의 사용과는 상이할 수 있음). 고정된 크기의 기록 포맷들이 사용되는 경우, 종료 마커(102)는 필요하지 않을 수 있다.
Figure pct00012
패딩 패킷(Padding packet): 고정된 크기의 포맷이 사용되는 경우, 고정된 크기의 샘플 기록들의 나머지 부분들을 채우는 데 사용됨. 패딩 패킷은 페이로드를 갖지 않는다.
어떤 유형의 패킷이 표현되는지를 식별하기 위해 헤더 부분(104)에 사용되는 특정 인코딩은 임의적이고, 특정 시스템의 필요에 따라 선택될 수 있다. 일부 패킷 유형들은, 정상적인 헤더에 더하여 여분의 정보를 제공하기 위해 프리픽스 헤더가 제공될 수 있도록 가변 크기의 것일 수 있는 헤더를 지원할 수 있으며, 여기서, 프리픽스를 포함하는 것은 선택적이며, 이에 따라, 동일한 헤더가 프리픽스와 함께 그리고 그것이 없이 포함될 수 있다. 일부 경우들에, 헤더는 가변 크기 페이로드들이 가능하도록 페이로드(106)의 크기를 특정할 수 있다. 주어진 유형의 샘플링된 동작에 대한 샘플 기록에 포함된 패킷들의 수는 다양할 수 있으며, 예를 들어, 일부 기록들은 다른 것들보다 더 많은 수의 이벤트들, 카운터들 또는 주소들이 포함되도록 요구할 수 있다.
도 5는 로드 명령어에 대한 샘플 기록(100)의 예(임의적인 예로서 선택됨)를 도시한다. 밑줄친 텍스트를 갖는 부분들은 패킷 헤더들(104)을 표현하고, 밑줄이 없는 텍스트를 갖는 이어진 부분들은 패킷 페이로드(106)들을 표현한다. 샘플 기록의 특정 콘텐츠들은 샘플링된 동작이 프로세싱되었을 때 무엇이 발생했었는지에 따르므로, 상당히 바뀔 수 있다는 것이 이해될 것이다. 도 5의 특정 예에서, 샘플 기록은 소스 ID를 제공하는 헤더 패킷, 시스템 타이머 값을 제공하는 타임스탬프 패킷, 2개의 주소 패킷들(로드 명령어 자체의 명령어 주소를 식별하는 프로그램 카운터 주소를 제공하는 제1 주소 패킷 및 로드가 수행될 타깃 주소를 표현하는 데이터 주소를 식별하는 제2 주소 패킷), 각각 주소 공간 식별자를 특정하는 콘텍스트 패킷(CONTEXTIDR_EL1) 및 가상 머신 식별자를 특정하는 콘텍스트 패킷(CONTEXTIDR_EL2)의 2개의 콘텍스트 패킷들, 이러한 예에서, 로드 동작과 연관된 데이터 액세스의 크기를 나타내는 프리픽스 헤더를 포함하는 동작 유형 패킷을 포함하고, 이때, 주요 동작 유형 헤더는 샘플링된 동작이 (분기 또는 ALU 동작이 아닌) 로드임을 나타낸다. 샘플 기록은 또한, 이러한 예에서, 샘플링된 동작이 발행되고 있는 것과 로드 동작의 주소가 생성되고 있는 것 사이의 레이턴시를 나타내는 제1 카운트 값 및 주소가 생성되고 있는 것과 로드할 데이터가 메모리 시스템으로부터 반환되고 있는 것 사이의 레이턴시를 나타내는 제2 카운트 값을 나타내는, 레이턴시 카운트 값들을 제공하는 2개의 카운트 패킷들을 포함한다. 샘플 기록은 또한 로드에 대해 발생한 하나 이상의 이벤트들(예를 들어, 캐시 히트/누락들, TLB(38) 내에서의 주소 변환 히트/누락 등)을 나타내는 마스크를 제공하는 이벤트 패킷을 포함한다. 마지막으로, 샘플 기록은 종료 마커 패킷을 포함한다. 따라서, 샘플 기록(100)은 샘플링된 동작의 결과, 동작이 프로세싱되는 데 걸렸던 시간, 및 동작이 프로세싱되었던 때와 어떤 콘텍스트에서 프로세싱되었는지에 대한 다른 정보에 대한 상세한 정보를 제공하며, 이들 모두는 소프트웨어 개발자가 그들의 코드가 갖는 잠재적인 쟁점들을 진단하는 데 유용할 수 있다.
도 6은 주소 패킷(102)의 예를 더 상세히 도시한다. 주소 패킷의 경우, 주소 유형 헤더(104)는 패킷이 주소 패킷(다른 유형들의 패킷과 구별됨)임을 나타내는 값을 갖지만, 다수의 상이한 유형들의 주소들 중 하나로부터 선택되고, 페이로드에 표현된 주소의 특정 유형을 또한 식별한다. 예를 들어, 페이로드 내의 주소는, 샘플링된 동작 자체와 연관된 명령어의 주소를 식별하는 명령어 가상 주소, 데이터 액세스의 타깃 주소를 식별하는 데이터 액세스 가상 주소, 분기가 취해지는 경우 분기가 프로그램 흐름을 지시해야 하는 주소를 식별하는 분기 타깃 주소, 또는 프로그램 순서상 참조 명령어와 샘플링된 동작에 대응하는 주어진 명령어 사이에 포지셔닝된 임의의 2개의 중간 명령어들 사이에서 실행이 순차적으로 진행된(취해진 분기가 없음), 참조 명령어의 주소를 마킹하는 참조 명령어 주소 중 하나로서 식별될 수 있다.
참조 명령어 주소 패킷의 사용은 도 7에 도시된 명령어들의 예시적인 시퀀스와 관련하여 아래에서 추가로 논의된다. 도 7의 예에서, 취해진 분기 명령어(200)는, 명령어(218)에서 추가로 취해진 분기가 발생하기 전에, 몇몇의 취해지지 않은 분기 명령어들(208, 216)을 포함하는, 명령어들(202, 204 등)의 블록의 프로세싱을 야기한다. 이러한 예에서, 취해진 분기 명령어(218)는 명령어들(230 내지 240)에서의 함수 코드에 대한 함수 호출을 표현하며, 여기서 함수 코드는 이전의 취해진 분기(218) 직후의 명령어(220)로 프로세싱을 복귀시키기 위해 취해지는 복귀 분기(240)로 끝난다. 이러한 예에서 취해진 분기들(200, 218, 240) 이외의 모든 다른 분기 명령어들은 취해지지 않는다. 취해진 분기 명령어들은 비순차적 프로그램 흐름의 지점들을 표현한다. 임의의 2개의 취해진 분기들 사이에서, 중간 명령어들은 순차적으로 실행된다(이들 명령어들 사이에 취해진 분기가 없음을 의미함 - 비순서적 프로세서에서처럼, 중간 명령어들이 프로그램 순서와는 상이한 순서로 실행되는 것은 가능함(명령어(210)가 비순서적으로 명령어(206) 전에 실행되는 경우, 이것은 프로그램 흐름의 비순차적 변경으로 간주되지 않을 것임)).
이러한 예에서, 취해진 분기 명령어(218)는 샘플링 회로부(50)에 의해 샘플링된 동작으로서 선택되며, 이에 따라 프로파일링 회로부(52)는 취해진 분기(218)에 대한 샘플 기록을 캡처한다고 가정된다. 취해진 분기(218)에 대한 샘플 기록은 참조 명령어의 주소를 식별하기 위해 전술된 바와 같은 참조 명령어 주소 패킷을 포함할 수 있으며, 이는 샘플링된 동작(218)과 참조 명령어 사이의 중간 명령어들의 시퀀스에서 제어 흐름이 순차적인(취해진 분기 자체와 연관된 프로그램 흐름의 어떠한 비순차적 변경도 포함하지 않음) 취해진 분기보다 이전의 또는 나중의 명령어이다. 도 7에서 알 수 있는 바와 같이, 분기(218)가 샘플링된 동작으로서 샘플링되는 경우, 참조 명령어는 취해진 분기(218) 이전의 명령어들(202 내지 217) 중 임의의 것 또는 취해진 분기(218) 후의 명령어들(230 내지 240) 중 임의의 것일 수 있다(이는 취해진 분기(218) 자체에 의해 트리거되는 것을 지나 프로그램 흐름의 어떠한 중간 비순차적인 변경도 직면하지 않았음). 그러나, 명령어(200) 또는 명령어들(220 내지 224)은 참조 명령어 주소 패킷에 의해 참조 명령어로서 표시될 수 없는데, 그 이유는, 프로그램 흐름의 중간 비순차적 변경이 있었기 때문이다.
참조 명령어 주소 패킷은 프로파일링 회로부(52)에 의해 캡처된 샘플 기록들이 프로그램 코드의 프로파일 안내 최적화(profile-guided optimization, PGO)를 보조하기 위해 사용될 수 있게 하는 데 유용하다. PGO는 프로그램 런타임 성능을 개선하도록 프로파일링을 사용하기 위해 프로그래머들에 의해 사용되는 기법이다. PGO는 프로그램 코드의 일부 부분들이 다른 것들보다 더 빈번하게 실행됨을 인식하며, 이에 따라, 덜 빈번하게 실행되는 섹션들에 우선하여 더 빈번하게 실행되는 코드 부분들에 대한 성능을 최적화하는 것에 임의의 개발 노력들을 집중하는 것이 가장 효율적일 수 있다. 샘플 기록들이 참조 명령어 주소를 추적하는 능력이 없더라도, 샘플링 회로부(50)에 의해 선택된 체계적으로 샘플링된 명령어들 또는 마이크로 동작들에 기초하는, 프로파일링 회로부(52)에 의해 캡처된 샘플 기록들은 PGO를 보조하는 데 사용될 수 있다. 예를 들어, 프로파일링이 끝난 후, 프로파일링 버퍼(76)는 필터링 회로부에 의해 설정된 필터를 통과한 샘플링된 동작들에 대한 기록들을 포함할 수 있고, 임의의 유형의 명령어와 연관된 샘플 기록들은 샘플링된 동작과 연관된 명령어 주소(프로그램 카운터 또는 PC(program counter))를 특정할 수 있다. 이것은 상이한 명령어들의 상대적인 실행 빈도를 나타내는 핫스팟 프로파일과 같은, 프로그램의 기본 프로파일을 생성하는 데 사용될 수 있다. 프로그래머 또는 컴파일러는, 성능 개선을 위해 집중할 코드의 영역들에 그들을 안내하는 데, 프로파일을 사용할 수 있다.
그러나, 프로파일링할 동작들의 체계적인 샘플링에 대한 쟁점은 프로세싱 회로부에 의해 수행되는 대부분의 동작들이 프로파일링 버퍼(76)에 기입된 샘플 기록들에 의해 추적되지 않는다는 것이다. (샘플링된 동작이 일부 알려지지 않은 분기의 분기 타깃이었을 수 있으므로) 각각의 샘플링된 동작의 PC 주소들에 기초하여, 단일 샘플 기록으로부터, 임의의 이전 명령어들이 아닌, 하나의 특정 명령어가 실행되었다는 것만이 추론될 수 있다. 따라서, 각각의 샘플 기록이 단일 명령어가 실행되었다는 증거만을 제공하는 경우, 이것은, 수집된 샘플들이 상이한 코드 부분들의 상대적인 실행 빈도에 대한 통계적으로 유효한 뷰를 얻기에 충분할 정도로 충분한 정보를 수집하기 위해, 매우 많은 수의 샘플들이 수집될 필요가 있다는 것을 의미하는데, 이는 필요한 데이터율 및 저장 오버헤드를 고려하면, 실용적이지 않을 수 있다.
대조적으로, 다른 유형들의 진단 모니터링 기법은 명령어마다 더 제한된 정보 세트의 캡처를 지원할 수 있다. 예를 들어, 비교를 위해, 마지막 16개의 취해진 분기들에 대한 분기 기록들을 기록하기 위한 저장 요소가 제공되는 트레이스 솔루션을 고려하는데, 여기서 각각의 분기 기록은 2개의 주소들, 즉, 취해진 분기의 명령어 주소 및 취해진 분기의 분기 타깃 주소를 저장한다. 취해진 분기에 직면할 때마다, 가장 오래된 기록은 폐기되고, 최근에 취해진 분기에 대한 기록이 저장 요소에 할당된다. 소정 수의 명령어들의 간격들로(예를 들어, 매 1,000,000개의 명령어들마다), 마지막 16개의 취해진 분기들의 기록이 샘플링되고 메모리에 기입되거나 또는 트레이스 포트를 통해 출력되게 하도록 중단이 생성된다. 명령어들이 초당 1,000,000,000개의 명령어들로 실행되고 있는 경우, 이것은 초당 약 1000개의 샘플들(그리고 따라서 초당 1000개의 중단들)을 생성할 것이다. 평균적으로, 매 10개의 명령어들 중 대략 1개의 명령어가 취해진 분기일 수 있는 것이 일반적이며, 이에 따라, 16개의 취해진 분기들은 대략적으로 약 150개의 명령어들에 걸쳐 있을 수 있다(분기 기록들의 "울타리 기둥(fence-post)" 특성으로 인해, 16개의 분기들로 표현되는 명령어들의 수는 160개가 아님 - 10개의 명령어들의 15개의 블록들 각각이 16개의 취해진 분기들에 의해 경계를 이룰 것임 - 에 주목한다). 따라서, 마지막 16개의 취해진 분기들의 기록은 대략 150개의 명령어들이 실행되었다는 증거를 제공하며, 이는 앞서 논의한 바와 같이 PGO를 위해 핫스팟 프로파일을 개발하는 데 사용될 수 있다. 초당 1000개의 샘플들을 사용하면, 이것은 프로파일이 초당 대략 150,000개의 명령어들에 기초할 수 있음을 의미한다. 각각의 분기 기록이 16 바이트의 데이터(예를 들어, 2개의 64 비트 주소들)인 경우, 각각의 샘플은 256 바이트일 것이며, 이는 약 250 KB/s의 데이터 수집을 의미한다. 그러나, 그러한 간단한 트레이스 솔루션의 문제는 이러한 샘플링이 취해진 분기 명령어의 명령어 주소 및 분기 타깃 주소만을 캡처할 뿐, 임의의 다른 진단 정보를 제공하지 않는다는 것이다.
대신 도 1의 실시예에 설명된 통계적 샘플링 기반 방법을 논의하는 것으로 되돌아가면, 이것은 많은 다른 유형들의 정보가 또한 기록될 수 있다는 이점을 갖는다. 그러나, 이것은 훨씬 더 많은 샘플 기록들을 생성하는 대가를 치른다. 초당 150,000개의 명령어들을 카운트할 수 있는 트레이스 접근법을 핫스팟 프로파일링에 기여하는 것으로서 매칭시킬 수 있게 하기 위해, 이것은 샘플링 회로부(50)가 매 6700개의 명령어들마다 약 1개의 명령어의 샘플링율을 사용하도록 요구할 것이다. 각각의 샘플 기록이 64 바이트를 포함하고(예를 들어, 앞서 설명된 패딩 패킷을 사용하여 달성된 고정된 크기의 포맷을 사용하면 하드웨어 구현물을 단순화할 수 있음) 64 KB 버퍼(76)가 1024개의 샘플들을 보유할 수 있도록 메모리에 할당된다고 가정하면, 이것은, 트레이스 예에 비해, 중단율이 초당 약 145개의 샘플(중단)들로 크게 감소되는 것을 의미하는데, 그 이유는, 중단이 상기 트레이스 솔루션에서와 같이 각각의 샘플에 대해서가 아니라 일단 64 KB 버퍼가 가득 찰 때에만 생성될 필요가 있기 때문이다. 그러나, 통계적 프로파일링 솔루션으로, 데이터율은 초당 9 MB로 크게 증가하고, 이는 트레이스 솔루션보다 거의 40배 더 높다. 이러한 증가된 데이터율에 대한 이유는 샘플당 훨씬 더 큰 정보 세트가 수집되고 있다는 것이며, 통계적 샘플 기반 프로파일링이 통상 비교적 낮은 샘플링율에서 동작할 것으로 예상되지만, 합리적인 PGO 핫스팟 프로파일을 제공하는 데 필요한 샘플들의 수와 매칭할 수 있도록 하기 위해, 샘플링율은 증가될 필요가 있을 것이다. 따라서, 각각의 샘플링된 동작의 PC를 단독으로 캡처하는 것에 기초하여, 샘플 기반 프로파일링 기법들을 사용하여 PGO를 보조하는 것은 어려울 수 있다.
그러나, 중간 프로세싱이 순차적이었던, 프로그램 순서상 샘플링된 동작의 PC보다 이전의 또는 나중의 지점을 마킹하는 참조 명령어 주소로서 제공되는 주소를 인코딩할 수 있는 주소 패킷의 형태를, 샘플링된 동작에 대한 샘플 기록에 포함시키는 능력을 제공함으로써, 이것은, 각각의 샘플 기록이 이제 현재 샘플링된 동작이 실행되었다는 것뿐만 아니라 소정 수의 다른 명령어들도 또한 실행되었다는 증거를 제공할 수 있다는 것을 의미한다(그러한 다른 명령어들에 대한 추가적인 샘플 기록들을 포함시킬 필요 없음). 샘플 기록당 실행이 추론될 수 있는 명령어들의 수를 증가시킴으로써, 이것은 핫스팟 프로파일을 위해, 소정 수의 명령어들의 실행을 추적하는 데 필요한 샘플링된 동작들의 수를 감소시킨다. 이것은 필요한 데이터율을 크게 감소시킬 수 있다.
다시, 이전의 수치 예를 계속하여, 이러한 추가적인 참조 명령어 주소 표시자가 취해진 분기들에 대해 수집된 샘플들에만 포함되었고 가장 최근에 취해진 분기의 분기 타깃 주소를 나타내는 경우, 그리고 필터(24)가 취해진 분기들에 대한 샘플 기록들만이 프로파일링 버퍼(76)에 기입될 수 있게 하도록 구성되는 경우, 샘플링율이 여전히 매 6700개의 명령어들마다 1개의 명령어라고 가정하면, 필터(74)는 약 90%의 샘플링된 동작들을 폐기할 것이지만(10개의 동작들 중 약 1개의 동작이 취해진 동작이라고 가정됨), 이제 각각의 샘플 기록은 샘플링된 명령어를 포함하여 (평균) 10개의 명령어들이 실행되었다는 증거를 제공한다. 따라서, 앞서 설명한 트레이스 솔루션과 경쟁하기 위해, 핫스팟 프로파일을 위해 카운트되는 약 150,000개의 명령어들에 도달하기 위해 10배 더 적은 샘플 기록들이 필요로 된다. 각각의 샘플 기록이 전술한 바와 같이 여전히 64 바이트인 경우, 이러한 접근법은 데이터율을 초당 930 KB로 감소시키는데, 이는 PC 주소만을 사용하는 샘플 기반 프로파일링보다 10배 더 적고 전술한 트레이스 솔루션에 훨씬 더 가깝다. 그러나, 트레이스 솔루션과는 달리, 각각의 샘플 기록은 또한, 예를 들어, 사이클 카운트들, 심지어 마스크들 등을 포함하는 프로세싱된 동작들에 관한 훨씬 더 큰 범위의 정보를 제공했다. 따라서, 이러한 접근법은 다른 유형들의 성능 분석이 PGO 프로파일링에 사용되는 샘플 기록들과 동일한 샘플 기록 세트를 사용하여 수행될 수 있게 하며, 이는 트레이스 솔루션으로는 가능하지 않을 것이다. 따라서, 소프트웨어 개발이 훨씬 더 효율적일 수 있다.
필터 회로부(74)는 어느 샘플 기록들이 진단 분석을 위해 개발자에게 이용가능해지는지를 선택하기 위한 상이한 옵션들을 지원할 수 있고, 필터가 취해진 분기 명령어들에 대한 샘플 기록들만을 선택할 수 있는 하나의 옵션과, 취해진 및 취해지지 않은 분기들 둘 모두가 그들의 샘플 기록들이 필터를 통과하는 다른 필터 설정을 지원할 수 있다. 프로그램 순서상 근처 명령어들의 실행 빈도에 대한 샘플당 가장 많은 양의 정보를 얻기 위해, 주어진 샘플링된 동작에 대해, 프로그램 순서상 가장 최근에 취해진 분기 또는 다음으로 취해진 분기의 위치를 추적하는 것이 바람직할 수 있다고 가정될 수 있는데, 그 이유는, 이것이 실행되는 것으로 추론될 수 있는 중간 명령어들의 범위를 최대화할 수 있기 때문이다. 그러나, 필터가, 취해진 및 취해지지 않은 분기들 둘 모두가 분석을 위해 그들의 샘플 기록들이 출력될 수 있게 하고 취해진 및 취해지지 않은 분기 샘플들 둘 모두가 참조 명령어 주소 표시자를 포함하는 경우, 이것은 캡처된 참조 명령어 주소 표시자들에 기초하여 결정된 핫스팟 프로파일에 통계적 편향을 야기할 수 있다는 것이 실험적으로 관찰되었다. 이유는 하기와 같다.
도 7의 예를 고려하면, 논의를 위해, 취해진 분기(200)와 취해진 분기(218) 사이의 중간 분기들(208, 216)은, 그들이 항상 취해지지 않도록(예를 들어, 분기들(208, 216)은 현재 실행 런에서 발생하지 않았던 희귀 오류 조건들에 대해 테스트되고 있을 수 있음), 일관된 거동을 갖는다고 가정되고, 시퀀스(202 내지 218) 중간에 다른 분기들이 없었으므로, 이러한 코드가 실행되었을 때마다, 코드는 명령어(200)로부터의 분기 후, 로드 명령어(202)로 도달되었다고 가정된다. 분기들(208, 216)은 결코 취해지지 않았기 때문에, 이것은 명령어들(202 내지 218) 모두가 동일한 횟수로 실행되었을 것이고, 이에 따라, 임의의 핫스팟 프로파일이 명령어들(202 내지 218)의 전체 시퀀스에 대해 동일한 실행 카운트들을 나타낼 것임을 의미할 것이다.
필터(74)가 취해진 분기들에 대한 샘플 기록들만 통과시키고, 취해지지 않은 분기들에 대한 샘플 기록들은 폐기하는 경우, 그리고 참조 명령어 주소 표시자가 가장 최근에 취해진 분기의 분기 타깃 주소를 나타내도록 취해진 분기들에 대한 샘플 기록들에 포함되는 경우, 도 8에 도시된 바와 같이, 취해진 분기 명령어(218)에 대한 샘플 기록은 가장 최근에 취해진 분기(200)의 분기 타깃이었던 명령어(202)의 주소를 나타낼 수 있다. 유사하게, 취해진 분기(240)가 샘플링된 동작으로서 선택되었던 경우, 그것의 샘플 기록은 가장 최근에 취해진 분기(218)의 분기 타깃 주소에의 명령어(230)를 나타내는 참조 명령어 주소 표시자를 나타냈을 것이다. 이러한 접근법은, 필터(74)가 취해진 분기 샘플 기록들만이 출력될 수 있게 하고 있을 때 수용가능할 것인데, 그 이유는, 취해진 분기(218)가 샘플링될 때마다, 명령어들(202 내지 218) 모두가 실행된 것으로 추론되어, 핫스팟 프로파일이, 블록(202 내지 218) 내의 하나의 명령어가 블록(202 내지 218) 내의 다른 명령어에 비해 실행되었던 상대적 빈도들의 적당한 표현을 제공할 것이기 때문이다.
그러나, 필터(74)가 대신 진단 분석을 위해 취해진 및 취해지지 않은 분기들 둘 모두에 대한 샘플 기록들이 출력될 수 있도록 설정되었을 경우(그리고 취해진 및 취해지지 않은 샘플들 둘 모두가 가장 최근에 취해진 분기의 분기 타깃을 기록하는 경우), 이것은, 샘플링된 동작이 취해진 분기(218) 또는 이전의 취해지지 않은 분기(216)로서 선택되는지 여부에 관계없이, 샘플 기록이 가장 최근에 취해진 분기의 분기 타깃(202)을 표현하는 동일한 주소를 특정할 것임을 의미할 것이다. 따라서, 취해지지 않은 분기(216)가 샘플링된 경우, 핫스팟 프로파일은 명령어들(202 내지 216)이 실행되었다고 추론할 것이지만, 취해진 분기(218)가 샘플링되는 경우에는, 핫스팟 프로파일이 명령어들(202 내지 217)이 실행되었다고 추론할 것이다. 이것은, 명령어들(202 내지 216)은, 샘플링이 분기(216)를 선택했는지 또는 분기(218)를 선택했는지에 관계없이, 실행되었을 것으로 추론되지만, 명령어(217)는, 취해지지 않은 분기(216)가 샘플링되는 때는 제외하고 취해진 분기(218)가 샘플링되는 때에만 실행되었을 것으로 추론될 것임을 의미할 것이다. 이것은, 분기(216)가 항상 취해지지는 않았기 때문에, 실제로 명령어(217)가 명령어들(202 내지 216)만큼 자주 실행되었더라도, 명령어(217)는 핫스팟 프로파일에서 더 낮은 실행 카운트로 종료될 수 있다는 것을 의미한다. 따라서, 참조 명령어 주소 표시들을 특정하는 취해진 및 취해지지 않은 분기들 둘 모두를 샘플링하지만 이전에 취해진 분기만을 다시 참조하도록 참조 명령어 주소 표시를 사용하는 것은 편향된 프로파일을 생성할 위험이 있다.
이러한 편향은 참조 명령어 주소 표시자를 생성하는 데 사용되는 동작 유형들의 집단이 핫스팟 프로파일에 대한 기초로서 사용되는 동작 유형들의 집단과 매칭하는 것을 보장함으로써 회피될 수 있다. 이것은, 참조 명령어 주소 표시자가, 가장 최근의 분기 후 프로그램 흐름이 지향되었던 명령어를, 참조 명령어로서 나타내는 능력을 지원하는 프로파일링 회로부(52)를 제공함으로써 달성될 수 있다(그러한 분기가 취해진 분기인지 취해지지 않은 분기인지에 관계없이, 그리고 그러한 가장 최근의 분기 자체가 샘플링되었는지 여부에 관계없이). 따라서, 도 9에 도시된 바와 같이, 취해진 분기(218)에 대한 참조 명령어 주소 패킷은 참조 명령어로서, 프로그램 순서상 가장 최근의 취해지지 않은 분기(216) 후의 다음 명령어인 ADD 명령어(217)를 나타낼 수 있다. 대조적으로, 취해지지 않은 분기(216)가 샘플링되었을 경우, 그것의 샘플 기록은 선행하는 취해지지 않은 분기(210) 후의 ADD 명령어(210)의 주소를 참조 명령어 주소 패킷에 나타냈을 것이다. 취해지지 않은 분기(208)가 샘플링되었을 경우, 그것의 샘플 기록은 LD 명령어(202)(프로그램 순서상 가장 최근의 분기(200) 후 프로그램 흐름이 지향되었던 명령어 - 분기(200)가 취해졌으므로, 이어서 참조 명령어는, 취해지지 않은 분기들에 대한 다음의 순차적인 주소에의 명령어가 아니라, 취해진 분기의 분기 타깃 주소에의 명령어임)의 주소를 나타냈을 것이다. 이러한 접근법은, 바로 이어지는 분기가 샘플링되는 경우, 임의의 하나의 명령어만이 실행된 것으로 추론될 것이며, 이는 다른 명령어들에 비해 일부 명령어들에 대한 실행 카운트를 인위적으로 부풀릴 수 있는 다수의 상이한 샘플링된 분기들에 대한 일부 명령어의 "이중 카운팅"을 회피한다는 것을 의미한다.
도 8 및 도 9 및 상기 예들은, 참조 명령어 주소가 이전 분기 후의 다음 명령어 또는 분기 타깃에 기초하여 주소를 추적하는 구현물을 설명한다. 도 10 및 도 11에 도시된 바와 같이, 대안적인 접근법은 모니터링 회로부(70)를 사용하여 프로그램 순서상 샘플링된 동작보다 나중에 있는 참조 명령어를 추적하는 것일 것이다.
도 10에 도시된 바와 같이, 취해지지 않은 분기들이 참조 명령어들로서 사용되지 않는 경우, 참조 명령어 주소 표시자는 샘플링된 취해진 분기 후 다음으로 취해진 분기의 주소를 나타낼 수 있다. 예를 들어, 도 7의 취해진 분기(218)가 샘플링되는 경우, 분기(218)에 대한 샘플 기록은 다음으로 취해진 분기(240)의 주소를 참조 명령어 주소 패킷에 나타낼 수 있다.
대안적으로, 전술한 편향 문제를 회피하기 위해, 취해진 및 취해지지 않은 분기들 둘 모두가 참조 명령어들로서 사용될 경우, 참조 명령어 주소는 프로그램 순서상 샘플링된 동작 후의 다음 분기의 주소(그러한 분기가 취해지는지 또는 취해지지 않는지에 관계없이, 그리고 그러한 분기 자체가 샘플링되는지 여부에 관계없이)를 가리켜야 하며, 이에 따라 도 11에 도시된 바와 같이, 도 7의 예에 대해, 동작(218)에 대한 샘플 기록은 다음의 취해지지 않은 분기 명령어(234)의 주소를 나타낼 수 있다.
취해지지 않은 분기들이 참조 명령어들로서 사용될지 또는 아닐지는 프로파일링 회로부(52)의 구성 레지스터들(78) 내의 구성 정보에 따를 수 있으며, 이는 프로세싱 파이프라인(4) 상에서 실행되는 소프트웨어에 의해 그리고/또는 디버그/트레이스 포트(75)를 통해 디버그 제어 신호들을 제공하는 외부 디버그 유닛에 의해 프로그래밍가능하다. 일례에서, 필터링 회로부(74)에 대한 필터 설정들은 취해지지 않은 분기들이 참조 명령어들로서 사용될지 여부를 제어할 수 있는데, 필터가 취해지지 않은 분기 샘플 기록들이 참조 명령어 주소 표시자를 포함하면서 출력될 수 있게 하는 경우, 취해지지 않은 분기들은 참조 명령어들로서 취급될 수 있지만, 필터가 취해지지 않은 분기 샘플 기록들이 진단 분석을 위해 출력되는 것을 방지하는 경우, 취해지지 않은 분기들은 참조 명령어들로서 취급될 필요가 없다.
그러나, 다른 예에서, 구성 레지스터들(78)은 필터(74)에 대한 제어들과 함께, 어떤 유형들의 명령어들이 참조 명령어로서 기능할 수 있는지 정의하기 위한 제어들을 포함할 수 있고, 수행되고 있는 분석의 유형에 따라 합리적인 조합들을 생성하는 것은 소프트웨어에 남겨질 수 있다. 예를 들어, 필터 설정들과 참조 명령어 정의들의 비매칭된 조합들이 앞서 논의된 편향을 생성할 수 있지만, 그럼에도 불구하고, 프로파일링을 행하는 분석 소프트웨어가 프로파일을 생성할 때 신뢰할 수 없는 정보를 무시하도록 주의를 기울이면, 그러한 비매칭된 조합들에 따라 샘플 기록들을 출력하는 것은 문제가 되지 않을 수 있다. 예를 들어, 각각의 샘플이 필터에 의해 폐기될 프로파일링 정보(이벤트들, 레이턴시들 등)를 포함하기 때문에, 전체 범위의 동작들이 샘플링되도록, 소프트웨어는 필터(74)를 완전히 디스에이블링시키기를 원할 수 있다. 편향되지 않은 핫스팟 프로파일을 생성하기 위해, 소프트웨어는, 출력된 샘플 기록들이 다른 목적들을 위해 사용되고 있는 취해지지 않은 분기들에 대한 샘플 기록들을 또한 포함하더라도, 취해진 분기들에 대한 샘플 기록들에 출력된 참조 명령어 주소 패킷들만을 선택하도록 주의할 수 있다. 따라서, 소프트웨어는 참조 주소 기준들 및 필터링 기준들을 독립적으로 제어할 수 있기를 원할 수 있다. 소프트웨어가 편향되지 않은 프로파일들을 획득할 수 있게 하는 프로세싱 장치(2)에 대한 아키텍처를 제공하기 위해, 프로파일링 회로부(52)가 취해지지 않은 분기들을 참조 명령어들로서 취급할 수 있게 하기 위한 지원이 있음을 보장하는 것이 (이것이 소프트웨어에 의해 요구되는 경우) 충분할 수 있지만, 이러한 기능성을 항상 사용하거나 그것이 임의의 특정 필터 설정 세트에 사용되는 것을 요구하는 것이 필수는 아니다.
도 7 내지 도 11의 예에서, 선택된 경우, 참조 명령어 주소 패킷들은 분기 명령어들에 대해서만 포함되고, 다른 유형들의 샘플링된 동작에 대해서는 포함되지 않는다. 다른 동작들이, 샘플링된 동작으로서 선택된 경우, 또한 참조 명령어 주소를 추적할지 여부는 선택적이다.
도 12 및 도 13은, 참조 명령어가 주어진 명령어 자체이거나(주어진 명령어가 가장 최근에 취해진 또는 취해지지 않은 분기에 바로 이어지는 경우) 또는 프로그램 순서상 주어진 명령어보다 이전의 명령어인 예에서, 샘플 기록에 대한 참조 명령어 주소를 설정하기 위한 방법들을 예시하는 흐름도들을 도시한다. 이러한 접근법으로, 모니터링 회로부(70)는 샘플링된 동작에 대해 캡처된 샘플 기록에 대한 참조 명령어 주소 표시자를 설정하는 데 사용되는 추적된 명령어 표시자를 저장하기 위한 저장 요소를 포함할 수 있다. 다양한 유형들의 재설정 이벤트가 추적된 명령어 표시자로 하여금 업데이트되게 하고, 이어서 후속하는 샘플링된 동작이 발생할 때, 참조 명령어 주소 표시자는 추적된 명령어 표시자에 기초하여 설정될 수 있다.
도 12는 추적된 명령어 표시자의 유지를 도시한다. 단계(300)에서, 모니터링 회로부(70)는 취해진 분기가 실행 스테이지(12)에 의해 프로세싱되었는지 여부를 결정하고, 그러한 경우, 단계(302)에서 추적된 명령어 표시자가 재설정되어 유효한 것으로 표시된다. 추적된 명령어 표시자는 상이한 방식들로 표현될 수 있다. 일례에서, 추적된 명령어 표시자는 주소를 직접 식별할 수 있다. 이러한 경우, 단계(302)에서, 추적된 명령어 표시자는 취해진 분기 다음의 명령어의 주소(즉, 취해진 분기의 분기 타깃 주소)로 설정될 수 있다. 그러나, 다른 접근법은, 추적된 명령어 표시자가 재설정된 추적된 명령어 표시자가 재설정되었던 지점 이후에 프로세싱되는 명령어들의 수를 카운트하기 위한 카운터로서 작용하는 것일 수 있다. 그러한 실시예에서, 단계(302)에서, 추적된 명령어 표시자는 0으로 재설정될 수 있다. 후속하는 명령어들이 프로세싱됨에 따라, 카운터는 각각의 후속적으로 프로세싱되는 명령어에 응답하여 증가될 수 있다.
어떠한 취해진 분기에도 직면하지 않는 경우, 단계(304)에서, 취해지지 않은 분기가 프로세싱되는지 여부가 결정되고, 취해지지 않은 분기가 참조 명령어로서 사용될 것이다(예를 들어, 이것은 (a) 필터링 회로부(74)에 의해 적용되고 있는 필터 기준들이 취해지지 않은 분기들에 대한 샘플 기록들이 진단 분석에 이용가능해질 수 있다고 특정할 때, 그리고 (b) 취해지지 않은 분기에 대한 샘플 기록이 참조 명령어 주소 표시자를 특정할 수 있을 때일 수 있음). 그러한 경우, 단계(302)에서, 전술된 바와 같이 프로그램 순서상 취해지지 않은 분기에 바로 이어지는 다음 명령어의 주소를 나타내도록 추적된 명령어 표시자를 설정함으로써 또는 카운터를 0으로 재설정함으로써, 추적된 명령어 표시자는 재설정되고 유효해진다. 이것은, 전술된 왜곡 문제를 회피하기 위해, 가장 최근의 분기가 취해지지 않은 분기였던 샘플링된 취해진/취해지지 않은 분기 동작이 가장 최근에 취해진 분기의 분기 타깃 주소보다는, 가장 최근의 취해지지 않은 분기 후의 명령어를 나타내는 그것의 참조 명령어 주소 표시자를 가질 것임을 보장한다.
그렇지 않으면, 단계(308)에서, 프로파일링이 디스에이블링되었던 이전 실행 기간 후에, 프로파일링이 새롭게 인에이블링되었는지 여부가 결정된다. 때때로 개발자들은 전체 프로그램에 대한 샘플 기록들을 모으는 데에는 관심이 없을 수 있지만, 소정 섹션들에 집중하기를 원할 수 있다. 따라서, 프로파일링 회로부(52)는 구성 레지스터(78) 내의 사용자 구성 정보에 기초하여 설정된 소정의 미리구성된 명령어 주소들에서 프로파일링이 인에이블링 또는 디스에이블링되는 능력을 지원할 수 있다. 프로파일링이 새롭게 인에이블링될 때, 추적된 명령어 표시자 내의 어떠한 정보도 신뢰할 수 없을 수 있고, 따라서, 이러한 시점에, 단계(302)에서, 추적된 명령어 표시자는, 예를 들어, 프로파일링이 인에이블링되었던 지점을 표현하는 명령어의 주소를 나타내도록 추적된 명령어 표시자를 업데이트함으로써 또는 카운터를 0으로 재설정함으로써 재설정될 수 있다.
단계(310)에서, 모니터링 회로부는 예외가 취해지는지 여부를 결정할 수 있고, 그러한 경우, 단계(302)로 진행하여, 예를 들어, 예외가 취해졌던 시점에서의 명령어의 주소를 나타내도록 명령어 주소를 설정함으로써, 또는 카운터를 0으로 재설정함으로써, 추적된 명령어 표시자를 재설정할 수 있다. 유사하게, 단계(312)에서 예외 복귀가 발생하는 경우, 추적된 명령어 표시자는, 예를 들어, 예외 복귀 주소(예외가 프로세싱을 복귀시키는 명령어의 주소)를 나타내도록 명령어 주소를 설정함으로써 단계(302)에서 재설정될 수 있다. 이것은 중단되었던 프로그램이 프로파일링 중임을 표현하지 않는 예외 처리기의 프로세싱 동안 수행되는 동작들에 의해 추적된 명령어 표시자가 왜곡되는 것을 방지한다.
단계들(300 내지 312)에서 검사된 모든 유형들의 이벤트들이 주어진 구현물에 적용가능한 것은 아닐 수 있으며 일부 구현물들은 이들 이벤트들의 서브세트에 대해서만 검사할 수 있다는 점이 이해될 것이다. 또한, 도 12가 소정 순서로 수행되는 순차적인 일련의 검사들을 도시하지만, 다른 구현물들은 이들 검사들을 상이한 순서로 수행할 수 있거나, 또는 다수의 검사들을 병렬로 수행할 수 있다는 것이 이해될 것이다.
도 12의 예에서, 단계(302)에서, 추적된 명령어 표시자는 재설정되지만 유효하게 유지된다. 점선들로 도시된 바와 같이, 대안물은 단계들(308, 310, 또는 312)에서 검출된 이벤트들 중 하나가 발생하는 경우, 단계(306)에서 추적된 명령어 표시자가 무효화될 수 있다는 것일 수 있다. 샘플링된 동작이 프로세싱될 때 추적된 명령어 표시자가 무효인 경우, 샘플 기록은 참조 명령어 주소 표시자를 생략하거나 참조 명령어 주소 표시자가 무효하다는 표시를 포함할 수 있다.
전술한 바와 같이, 일부 구현물들에서, 샘플링된 동작 자체의 프로세싱은 또한 추적된 명령어 표시자로 하여금 재설정되거나 또는 무효화되게 할 수 있다.
도 13은 샘플 기록에 대한 참조 명령어 주소 표시자를 설정하기 위해 추적된 명령어 표시자가 사용될 수 있는 방법을 도시하는 흐름도이다. 단계(320)에서, 프로파일링 회로부(52)는 샘플링된 동작이 프로세싱되는지 여부를 검출한다. 샘플링된 동작이 검출될 때, 모니터링 회로부(70)는 샘플링된 동작의 거동에 관한 정보를 모은다. 단계(322)에서, 샘플링된 동작에 의해 표현되는 특정 동작 유형에 대해, 참조 명령어 주소 표시자의 포함이 지원되고 인에이블링되는지 여부가 결정된다. 참조 명령어 주소 표시자의 포함은 모든 유형들의 샘플링된 동작에 대해서 지원되는 것은 아닐 수 있다. 예를 들어, 일부 예들에서, 참조 명령어 주소 표시자는 분기 동작들에 대한 또는 (구현물 선택에 따라) 취해지지 않은 분기들은 제외하고 단지 취해진 분기들에 대한 샘플 기록들에만 포함될 수 있다. 참조 명령어 주소 표시자의 포함이 지원되는 그들 동작 유형들 중에서도, 구성 레지스터(78)는 참조 명령어 주소 표시자의 포함을 인에이블링할지 또는 디스에이블링할지를 나타내는 구성 데이터를 특정할 수 있다. 따라서, 샘플 동작으로서 선택된 현재 동작이 참조 명령어 주소 표시자가 지원되는 유형의 것이 아니거나, 또는 구성 데이터가 참조 명령어 주소 표시자가 포함되지 않아야 한다고 나타내는 경우, 단계(324)에서 참조 명령어 주소 표시자는 샘플 기록으로부터 생략된다.
참조 명령어 주소 표시자가 현재 샘플링된 동작에 대한 샘플 기록에 포함될 경우, 단계(326)에서, 프로파일링 회로부(52)는 도 12에 설명된 바와 같이 유지되는 추적된 명령어 표시자가 현재 유효한지 여부를 결정하고, 그러지 않은 경우, 다시 참조 명령어 주소 표시자가 단계(324)와 유사하게 생략될 수 있거나, 또는 대안적으로 샘플 기록이 참조 주소 명령어 표시자가 무효하다는 명시적 표시를 포함할 수 있다. 무효한 참조 주소를 나타내거나 그것을 완전히 생략하기 위한 지원을 제공함으로써, 이것은 참조 주소로서 부적절한 주소들을 포함함으로써 야기되는 프로파일들에 대한 통계적 편향을 회피한다.
한편, 추적된 명령어 표시자가 유효한 경우, 단계(328)에서 유효한 참조 명령어 주소 표시자가 샘플링된 동작에 대한 샘플 기록에 포함되며, 이때, 참조 명령어 주소 표시자의 값은 추적된 명령어 표시자에 기초하여 설정된다. 참조 명령어 주소 표시자의 특정 포맷은 다양할 수 있다. 추적된 명령어 표시자가 특정 명령어의 주소를 나타내는 경우, 도 8 내지 도 11의 예들과 유사하게, 이것은 참조 명령어 주소 표시자로서 명시적으로 출력될 수 있으며, 이에 따라, 참조 명령어 주소 표시자는 참조 명령어 주소의 절대 값을 나타내게 된다. 대안물은 샘플링된 동작 자체와 연관된 명령어의 명령어 주소(PC)에 관련하여 계산된 상대적인 주소로서 참조 명령어 주소 표시자를 나타냄으로써 샘플 기록을 압축하는 것일 수 있다. 추적된 명령어 표시자에 설정된 참조 주소와 샘플링된 동작과 연관된 현재 프로그램 카운터 주소 사이의 차이가 결정되어 참조 명령어 주소 표시자로서 인코딩될 수 있다. 다른 옵션은, 전술한 바와 같이, 추적된 명령어 표시자가 카운터가 재설정된 이후로 프로세싱된 명령어들의 수를 카운트하는 명령어 카운트인 경우, 참조 명령어 주소 표시자가 추적된 명령어 표시자에 의해 표현되는 명령어 카운트와 동일하게 설정될 수 있는 것이다. 취해진 특정 형태에 관계없이, 참조 명령어 주소 표시자는 중간 명령어들의 실행이 순차적이었던 프로그램 순서상 이전 명령어의 포지션의 결정을 가능하게 하는 정보를 제공한다.
도 14는, 참조 주소에 의해 표시된 참조 명령어가 프로그램 순서상 샘플링된 동작보다 나중 명령어인 명령어일 수 있는 실시예들에서, 참조 주소를 추적하기 위한 대안적인 접근법을 도시한다. 예를 들어, 참조 명령어는 샘플링된 동작 후에 다음으로 취해진 또는 취해지지 않은 분기 또는 앞서 논의된 재설정 이벤트들(프로파일링의 인에이블링, 예외가 취해짐, 예외 복귀) 중 하나가 발생하는 명령어일 수 있다. 이러한 접근법으로, 분기에 직면할 때마다 재설정되는 추적된 명령어 표시자를 유지할 필요가 없다. 대신에, 모니터링 회로부(70)는 샘플링된 동작이 검출되기를 기다리고, 이어서 참조 주소 표시자를 설정하기 위해 다음 관련 이벤트를 모니터링할 수 있다.
따라서, 단계(350)에서, 모니터링 회로부(70)는 샘플링된 동작이 식별되었는지 여부를 검출하고, 그렇지 않은 경우, 샘플링 회로부(52)에 의해 선택된 다음 샘플링된 동작이 식별되기를 기다린다. 일단 샘플링된 동작이 식별되면, 단계(352)에서, (도 13의 단계(322)에서와 같이) 샘플 기록에 참조 명령어 주소 표시자를 포함시키는 것이 샘플링된 동작에 대응하는 동작 유형에 대해 지원되고 인에이블링되는 것 둘 모두가 지원되는지 여부가 결정된다. 참조 명령어 주소 표시자의 포함이 현재 샘플링된 동작에 대해 지원되지 않거나 또는 현재 디스에이블링되는 경우, 방법은 단계(350)로 복귀하여 나중의 샘플링된 동작을 기다린다. 이러한 시나리오에서, 샘플링된 동작에 대한 샘플 기록에 다른 정보가 여전히 포함될 수 있다는 것이 이해될 것이다.
참조 명령어 주소 표시자의 포함이 샘플링된 동작으로서 검출된 현재 동작 유형에 대해 지원되고 인에이블링되는 둘 모두가 지원되는 경우, 단계(354)에서 모니터링 회로부(70)는 다음 중 임의의 하나의 다음 발생을 모니터링한다: 취해진 분기; 취해지지 않은 분기(구성 정보(78)가 취해지지 않은 분기들이 참조 명령어로서 기능해야 한다고 특정하는 경우); 프로파일링이 디스에이블링되었을 때의 이전 기간 후의 프로파일링의 인에이블링; 예외가 취해짐; 또는 예외 복귀 이벤트(그리고 일부 구현물들에서, 다른 샘플링된 동작의 프로세싱, 그렇지만, 실제로 다음 샘플링된 동작이 검출되기 전에 다른 유형들의 이벤트 중 어느 것도 발생하지 않았을 가능성은 비교적 적음). 이들 이벤트들 중 임의의 것이 발생하는 경우, 단계(356)에서 다음 발생이 분기였는지 여부가 결정되고, 그러한 경우, 단계(358)에서 유효한 참조 명령어 주소 표시자가 정보를 나타내는 샘플링된 동작에 대한 샘플 기록에 포함된다. 예를 들어, 표시된 참조 명령어 주소는 직접적으로 분기의 명령어 주소를 절대 값으로서 또는 샘플링된 동작과 연관된 명령어의 주소에 관련된 상대 값으로서 나타낼 수 있거나, 표시된 참조 명령어 주소는 샘플링된 동작과 분기 사이의 명령어들의 수의 카운트를 나타낼 수 있다(카운터가 사용되는 경우, 카운터는 단계(350)에서 샘플링된 동작이 검출될 때 재설정될 수 있음).
단계(354)에 도시된 목록 중에서 발생한 이벤트가 분기 이외의 이벤트인 경우, 단계(360)에서, 참조 명령어 주소 표시자는 발생된 이벤트와 연관된 참조 명령어의 참조 주소를 나타내면서 샘플 기록에 포함될 수 있다. 참조 주소는 절대 값, 상대 값, 또는 샘플링된 동작의 명령어와 단계(354)에서 검출된 이벤트와 연관된 지점의 명령어 사이의 명령어들의 수를 나타내는 카운트로서 표시될 수 있다. 참조 주소는 프로파일링이 인에이블링되었거나, 예외가 취해졌던 지점을 표현하는 명령어의 주소일 수 있거나, 또는 예외 복귀 주소에 대응할 수 있다. 대안적으로, 유효한 참조 명령어 주소 표시자를 나타내는 대신, 단계(360)에서 참조 명령어 주소 표시자는 샘플 기록으로부터 생략되거나 무효로 표시될 수 있다.
본 발명의 예시적인 실시예들이 첨부 도면들을 참조하여 본 명세서에 상세히 설명되었지만, 본 발명은 그러한 정확한 실시예들로 제한되지 않는다는 것 그리고 첨부된 청구범위에 의해 정의되는 바와 같은 본 발명의 범주로부터 벗어나지 않으면서 당업자에 의해 다양한 변경들, 및 수정들이 이루어질 수 있다는 것이 이해될 것이다.

Claims (24)

  1. 장치로서,
    캐시 또는 메모리로부터 페칭된 명령어들 또는 상기 명령어들로부터 디코딩된 마이크로 동작들에 응답하여 데이터 프로세싱 동작들을 수행하기 위한 프로세싱 회로부;
    프로파일링될 샘플링된 동작들로서 명령어들 또는 마이크로 동작들의 서브세트를 선택하기 위한 샘플링 회로부; 및
    상기 샘플링 회로부에 의해 샘플링된 동작으로서 선택된 명령어 또는 마이크로 동작의 프로세싱에 응답하여, 상기 샘플링된 동작의 동작 유형 및 상기 샘플링된 동작에 직접적으로 기인하는 상기 샘플링된 동작의 거동에 관한 정보를 특정하는 샘플 기록을 캡처하기 위한 프로파일링 회로부를 포함하고,
    상기 프로파일링 회로부는 주어진 명령어에 대응하는 샘플링된 동작에 대해 캡처된 상기 샘플 기록에, 프로그램 순서상 상기 주어진 명령어보다 이전에 또는 나중에 나타나는 참조 명령어의 주소를 나타내는 참조 명령어 주소 표시자를 포함시킬 수 있고, 이 경우, 제어 흐름은 프로그램 순서상 상기 참조 명령어와 상기 주어진 명령어 사이에 발생하는 임의의 명령어들 사이에서 순차적인, 장치.
  2. 제1항에 있어서, 상기 프로파일링 회로부는 프로그램 순서상 상기 주어진 명령어보다 이전에 나타나는 이전 명령어의 주소를 나타내도록 상기 참조 명령어 주소 표시자를 설정할 수 있고, 이 경우, 제어 흐름은 상기 이전 명령어에서부터 상기 주어진 명령어까지 순차적인, 장치.
  3. 제1항 또는 제2항에 있어서, 상기 프로파일링 회로부는 프로그램 순서상 상기 주어진 명령어보다 나중에 나타나는 나중 명령어의 주소를 나타내도록 상기 참조 명령어 주소 표시자를 설정할 수 있고, 이 경우, 제어 흐름은 상기 주어진 명령어 후의 다음 명령어에서부터 상기 나중 명령어까지 순차적인, 장치.
  4. 제1항 내지 제3항 중 어느 한 항에 있어서, 상기 프로파일링 회로부는 상기 주어진 명령어 전에 가장 최근에 취해진 분기 명령어의 분기 타깃 주소 또는 상기 주어진 명령어 후에 다음으로 취해진 분기 명령어의 명령어 주소를 나타내도록 상기 참조 명령어 주소 표시자를 설정할 수 있는, 장치.
  5. 제1항 내지 제4항 중 어느 한 항에 있어서, 상기 프로파일링 회로부는:
    상기 주어진 명령어 전의 가장 최근의 분기 명령어가 취해졌는지 또는 취해지지 않았는지에 관계없이, 상기 가장 최근의 분기 명령어 후의 프로그램 흐름이 지향되는 명령어; 또는
    상기 주어진 명령어 후의 다음 분기 명령어가 취해지는지 또는 취해지지 않는지에 관계없이, 상기 다음 분기 명령어의 명령어 주소,
    중 하나의 명령어 주소를 나타내도록 상기 참조 명령어 주소 표시자를 설정할 수 있는, 장치.
  6. 제1항 내지 제5항 중 어느 한 항에 있어서, 상기 프로파일링 회로부는:
    상기 주어진 명령어 전에 가장 최근에 취해진 분기 명령어의 분기 타깃 주소에서의 명령어; 및
    상기 주어진 명령어 후에 다음으로 취해진 분기 명령어의 명령어 주소,
    중 임의의 것 이외의 명령어의 주소를 나타내도록 상기 참조 명령어 주소 표시자를 설정할 수 있는, 장치.
  7. 제1항 내지 제6항 중 어느 한 항에 있어서, 상기 프로파일링 회로부는 상기 주어진 명령어에 대한 상기 참조 명령어 주소 표시자에 의해 표시될 상기 주소로서, 상기 주어진 명령어 전의 가장 최근의 명령어 주소 재설정 이벤트 또는 상기 주어진 명령어 후의 다음 명령어 주소 재설정 이벤트와 연관된 주소를 설정하도록 구성되고,
    상기 프로파일링 회로부는 상기 참조 명령어 주소 재설정 이벤트로서, 취해진 분기 동작의 프로세싱을 검출하도록 구성되는, 장치.
  8. 제7항에 있어서, 상기 프로파일링 회로부는 또한, 상기 참조 명령어 주소 재설정 이벤트로서, 취해지지 않은 분기 동작의 프로세싱을 검출하도록 구성되는, 장치.
  9. 제8항에 있어서, 상기 프로파일링 회로부는 소프트웨어에 의해 또는 외부 디바이스에 의해 구성가능한 구성 정보에 기초하여, 상기 취해지지 않은 분기 동작의 프로세싱이 상기 명령어 주소 재설정 이벤트로서 검출되어야 하는지 여부를 결정하도록 구성되는, 장치.
  10. 제7항 내지 제9항 중 어느 한 항에 있어서, 상기 프로파일링 회로부는 또한 상기 참조 명령어 주소 재설정 이벤트로서:
    프로파일링이 이전에 디스에이블링된 후의 상기 프로파일링 회로부에 의한 프로파일링의 인에이블링;
    예외를 취하는 것;
    예외로부터 복귀하는 것; 및
    상기 샘플링 회로부에 의해 선택된 샘플링된 동작의 프로세싱,
    중 하나 이상을 검출하도록 구성되는, 장치.
  11. 제7항 내지 제10항 중 어느 한 항에 있어서, 참조 명령어 주소 무효화 이벤트가 상기 가장 최근의 명령어 주소 재설정 이벤트와 상기 주어진 명령어 사이에서 또는 상기 주어진 명령어와 상기 다음 명령어 주소 재설정 이벤트 사이에서 발생할 때, 상기 프로파일링 회로부는 상기 샘플 기록으로부터 상기 참조 명령어 주소 표시자를 생략하도록 또는 상기 참조 명령어 주소 표시자가 무효하다고 상기 샘플 기록에 표시하도록 구성되는, 장치.
  12. 제11항에 있어서, 상기 참조 명령어 주소 무효화 이벤트는:
    상기 샘플링 회로부에 의해 선택된 샘플링된 동작의 프로세싱;
    프로파일링이 이전에 디스에이블링된 후의 상기 프로파일링 회로부에 의한 프로파일링의 인에이블링;
    예외를 취하는 것; 및
    예외로부터 복귀하는 것,
    중 하나를 포함하는, 장치.
  13. 제1항 내지 제12항 중 어느 한 항에 있어서, 상기 프로파일링 회로부는, 적어도 상기 주어진 명령어가 취해진 또는 취해지지 않은 분기 명령어일 때, 상기 주어진 명령어에 대응하는 상기 샘플링된 동작에 대해 캡처된 상기 샘플 기록에 상기 참조 명령어 주소 표시자를 포함시킬 수 있는, 장치.
  14. 제1항 내지 제13항 중 어느 한 항에 있어서, 상기 프로파일링 회로부는, 프로파일링 구성 정보가 상기 참조 명령어 주소 표시자의 캡처가 디스에이블링되어 있다고 특정할 때, 상기 샘플 기록으로부터 상기 참조 명령어 주소 표시자를 생략하도록 구성되는, 장치.
  15. 제1항 내지 제14항 중 어느 한 항에 있어서, 상기 샘플 기록은 하나 이상의 패킷들을 포함하고,
    상기 프로파일링 회로부는 상기 샘플링된 동작과 연관된 주소를 특정하기 위해 주소 패킷에 상기 참조 명령어 주소 표시자를 포함시키도록 구성되고, 상기 주소 패킷은 상기 샘플링된 동작과 연관된 주소의 유형을 식별하기 위한 주소 유형 표시자를 특정하는 패킷 헤더를 포함하고,
    상기 주소 유형 표시자는 복수의 유효한 인코딩들을 갖고, 상기 인코딩들은,
    상기 주소 패킷이 상기 참조 명령어 주소 표시자를 특정한다는 것을 나타내는 참조 명령어 주소 인코딩; 및
    상기 주소 패킷이 상기 참조 명령어 주소 표시자 이외의 주소를 특정한다는 것을 나타내는 적어도 하나의 다른 인코딩을 포함하는, 방법.
  16. 제1항 내지 제15항 중 어느 한 항에 있어서, 상기 프로파일링 회로부에 의해 캡처된 상기 샘플 기록을 메모리에 기입하기 위한 샘플 기록 기입 회로부를 포함하는, 장치.
  17. 제16항에 있어서, 상기 프로세싱 회로부가 중단되지 않은 프로세싱을 계속하는 동안, 상기 샘플 기록 기입 회로부는 상기 프로파일링 회로부에 의해 캡처된 상기 샘플 기록들을 메모리에 기입하도록 구성되는, 장치.
  18. 제16항 또는 제17항에 있어서, 상기 샘플링된 동작이 적어도 하나의 필터 기준을 충족하는지 여부에 기초하여, 상기 샘플 기록 기입 회로부가 상기 샘플링된 동작에 대해 상기 프로파일링 회로부에 의해 캡처된 상기 샘플 기록을 메모리에 기입해야 하는지 여부를 결정하기 위한 필터링 회로부를 포함하는, 장치.
  19. 제8항, 제11항 및 제18항 중 어느 한 항에 있어서, 상기 필터링 회로부는 상기 적어도 하나의 필터 기준 중 하나로서, 상기 주어진 샘플 기록에 대응하는 상기 샘플링된 동작이 취해진 분기 동작이라는 기준을 특정하도록 구성가능한, 장치.
  20. 제8항, 제11항, 제18항 및 제19항 중 어느 한 항에 있어서, 상기 필터링 회로부는 상기 적어도 하나의 필터 기준 중 하나로서, 상기 주어진 샘플 기록에 대응하는 상기 샘플링된 동작이 취해진 분기 동작이라는 또는 취해지지 않은 분기 동작이라는 기준을 특정하도록 구성가능한, 장치.
  21. 제1항 내지 제20항 중 어느 한 항에 있어서, 상기 샘플링 회로부는 간격 카운터에 의해 카운트된 샘플링 간격의 경과에 응답하여 다음 샘플링된 동작을 선택하도록 구성되는, 장치.
  22. 제21항에 있어서, 상기 샘플링 간격의 랜덤 섭동(random perturbation)이 인에이블링될 때, 상기 프로파일링 회로부는 상기 간격 카운터에 의해 카운트된 상기 샘플링 간격에 랜덤 또는 의사랜덤 섭동을 적용하도록 구성되는, 장치.
  23. 제1항 내지 제22항 중 어느 한 항에 있어서, 상기 참조 명령어 주소 표시자는:
    상기 참조 명령어의 주소의 절대 값;
    상기 주어진 명령어 및 상기 참조 명령어 중 하나의 명령어의 주소의, 상기 주어진 명령어 및 상기 참조 명령어 중 다른 하나의 명령어의 주소에 대한 상대적 오프셋; 및
    상기 주어진 명령어와 상기 참조 명령어 사이의 명령어들의 수,
    중 하나를 특정하는, 장치.
  24. 방법으로서,
    캐시 또는 메모리로부터 페칭된 명령어들 또는 상기 명령어들로부터 디코딩된 마이크로 동작들에 응답하여 데이터 프로세싱 동작들을 수행하는 단계;
    프로파일링될 샘플링된 동작들로서 명령어들 또는 마이크로 동작들의 서브세트를 선택하는 단계; 및
    상기 샘플링 회로부에 의해 샘플링된 동작으로서 선택된 명령어 또는 마이크로 동작의 프로세싱에 응답하여, 상기 샘플링된 동작의 동작 유형 및 상기 샘플링된 동작에 직접적으로 기인하는 상기 샘플링된 동작의 거동에 관한 정보를 특정하는 샘플 기록을 캡처하는 단계를 포함하고,
    상기 프로파일링 회로부는 주어진 명령어에 대응하는 샘플링된 동작에 대해 캡처된 상기 샘플 기록에, 프로그램 순서상 상기 주어진 명령어보다 이전에 또는 나중에 나타나는 참조 명령어의 주소를 나타내는 참조 명령어 주소 표시자를 포함시킬 수 있고, 이 경우, 제어 흐름은 프로그램 순서상 상기 참조 명령어와 상기 주어진 명령어 사이에 발생하는 임의의 명령어들 사이에서 순차적인, 방법.
KR1020227044786A 2020-05-22 2021-05-20 프로세싱 회로부에 의해 프로세싱된 샘플링된 동작들의 프로파일링 KR20230013124A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB2007666.7 2020-05-22
GB2007666.7A GB2595303B (en) 2020-05-22 2020-05-22 Profiling of sampled operations processed by processing circuitry
PCT/GB2021/051214 WO2021234387A1 (en) 2020-05-22 2021-05-20 Profiling of sampled operations processed by processing circuitry

Publications (1)

Publication Number Publication Date
KR20230013124A true KR20230013124A (ko) 2023-01-26

Family

ID=71406359

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020227044786A KR20230013124A (ko) 2020-05-22 2021-05-20 프로세싱 회로부에 의해 프로세싱된 샘플링된 동작들의 프로파일링

Country Status (8)

Country Link
US (1) US20230088780A1 (ko)
EP (1) EP4154118A1 (ko)
JP (1) JP2023526554A (ko)
KR (1) KR20230013124A (ko)
CN (1) CN115698957A (ko)
GB (1) GB2595303B (ko)
IL (1) IL297785A (ko)
WO (1) WO2021234387A1 (ko)

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5151981A (en) * 1990-07-13 1992-09-29 International Business Machines Corporation Instruction sampling instrumentation
US6163840A (en) * 1997-11-26 2000-12-19 Compaq Computer Corporation Method and apparatus for sampling multiple potentially concurrent instructions in a processor pipeline
US9747108B2 (en) * 2015-03-27 2017-08-29 Intel Corporation User-level fork and join processors, methods, systems, and instructions
US9965375B2 (en) * 2016-06-28 2018-05-08 Intel Corporation Virtualizing precise event based sampling
GB2553582B (en) * 2016-09-13 2020-07-08 Advanced Risc Mach Ltd An apparatus and method for generating and processing a trace stream indicative of instruction execution by processing circuitry

Also Published As

Publication number Publication date
IL297785A (en) 2022-12-01
GB2595303B (en) 2024-04-17
JP2023526554A (ja) 2023-06-21
CN115698957A (zh) 2023-02-03
WO2021234387A1 (en) 2021-11-25
US20230088780A1 (en) 2023-03-23
GB202007666D0 (en) 2020-07-08
EP4154118A1 (en) 2023-03-29
GB2595303A (en) 2021-11-24

Similar Documents

Publication Publication Date Title
US10261792B2 (en) Method and apparatus for obtaining a call stack to an event of interest and analyzing the same
CN109313567B (zh) 虚拟化精确的基于事件的采样的设备和方法
EP0919918B1 (en) Apparatus for randomly sampling instructions in a processor pipeline
EP0919924B1 (en) Apparatus for sampling multiple concurrent instructions in a processor pipeline
EP0919922B1 (en) Method for estimating statistics of properties of interactions processed by a processor pipeline
US8286032B2 (en) Trace messaging device and methods thereof
US5923872A (en) Apparatus for sampling instruction operand or result values in a processor pipeline
US5809450A (en) Method for estimating statistics of properties of instructions processed by a processor pipeline
US6195748B1 (en) Apparatus for sampling instruction execution information in a processor pipeline
US20030135719A1 (en) Method and system using hardware assistance for tracing instruction disposition information
US20070079294A1 (en) Profiling using a user-level control mechanism
US9454462B2 (en) Run-time instrumentation monitoring for processor characteristic changes
CN108475236B (zh) 测量地址转换延迟
US20090037886A1 (en) Apparatus and method for evaluating a free-running trace stream
GB2487251A (en) Separate trace indications for the execution of a conditional instruction and for the result of the condition
US7454666B1 (en) Real-time address trace generation
EP2810170B1 (en) Run-time instrumentation indirect sampling by address
US20030135718A1 (en) Method and system using hardware assistance for instruction tracing by revealing executed opcode or instruction
CN108027762B (zh) 生成和处理指示处理电路的指令执行的跟踪流的装置和方法
US20150248295A1 (en) Numerical stall analysis of cpu performance
KR20230013124A (ko) 프로세싱 회로부에 의해 프로세싱된 샘플링된 동작들의 프로파일링
Carnà et al. Strategies and software support for the management of hardware performance counters
US20200264963A1 (en) Commit window move element
JP2008276683A (ja) 試験装置
JP2005122329A (ja) ソフトウェアのリアルタイム解析方法

Legal Events

Date Code Title Description
A201 Request for examination