KR20200123188A - 요청에 의해 캐시 유입을 상위 레벨 캐시로 로깅 - Google Patents

요청에 의해 캐시 유입을 상위 레벨 캐시로 로깅 Download PDF

Info

Publication number
KR20200123188A
KR20200123188A KR1020207026922A KR20207026922A KR20200123188A KR 20200123188 A KR20200123188 A KR 20200123188A KR 1020207026922 A KR1020207026922 A KR 1020207026922A KR 20207026922 A KR20207026922 A KR 20207026922A KR 20200123188 A KR20200123188 A KR 20200123188A
Authority
KR
South Korea
Prior art keywords
cache
logged
line
logging
layer
Prior art date
Application number
KR1020207026922A
Other languages
English (en)
Other versions
KR102661543B1 (ko
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
Priority claimed from US15/904,072 external-priority patent/US10496537B2/en
Application filed by 마이크로소프트 테크놀로지 라이센싱, 엘엘씨 filed Critical 마이크로소프트 테크놀로지 라이센싱, 엘엘씨
Publication of KR20200123188A publication Critical patent/KR20200123188A/ko
Application granted granted Critical
Publication of KR102661543B1 publication Critical patent/KR102661543B1/ko

Links

Images

Classifications

    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • 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/3476Data logging
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0808Multiuser, multiprocessor or multiprocessing cache systems with cache invalidating means
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3024Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system component is a central processing unit [CPU]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3065Monitoring arrangements determined by the means or processing involved in reporting the monitored data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/885Monitoring specific for caches

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Quality & Reliability (AREA)
  • Computer Hardware Design (AREA)
  • Computing Systems (AREA)
  • Mathematical Physics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Debugging And Monitoring (AREA)

Abstract

상위 캐시 계층이 하위 캐시 계층에 의한 유입을 로깅하는 방법을 결정하는 것에 기반한 트레이스 로깅에 관한 것이다. 제2 캐시는 하위 계층 제1 캐시로부터 메모리 어드레스를 참조하는 로깅 요청을 수신한다. 제2 캐시는 그것이 메모리 어드레스에 대한 캐시 라인을 갖고 있는지 여부를 결정한다. 캐시 라인이 존재할 때, 제2 캐시는 요청을 다음 로깅 캐시 계층에 포워딩하거나, 제2 캐시가 가장 바깥 쪽 로깅 계층이라면 캐시 라인이 로깅되게 한다. 캐시 라인이 존재하지 않을 때, 제2 캐시는 캐시 라인이 제2 캐시에 의해 로깅되도록 결정되지 않을 때 또는 제2 캐시에 의해 로깅되도록 결정되었지만 제1 캐시가 제2 캐시의 캐시 라인의 현재 값을 아는지 여부가 결정되지 않았을 때, 캐시 라인이 로깅되게 한다.

Description

요청에 의해 캐시 유입을 상위 레벨 캐시로 로깅
소프트웨어 애플리케이션을 개발하는 동안 코드를 작성할 때 개발자는 일반적으로 런타임 및 기타 소스 코드 에러를 찾기 위해 코드를 "디버깅"하는 데 상당한 시간을 소비한다. 그렇게 하는데 있어서 개발자는 상이한 입력에 기반한 프로그램의 거동 관찰, 디버깅 코드 삽입(예를 들어, 변수 값 인쇄, 실행 분기 추적 등), 코드 부분의 일시적 제거 등과 같은 소스 코드 버그를 재현하고 위치를 알아내기 위한 여러 가지 접근법을 취할 수 있다. 코드 버그를 정확히 찾아내기 위하여 런타임 에러를 추적하는 것은 애플리케이션 개발 시간의 상당한 부분을 차지할 수 있다.
개발자의 코드 디버깅 프로세스를 지원하기 위해 많은 유형의 디버깅 애플리케이션("디버거")이 개발되었다. 이 툴은 개발자에게 컴퓨터 코드의 실행을 트레이스, 시각화 및 변경할 수 있는 기능을 제공한다. 예를 들어, 디버거는 코드 명령어들의 실행을 시각화하고, 코드 실행 중 다양한 시간에 코드 변수 값을 제시하고, 개발자가 코드 실행 경로를 변경하고/하거나, 개발자가 관심 있는 코드 요소에 (실행 중 도달할 때 코드의 실행이 중지(suspend)되게 하는) "중단점(breakpoint)" 및/또는 "감시점(watchpoint)"을 설정할 수 있도록할 수 있다.
최근에 생긴 형태의 디버깅 애플리케이션은 "시간 여행(time travel)", "역방향(reverse)" 또는 "역사적(historic)" 디버깅을 가능하게 한다. "시간 여행" 디버깅을 사용하면, 프로그램(예를 들어, 스레드와 같은 실행 가능한 엔터티)의 실행이 트레이스 애플리케이션에 의해 하나 이상의 트레이스 파일로 기록(record)/트레이싱된다. 그 후 이 트레이스 파일(들)을 사용하여 전진(forward) 및 후진(backward) 분석 둘 다를 위해 나중에 프로그램의 실행을 리플레이할 수 있다. 예를 들어, "시간 여행" 디버거를 사용하면 개발자는 역방향 중단점/감시점뿐만 아니라 (예를 들어, 종래의 디버거와 같은) 전진 중단점/감시점을 설정할 수 있다.
트레이스 파일을 기록할 때 몇 가지 고려 사항이 고려될 수 있다. 가장 두드러지게, 기록된 트레이스 데이터의 견고성(robustness)과 프로그램을 트레이싱함으로써 발생하는 오버 헤드 간에는 본질적인 트레이드 오프가 있다. 이러한 트레이드 오프는 주로 트레이스 파일 크기 및 트레이싱된 프로그램의 실행에 대한 성능 영향으로 나타난다. 또한, 트레이싱은 하드웨어 지원으로(또는 전적으로 소프트웨어로만) 수행될 수 있으므로, 하드웨어 설계 및 기타 하드웨어 비용 고려 사항이 또한 있을 수도 있다.
본 명세서에 기술된 실시 예는 프로세서에 의한 하드웨어 지원을 사용하여 비트-정확한(bit-accurate) "시간 여행" 트레이스 기록을 생성하기 위한 메커니즘에 관한 것이다. 이들 메커니즘은 프로세서 캐시의 적어도 2 개의 티어(tier) 또는 계층(layer)을 사용하여 복수의 처리 유닛에 걸친 실행의 효과를 트레이싱하는 것에 기초한다. 하나의 메커니즘은 프로세서의 하드웨어 및/또는 마이크로 코드를 수정하여, 트레이싱된 처리 유닛에 의한 활동에 기반하여 내부 또는 "하위 계층(lower-layer)" 프로세서 캐시로의 유입(즉, 캐시 미스)을 검출할 때, 그 유입의 데이터가 다른 트레이싱된 처리 유닛을 위해서 이미 로깅되었는지 여부를 결정하기 위하여 하나 이상의 외부 또는 "상위 계층(upper-layer)" 공유 프로세서 캐시를 검사한다. 또 다른 메커니즘은 프로세서의 하드웨어 및/또는 마이크로 코드를 수정하여, 하나 이상의 캐시 계층은 하위 캐시 계층(들)로부터의 로깅 요청을 수신하고 로깅된 캐시 라인의 지식을 사용하여 (만일 있다면) 하위 캐시 계층으로의 유입이 어떻게 로깅되어야 하는지 결정하도록 구성된다. 어느 메커니즘도 유입이 이전 로그 항목을 참조하여 로깅될 수 있게 할 수 있고, 각 메커니즘은 "N" 레벨의 캐시로 확장될 수 있다. 어느 하나의 메커니즘을 사용하여 트레이스 파일을 기록하면 프로세서를 약간만 수정하면 되며, 이전 트레이스 기록 접근법과 비교할 때 트레이스 기록의 성능 영향뿐만 아니라 트레이스 파일 크기도 둘 다 몇 배나(by several orders of magnitude) 줄일 수 있다.
제1 실시 예들은 복수의 처리 유닛, 복수의 N 레벨 캐시 및 (N + i) 레벨 캐시를 포함하는 컴퓨팅 디바이스(들)에 관한 것이다. (N + i) 레벨 캐시는 복수의 N 레벨 캐시 중 둘 이상과 연관되고 복수의 N 레벨 캐시에 대한 백업 저장소로서 구성된다. 이들 실시 예에서, 컴퓨팅 디바이스(들)는 컴퓨팅 디바이스(들)가 복수의 N 레벨 캐시 중 제1 N 레벨 캐시로의 유입 - 상기 유입이 메모리 위치에 저장된 데이터를 포함함 - 을 검출하도록 구성하는 제어 로직을 포함한다. 제어 로직은 또한 컴퓨팅 디바이스(들)가 (N + i) 레벨 캐시를 검사하여 메모리 위치에 대한 데이터가 제2 처리 유닛을 위해서 이전에 로깅되었는지를 여부를 결정하도록 구성한다. 제어 로직은 또한 이 검사에 기반하여 컴퓨팅 디바이스(들)가 (i) 제2 처리 유닛을 위해서 이전에 로깅된 로그 데이터를 참조하여, 메모리 위치에 대한 데이터가 제1 처리 유닛을 위해서 로깅되게 하는 것(즉, 메모리 위치에 대한 데이터가 제2 처리 유닛을 위해서 이전에 로깅되었을 때임), ii) 메모리 위치에 대한 데이터가 제1 처리 유닛을 위해서 값으로 로깅되게 하는 것(즉, 메모리 위치에 대한 데이터가 제2 처리 유닛을 위해서 이전에 로깅되지 않았을 때임) 중 하나를 수행하도록 구성한다.
제2 실시 예들은 복수의 처리 유닛 및 복수의 캐시 계층 내로 정렬(arrange)되는 복수의 캐시를 포함하는 컴퓨팅 디바이스(들)에 관한 것이다. 복수의 캐시는 제1 캐시 계층 내의 복수의 제1 캐시 및 제2 캐시 계층 내의 하나 이상의 제2 캐시를 포함한다. 제2 캐시 계층 내의 특정한 제2 캐시는 적어도 제1 캐시 계층 내의 특정한 제1 캐시를 위한 백업 저장소로서 기능한다. 이들 실시 예에서 컴퓨티 디바이스(들)는 적어도 특정한 제1 캐시로부터 특정한 메모리 어드레스를 참조하는 로깅 요청을 수신하도록 특정한 제2 캐시를 구성하는 제어 로직을 포함한다. 요청에 기반하여, 특정한 제2 캐시는 메모리 어드레스에 대응하는 캐시 라인이 특정한 제2 캐시 내에 존재하는지 여부를 결정한다. 캐시 라인이 특정한 제2 캐시 내에 존재하지 않을 때, 제2 캐시는 (i) 로깅에 참여하고 적어도 특정한 제2 캐시를 위한 백업 저장소로서 기능하는 제3 캐시가 존재하지 않을 때, 캐시 라인이 로깅되게 하거나; (ii) 제3 캐시가 존재할 때 요청을 제3 캐시로 포워딩한다.
캐시 라인이 특정한 제2 캐시 내에 존재할 때, 제2 캐시는 (i) 캐시 라인이 로깅되는 것으로 특정한 제2 캐시에 의해 결정되지 않을 때, 또는, 특정한 제2 캐시에 의해 로깅되도록 결정되지만 제1 캐시가 특정한 제2 캐시의 캐시 라인에 저장된 현재 값을 알고 있다고 특정한 제2 캐시가 결정하지 않았을 때, 캐시 라인이 로깅되게 하거나, (ii) 캐시 라인이 로깅되는 것으로 특정한 제2 캐시에 의해 결정될 때 및 제1 캐시가 특정한 제2 캐시의 캐시 라인에 저장된 현재 값을 알고 있다고 결정될 때, 캐시 라인이 로깅될 필요가 없다고 결정한다.
본 명세서에 설명된 임의의 실시 예는 또한 (예를 들어, 마이크로 프로세서와 같은) 컴퓨팅 디바이스(들) 및/또는 하드웨어 저장 디바이스에 저장되고 방법(들)을 수행하도록 실행 가능한 컴퓨터 실행 가능 명령어들(예를 들어, 프로세서 마이크로 코드)에 의해 수행되는 방법(들)로서 구현될 수 있다.
이 요약은 이하의 상세한 설명에서 추가로 설명되는 개념의 선택을 단순화된 형태로 소개하기 위해 제공된다. 이 요약은 청구된 주제(subject matter)의 주요 특징 또는 필수 특징을 식별하기 위한 것이 아니며 청구된 주제의 범위를 결정하는 데 도움을 주기 위해 사용되기 위한 것도 아니다.
전술한 본 발명의 다른 장점 및 특징이 획득될 수 있는 방식을 설명하기 위해, 위에서 간략히 설명된 본 발명의 보다 구체적인 설명은 첨부된 도면에 도시된 특정 실시 예를 참조하여 제공될 것이다. 이들 도면은 본 발명의 전형적인 실시 예만을 묘사하므로, 그 범위를 제한하는 것으로 간주되지 않는다는 것을 이해하고, 본 발명은 첨부 도면을 사용하여 추가적인 특수함 및 세부 사항으로 기술되고 설명될 것이다.
도 1은 프로세서 캐시의 적어도 2 개의 티어 또는 계층을 사용하여 복수의 처리 유닛에 걸쳐 "비트-정확한" 실행 트레이스의 기록을 용이하게 하는 예시적인 컴퓨팅 환경을 도시한다.
도 2a는 다중-계층 캐시를 포함하는 예시적인 컴퓨팅 환경을 도시한다.
도 2b는 캐시의 예를 도시한다.
도 3은 하나 이상의 상위 레벨 캐시의 지식에 기반하여 이전 로그 데이터를 참조하여 하위 레벨 캐시로의 유입을 기록하는 것에 기초한 트레이스 기록을 위한 예시적인 방법의 흐름도를 도시한다.
도 4a는 하나 이상의 추가 어카운팅 비트를 가진, 각 캐시 라인이 포함하는 예시적인 공유 캐시를 도시한다.
도 4b는 종래의 캐시 라인에 적용되는 어카운팅 비트를 저장하기 위한 하나 이상의 예약된 캐시 라인을 포함하는 공유 캐시의 예를 도시한다.
도 5는 시스템 메모리와 캐시 간의 세트-연관(set-associative) 매핑의 예를 도시한다.
도 6은 상위 캐시 계층이 하위 캐시 계층에 의한 로깅 요청에 기반하여, 하위 캐시 계층에 의한 유입을 로깅하는 방법을 결정하는 예시적인 방법의 흐름도를 도시한다.
도 7은 처리 유닛이 로깅 인에이블과 로깅 디스에이블 사이에서 전환(transition)할 때 캐시 라인의 로깅 상태를 관리하는 예시적인 방법의 흐름도를 도시한다.
도 8은 로깅이 디스에이블된 처리 유닛이 기입(write)을 위해 부모 캐시로부터 독점적으로 캐시 라인을 수신할 때 캐시 라인의 로깅 상태를 관리하는 예시적인 방법의 흐름도를 도시한다.
도 9는 처리 유닛이 "소유된(owned)" 캐시 일관성 프로토콜 상태에서 취한 캐시 라인에 처리 유닛이 기입할 때 캐시 라인의 로깅 상태를 관리하는 예시적인 방법의 흐름도를 도시한다.
본 명세서에 기술된 실시 예는 프로세서에 의한 하드웨어 지원을 사용하여 비트-정확한 "시간 여행" 트레이스 기록을 생성하기 위한 메커니즘에 관한 것이다. 이들 메커니즘은 프로세서 캐시의 적어도 2 개의 티어 또는 계층을 사용하여 복수의 처리 유닛에 걸친 실행의 효과를 트레이싱하는 것에 기초한다. 하나의 메커니즘은 프로세서의 하드웨어 및/또는 마이크로 코드를 수정하여, 트레이싱된 처리 유닛에 의한 활동에 기반하여 내부 또는 "하위 계층" 프로세서 캐시로의 유입(즉, 캐시 미스)을 검출할 때, 그 유입의 데이터가 다른 트레이싱된 처리 유닛을 위해서 이미 로깅되었는지 여부를 결정하기 위하여 하나 이상의 외부 또는 "상위 계층" 공유 프로세서 캐시를 검사한다. 또 다른 메커니즘은 프로세서의 하드웨어 및/또는 마이크로 코드를 수정하여, 하나 이상의 캐시 계층은 하위 캐시 계층(들)로부터의 로깅 요청을 수신하고 로깅된 캐시 라인의 지식을 사용하여 (만일 있다면) 하위 캐시 계층으로의 유입이 어떻게 로깅되어야 하는지 결정하도록 구성된다. 어느 메커니즘도 유입이 이전 로그 항목을 참조하여 로깅될 수 있게 할 수 있고, 각 메커니즘은 "N" 레벨의 캐시로 확장될 수 있다. 어느 하나의 메커니즘을 사용하여 트레이스 파일을 기록하면 프로세서를 약간만 수정하면 되며, 이전 트레이스 기록 접근법과 비교할 때 트레이스 기록의 성능 영향뿐만 아니라 트레이스 파일 크기도 둘 다 몇 배나(by several orders of magnitude) 줄일 수 있다.
도 1은 프로세서 캐시의 적어도 2 개의 티어 또는 계층을 사용하여 복수의 처리 유닛에 걸쳐 "비트-정확한" 실행 트레이스의 기록을 용이하게 하는 예시적인 컴퓨팅 환경(100)을 도시한다. 도시된 바와 같이, 실시 예는 예를 들어 하나 이상의 프로세서(들)(102), 시스템 메모리(103), 하나 이상의 데이터 저장소(104) 및/또는 입력/출력 하드웨어(105)와 같은 컴퓨터 하드웨어를 포함하는 특수 목적 또는 범용 컴퓨터 시스템(101)을 포함하거나 이용할 수 있다.
본 발명의 범위 내의 실시 예는 컴퓨터 실행 가능 명령어들 및/또는 데이터 구조를 운반(carry) 또는 저장하기 위한 물리적 및 다른 컴퓨터 판독 가능 매체를 포함한다. 이러한 컴퓨터 판독 가능 매체는 컴퓨터 시스템(101)에 의해 액세스될 수 있는 임의의 이용 가능한 매체일 수 있다. 컴퓨터 실행 가능 명령어들 및/또는 데이터 구조를 저장하는 컴퓨터 판독 가능 매체는 컴퓨터 저장 디바이스이다. 컴퓨터 실행 가능 명령어들 및/또는 데이터 구조를 운반하는 컴퓨터 판독 가능 매체는 전송 매체이다. 따라서, 제한이 아닌 예로서, 본 발명의 실시 예는 적어도 2 가지 명백히 상이한 종류의 컴퓨터 판독 가능 매체: 컴퓨터 저장 디바이스 및 전송 매체를 포함할 수 있다.
컴퓨터 저장 디바이스는 컴퓨터 실행 가능 명령어들 및/또는 데이터 구조를 저장하는 물리적 하드웨어 디바이스이다. 컴퓨터 저장 디바이스는 RAM, ROM, EEPROM, 솔리드 스테이트 드라이브(solid state drive, "SSD"), 플래시 메모리, 위상 변화 메모리(phase-change memory, "PCM"), 광 디스크 스토리지, 자기 디스크 저장 또는 다른 자기 저장 디바이스 또는 컴퓨터 실행 가능한 명령어들 또는 데이터 구조의 형태로 프로그램 코드를 저장하는데 사용될 수 있고 컴퓨터 시스템(101)에 의해 액세스 및 실행되어 본 발명의 개시된 기능을 구현할 수 있는 임의의 다른 하드웨어 디바이스(들)과 같은 다양한 컴퓨터 하드웨어를 포함한다. 따라서, 예를 들어, 컴퓨터 저장 디바이스는 도시된 시스템 메모리(103), 컴퓨터 실행 가능 명령어들 및/또는 데이터 구조를 저장할 수 있는 도시된 데이터 저장소(104) 또는 후에 논의되는 온-프로세서(on-processor) 스토리지와 같은 다른 스토리지를 포함할 수 있다.
전송 매체는 컴퓨터 실행 가능 명령어들 또는 데이터 구조의 형태로 프로그램 코드를 운반하는데 사용될 수 있고 컴퓨터 시스템(101)에 의해 액세스될 수 있는 네트워크 및/또는 데이터 링크를 포함할 수 있다. "네트워크"는 컴퓨터 시스템 및/또는 모듈 및/또는 다른 전자 디바이스 사이에서 전자 데이터의 수송을 가능하게 하는 하나 이상의 데이터 링크로서 정의된다. 정보가 네트워크 또는 다른 통신 연결(하드 와이어드, 무선 또는 하드 와이어드 또는 무선의 조합)을 통해 컴퓨터 시스템으로 전송되거나 제공될 때, 컴퓨터 시스템은 연결(connection)을 전송 매체로 볼 수 있다. 상기의 조합은 또한 컴퓨터 판독 가능 매체의 범위 내에 포함되어야 한다. 예를 들어, 입력/출력 하드웨어(105)는 컴퓨터 실행 가능한 명령어들 또는 데이터 구조의 형태로 프로그램 코드를 운반하는데 사용될 수 있는 네트워크 및/또는 데이터 링크를 연결하는 하드웨어(예를 들어, 네트워크 인터페이스 모듈(network interface module)(예를 들어, "NIC"))를 포함할 수 있다.
또한, 다양한 컴퓨터 시스템 컴포넌트에 도달할 때, 컴퓨터 실행 가능 명령어들 또는 데이터 구조 형태의 프로그램 코드가 전송 매체로부터 컴퓨터 저장 디바이스로(또는 그 반대로) 자동적으로 전송될 수 있다. 예를 들어, 네트워크 또는 데이터 링크를 통해 수신된 컴퓨터 실행 가능 명령어들 또는 데이터 구조는 NIC(예를 들어, 입력/출력 하드웨어(105)) 내의 RAM에 버퍼링될 수 있고, 결국 컴퓨터 시스템(101)에서 시스템 메모리(103) 및/또는 덜 휘발성인 컴퓨터 저장 디바이스(예를 들어 데이터 저장소(104))로 전송될 수 있다. 따라서, 컴퓨터 저장 디바이스는 또한(또는 심지어는 주로) 전송 매체를 이용하는 컴퓨터 시스템 컴포넌트에 포함될 수 있음을 이해해야 한다.
컴퓨터 실행 가능 명령어들은 예를 들어 프로세서(들)(102)에서 실행될 때 컴퓨터 시스템(101)으로 하여금 특정 기능 또는 기능의 그룹을 수행하게 하는 명령어들 및 데이터를 포함한다. 컴퓨터 실행 가능 명령어들은 예를 들어, 이진(binary), 어셈블리 언어와 같은 중간 포맷 명령어들, 또는 심지어 소스 코드일 수 있다.
당업자는 본 발명이 개인용 컴퓨터, 데스크탑 컴퓨터, 랩탑 컴퓨터, 메시지 프로세서, 핸드 헬드 디바이스, 멀티 프로세서 시스템, 마이크로 프로세서 기반 또는 프로그래머블 가전, 네트워크 PC, 미니 컴퓨터, 메인 프레임 컴퓨터, 휴대 전화, PDA, 태블릿, 호출기, 라우터, 스위치 등을 포함하는 많은 유형의 컴퓨터 시스템 구성을 갖는 네트워크 컴퓨팅 환경에서 실시될 수 있음을 이해할 것이다. 본 발명은 또한 네트워크를 통해 (하드 와이어드 데이터 링크, 무선 데이터 링크, 또는 하드 와이어드 및 무선 데이터 링크의 조합에 의해) 링크된 로컬 및 원격 컴퓨터 시스템이 둘 다 작업을 수행하는 분산 시스템 환경에서 실시될 수 있다. 이와 같이, 분산 시스템 환경에서, 컴퓨터 시스템은 복수의 구성 컴퓨터 시스템을 포함할 수 있다. 분산 시스템 환경에서 프로그램 모듈은 로컬 및 원격 메모리 저장 디바이스 모두에 위치될 수 있다.
당업자는 본 발명이 클라우드 컴퓨팅 환경에서 실시될 수 있음을 또한 이해할 것이다. 필수는 아니지만 클라우드 컴퓨팅 환경이 분산될 수 있다. 클라우드 컴퓨팅 환경은 분산될 때, 조직 내에서 국제적으로 분산되고/되거나 여러 조직에 걸쳐 컴포넌트를 소유할 수 있다. 이 설명 및 다음의 청구범위에서, "클라우드 컴퓨팅"은 구성 가능한 컴퓨팅 리소스(예를 들어, 네트워크, 서버, 스토리지, 애플리케이션 및 서비스)의 공유 풀에 온-디맨드 네트워크 액세스를 가능하게 하는 모델로서 정의된다. "클라우드 컴퓨팅"의 정의는 적절하게 배치(deploy)될 때 이러한 모델로부터 얻을 수 있는 다른 많은 장점으로 제한되지 않는다.
클라우드 컴퓨팅 모델은 온-디맨드 셀프 서비스, 광범위한 네트워크 액세스, 리소스 풀링, 빠른 탄력성, 측정된 서비스 등과 같은 다양한 특성으로 구성될 수 있다. 클라우드 컴퓨팅 모델은 또한 예를 들어 SaaS(Software as a Service), PaaS(Platform as a Service) 및 IaaS(Infrastructure as a Service)와 같은 다양한 서비스 모델의 형태로 제공될 수도 있다. 클라우드 컴퓨팅 모델은 또한 프라이빗 클라우드, 커뮤니티 클라우드, 퍼블릭 클라우드, 하이브리드 클라우드 등과 같은 상이한 배치 모델을 사용하여 배치(deploy)될 수도 있다.
클라우드 컴퓨팅 환경과 같은 일부 실시 예는 각각 하나 이상의 가상 머신을 실행할 수 있는 하나 이상의 호스트를 포함하는 시스템을 포함할 수 있다. 운영 중에 가상 머신은 운영 체제 및 아마 하나 이상의 다른 애플리케이션도 지원하는 운영 컴퓨팅 시스템을 에뮬레이션한다. 일부 실시 예에서, 각각의 호스트는 가상 머신의 관점에서 추상화된 물리적 리소스를 사용하여 가상 머신에 대한 가상 리소스를 에뮬레이션하는 하이퍼바이저(hypervisor)를 포함한다. 하이퍼바이저는 또한 가상 머신 간에 적절한 격리를 제공한다. 따라서, 임의의 주어진 가상 머신의 관점에서, 하이퍼바이저는 가상 머신이 물리적 리소스의 외관(예를 들어, 가상 리소스)과만 인터페이스하더라도 가상 머신이 물리적 리소스과 인터페이스하고 있다는 착시를 제공한다. 물리적 리소스의 예는 처리 용량, 메모리, 디스크 공간, 네트워크 대역폭, 미디어 드라이브 등을 포함한다.
도 1은 프로세서(들)(102)의 내부 하드웨어 컴포넌트의 단순화된 표현을 포함한다. 도시된 바와 같이, 각각의 프로세서(102)는 복수의 처리 유닛(들)(102a)을 포함한다. 각각의 처리 유닛은 물리적(즉, 물리적 프로세서 코어) 및/또는 논리적(즉, 둘 이상의 애플리케이션 스레드가 물리적 코어에서 실행되는 하이퍼-스레딩을 지원하는 물리적 코어에 의해 제공되는 논리적 코어)일 수 있다. 따라서, 예를 들어, 프로세서(102)가 일부 실시 예에서 단일 물리적 처리 유닛(코어)만을 포함할 수 있지만, 그 단일 물리적 처리 유닛에 의해 제시된 둘 이상의 논리적 처리 유닛(102a)을 포함할 수 있다.
각각의 처리 유닛(102a)은 애플리케이션들(예를 들어, 트레이서(l04a), 디버거(104b), 동작 커널(l04c), 애플리케이션(l04d) 등)에 의해 정의되고 사전 정의된 프로세서 명령어 세트 아키텍처(instruction set architecture, ISA) 중에서 선택된 프로세서 명령어들을 실행한다. 각 프로세서(102)의 특정 ISA는 프로세서 제조사 및 프로세서 모델에 기반하여 변한다. 일반적인 ISA에는 INTEL, INC.의 IA-64 및 IA-32 아키텍처, ADVANCED MICRO DEVICES, INC.의 AMD64 아키텍처 및 ARM HOLDINGS, PLC의 다양한 "ARM(Advanced RISC Machine)" 아키텍처가 포함되지만, 많은 수의 ISA가 존재하고 본 발명에 의해 사용될 수 있다. 일반적으로, "명령어(instruction)"는 프로세서에 의해 실행 가능한 외부(즉, 프로세서 외부)에서 볼 수 있는 가장 작은 코드 단위이다.
각각의 처리 유닛(102a)은 하나 이상의 프로세서 캐시(들)(102b)로부터 프로세서 명령어들을 획득하고, 레지스터(102d)의 데이터에 기반하여 및/또는 입력 데이터가 없이 캐시(들)(102b) 내의 데이터에 기반하여 프로세서 명령어들을 실행한다. 일반적으로, 각각의 캐시(102b)는 시스템 메모리(103) 및/또는 캐시(들)(102b) 내의 다른 캐시와 같은 백업 저장소의 부분들의 온-프로세서 사본을 저장하는 랜덤 액세스 메모리의 작은 양(즉, 시스템 메모리(103)의 전형적인 양에 비하여 작음)이다. 예를 들어, 애플리케이션 코드(103a)를 실행할 때 하나 이상의 캐시(들)(102b)가 애플리케이션 런타임 데이터(103b)의 부분들을 포함한다. 처리 유닛(들)(102a)이 특정 캐시(들)(102b)에 이미 저장되지 않은 데이터를 요청하면, "캐시 미스(cache miss)"가 발생하고, 그 데이터는 시스템 메모리(103) 또는 다른 캐시로부터 페치(fetch)되어, 그 캐시(102b)로부터 어떤 다른 데이터를 잠재적으로 "제거(evict)"할 수 있다.
종종, 프로세서 캐시(들)(102b)는 계층 1(L1), 계층 2(L2), 계층 3(L3) 등과 같은 별도의 티어(tier), 계층(layer) 또는 레벨(level)로 분할된다. 프로세서 구현에 따라 티어는 프로세서(102) 자체의 일부일 수 있고/있거나(예를 들어, L1 및 L2), 프로세서(102)와 분리될 수 있다(예를 들어, L3). 따라서, 도 1의 캐시(들)(102b)는 이들 계층 중 하나(L1)를 포함하거나 복수의 이들 계층(예를 들어, L1 및 L2, 및 심지어 L3)을 포함할 수 있다. 이들 개념을 좀 더 이해하기 위하여, 도 2a는 다중-계층 캐시를 나타내는 예시적인 환경(200)을 도시한다. 도 2a에서, 2 개의 프로세서(20la 및 20lb)(예를 들어, 각각은 도 1의 상이한 프로세서(102)에 대응) 및 시스템 메모리(202)(예를 들어, 도 1의 시스템 메모리(103)에 대응)가 있다. 예시적인 환경(200)에서, 각각의 프로세서(201)는 4 개의 물리적 처리 유닛(즉, 프로세서(20la)를 위한 유닛(A1-A4) 및 프로세서(210b)를 위한 유닛(B1-B4))을 포함한다.
예시적인 환경(200)은 또한 각각의 처리 유닛(201) 내에 3-계층 캐시체계(hierarchy)를 포함한다. 환경(200)은 단지 하나의 예시적인 레이아웃이며, 본 명세서의 실시 예가 동작할 수 있는 캐시 체계(hierarchy)에 제한되지 않는다. 환경(200)에서, 최저 또는 가장 내부 계층에서, 각각의 처리 유닛은 자신의 전용 L1 캐시(예를 들어, 유닛(A1)에 대한 프로세서(20la) 내의 L1 캐시 "L1-Al", 유닛(A2)에 대한 프로세서(20la) 내의 L1 캐시 "L1-A2" 등)와 연관된다. 계층 위로 움직이면, 각각의 처리 유닛(201)은 2 개의 L2 캐시(예를 들어, L1 캐시(L1-A1 및 L1-A2)를 위한 백업 저장소로서 기능하는 프로세서(201a) 내의 L2 캐시 "L2-A1", L1 캐시(L1-A3 및 L1-A4)를 위한 백업 저장소로서 기능하는 프로세서(201a) 내의 L2 캐시 "L1-A2" 등)를 포함한다. 마지막으로, 최고 또는 가장 외부 계층에서, 각각의 처리 유닛(201)은 단일 L3 캐시(예를 들어, L2 캐시(L2-A1 및 L2-A2)를 위한 백업 저장소로서 기능하는 프로세서(201a) 내의 L3 캐시 "L3-A", L2 캐시(L2-B1 및 L2-B2)를 위한 백업 저장소로서 기능하는 프로세서(201b) 내의 L3 캐시 "L3-B" 등)를 포함한다. 도시된 바와 같이, 시스템 메모리(202)는 L3 캐시(L3-A 및 L3-B)를 위한 백업 저장소로서 기능한다.
도 2a에 도시된 바와 같이, 다수의 캐시 계층이 사용될 때, 처리 유닛(들)(102a)은 전형적으로 가장 낮은 계층(L1)과 직접 상호 작용한다. 대부분의 경우에, 계층들 사이에 데이터가 흐른다(예를 들어, 판독시 L3 캐시는 시스템 메모리(103)와 상호 작용하고 L2 캐시에 데이터를 제공하고, L2 캐시는 차례로 L1 캐시에 데이터를 제공한다). 처리 유닛(102a)이 기록을 수행할 때, 캐시는 처리 유닛(들)(102a) 간에 공유된 데이터에 영향을 준 캐시가 더 이상 갖지 않도록 보장하기 위해 조정(coordinate)된다. 이 조정은 CCP를 사용하여 수행된다.
따라서 환경(200)의 캐시는 "공유된(shard)" 캐시로 볼 수 있다. 예를 들어, 각각의 L2 및 L3 캐시는 주어진 프로세서(201) 내에서 다수의 처리 유닛을 제공하고 따라서 처리 유닛들에 의해 공유된다. 개별적인 L1 캐시가 일관성(consistency)을 보장하기 위해(즉, 각각의 캐시된 메모리 위치가 모든 L1 캐시에 걸쳐 일관되게 보여지도록 하기 위하여) 서로 (즉, CCP를 통해) 협력할 수 있기 때문에, 주어진 프로세서(201)에서 L1 캐시는 각각이 단일 처리 유닛에 대응하더라도 집합적으로 공유된 것으로 또한 간주될 수 있다. 각 프로세서(201) 내의 L2 캐시는 유사하게 CCP를 통해 조정될 수 있다. 또한, 프로세서(201)가 하이퍼-스레딩을 지원하면, 각각의 개별 L1 캐시는 둘 이상의 논리적 처리 유닛에 의해 공유되는 것으로 보여질 수 있고, 따라서 개별 레벨에서조차 "공유"된다.
전형적으로, 각각의 캐시는 복수의 "캐시 라인(cache line)"을 포함한다. 각각의 캐시 라인은 그의 백업 저장소(예를 들어, 시스템 메모리(202) 또는 상위 계층 캐시)로부터의 메모리 청크를 저장한다. 예를 들어, 도 2b는 복수의 캐시 라인(206)을 포함하는 캐시(203)의 적어도 일부의 예를 도시하며, 이들 각각은 적어도 어드레스 부분(204) 및 값 부분(205)을 포함한다. 각 캐시 라인(206)의 어드레스 부분(204)은 캐시 라인이 대응하는 시스템 메모리(202)에 어드레스를 저장하도록 구성되고, 값 부분(205)은 시스템 메모리(202)로부터 수신된 값을 초기에 저장한다. 값 부분(205)은 처리 유닛에 의해 수정될 수 있고, 결국에는 백업 저장소로 다시 제거(evict)될 수 있다. 타원으로 표시된 바와 같이, 캐시(203)는 다수의 캐시 라인을 포함할 수 있다. 예를 들어, 현대의 64 비트 인텔 프로세서는 512 개 이상의 캐시 라인을 포함하는 개별 L1 캐시를 포함할 수 있다. 이러한 캐시에서, 각각의 캐시 라인은 일반적으로 6 바이트(48 비트) 내지 8 바이트(64 비트) 메모리 어드레스와 관련하여 64 바이트(5l2 비트) 값을 저장하는데 사용될 수 있다. 도 2a에 시각적으로 표시된 것처럼 캐시 크기는 일반적으로 각 계층마다 증가한다(즉, L2 캐시는 일반적으로 L1 캐시보다 크고 L3 캐시는 일반적으로 L2 캐시보다 크다).
각 캐시 라인(206)의 어드레스 부분(204)에 저장된 어드레스는 시스템 메모리(202)의 실제 메모리 어드레스와 같은 물리적 어드레스일 수 있다. 대안적으로, 어드레스 부분(204)에 저장된 어드레스는 가상 어드레스일 수 있고, 이것은 (예를 들어, 운영 시스템 관리 페이지 테이블을 사용하여) 추상화(abstraction)를 제공하기 위해 물리적 어드레스에 매핑되는 어드레스이다. 이러한 추상화는 예를 들어 운영 체제 커널(104b)과 연관된 커널 모드 프로세스와 사용자 모드 프로세스 사이의 격리를 포함하여 프로세서(들)(102)에서 실행되는 상이한 프로세스 사이의 메모리 격리를 용이하게 하기 위해 사용될 수 있다. 가상 어드레스가 사용될 때, 프로세서(102)는 물리적 어드레스와 가상 어드레스 사이에 최근에 사용된 메모리 어드레스 매핑을 유지하는 변환 색인 버퍼(translation lookaside buffer, TLB)(102f)(보통 메모리 관리 유닛(memory management unit, MMU)의 일부임)를 포함할 수 있다.
캐시(들)(102b)는 코드 캐시 부분 및 데이터 캐시 부분을 포함할 수 있다. 애플리케이션 코드(103a)를 실행할 때, 캐시(들)(102b)의 코드 부분(들)은 애플리케이션 코드(103a)에 저장된 프로세서 명령어들의 적어도 일부를 저장할 수 있고, 캐시(들)(102b)의 데이터 부분(들)은 애플리케이션 런타임 데이터(l03b)의 데이터 구조의 적어도 일부를 저장할 수 있다. 또한 캐시는 포괄적(inclusive)이거나 독점적(exclusive)이거나 포괄적 및 독점적 행동을 모두 포함할 수 있다. 예를 들어, 포괄적 캐시에서 L3 계층은 그 아래 L2 계층에 데이터의 수퍼세트(superset)를 전형적으로 저장하고 L2 계층은 그 아래에 L1 계층의 수퍼세트를 저장할 것이다. 독점적 캐시에서, 계층은 분리(disjoint)될 수 있다. 예를 들어, L1 캐시가 필요로 하는 L3 캐시에 데이터가 존재하는 경우, 그들은 데이터, 어드레스 등과 같은 정보를 교환(swap)할 수 있다.
도 1로 돌아가서, 각각의 프로세서(102)는 또한 프로세서(102)의 동작을 제어하는 제어 로직(즉, 실행 가능한 명령어들)을 포함하고 일반적으로 실행 애플리케이션에게 프로세서의 하드웨어와 프로세서(102)에 의해 노출되는 프로세서 ISA 사이의 인터프리터로서 기능하는 마이크로 코드(102c)를 포함한다. 마이크로 코드(102c)는 일반적으로 ROM, EEPROM 등과 같은 온-프로세서 스토리지 상에 구현된다.
레지스터(102d)는 프로세서(들)(102)의 ISA에 기반하여 정의되고 프로세서 명령어들에 의해 판독 및/또는 기록되는 하드웨어 기반 저장 장소이다. 예를 들어, 레지스터(102d)는 명령어들에 의해 사용하기 위해 캐시(들)(102b)로부터 페치된 값을 저장하고, 명령어들을 실행한 결과를 저장하고/하거나, 명령어들을 실행하는 일부 부작용(예를 들어, 값의 부호가 바뀜, 값이 제로에 도달, 캐리의 발생 등)과 같은 상태(status) 또는 상태(state), 프로세서 사이클 카운트 등을 저장하는데 흔히 사용된다. 따라서, 일부 레지스터(102d)는 프로세서 명령어들을 실행하는 것에 의해 초래되는 일부 상태 변화를 시그널링하는 데 사용되는 "플래그(flag)"를 포함할 수 있다. 일부 실시 예에서, 프로세서(102)는 또한 프로세서 동작의 상이한 양태를 제어하는데 사용되는 제어 레지스터를 포함할 수 있다. 도 1은 레지스터들(102d)을 단일 박스로서 도시하지만, 각각의 처리 유닛(102a)은 전형적으로 그 처리 유닛에 고유한 하나 이상의 대응하는 레지스터 세트(102d)를 포함하는 것이 이해될 것이다.
일부 실시 예에서, 프로세서(들)(102)는 하나 이상의 버퍼(102e)를 포함할 수 있다. 이후에 논의될 바와 같이, 버퍼(들)(102e)는 트레이스 데이터를 위한 임시 저장 장소로서 사용될 수 있다. 따라서, 예를 들어, 프로세서(들)(102)는 트레이스 데이터의 일부를 버퍼(들)(102e)에 저장하고, 이용 가능한 메모리 버스 대역폭이 있고/있거나 비어 있는(free) 프로세서 사이클이 있을 때와 같은 적절한 시간에 그 데이터를 트레이스 데이터 저장소(104e)로 플러시할 수 있다.
전술한 바와 같이, 프로세서는 하나 이상의 CCP에 따라 캐시(들)(102b)에 대하여 동작한다. 일반적으로, CCP는 다양한 처리 유닛들(102a)이 다양한 캐시(들)(102b)에서 데이터를 읽고 기입할 때 다양한 캐시(들)(102b) 사이의 데이터 사이에 일관성이 유지되는 방법, 및 다양한 처리 유닛들(l02a)이 항상 캐시(들)(102b)의 주어진 위치로부터 유효한 데이터를 판독하는 것을 보장하는 방법을 정의한다. CCP는 프로세서(l02)의 ISA에 의해 정의된 메모리 모델과 관련이 있고 이를 인에이블한다.
공통 CCP의 예로는 MSI 프로토콜(예를 들어, Modified, Shared 및 Invalid), MESI 프로토콜(예를 들어, Modified, Exclusive, Shared 및 Invalid) 및 MOESI 프로토콜(예를 들어, Modified, Owned, Exclusive, Shared, Invalid)을 포함한다. 이들 프로토콜 각각은 캐시(들)(102b) 내의 개별 위치(예를 들어, 라인)에 대한 상태(state)를 정의한다. "수정된" 캐시 위치는 캐시(들)(102b)에서 수정되었던 데이터를 포함하며, 따라서 백업 저장소(예를 들어, 시스템 메모리(103) 또는 또 다른 캐시)의 대응하는 데이터와 잠재적으로 일치하지 않을 수 있다. "수정된" 상태를 갖는 위치가 캐시(들)(102b)로부터 제거될 때, 흔한 CCP는 데이터가 백업 저장소로 다시 기입되거나 또 다른 캐시가 이 책임을 맡는 것을 캐시가 보장할 것을 요구한다. "공유된" 캐시 위치는 백업 저장소의 데이터로부터 수정되지 않은 데이터를 포함하고, 읽기 전용 상태로 존재하며, 처리 유닛(들)(102a)에 의해 공유된다. 캐시(들)(102b)는 이 데이터를 백업 저장소에 기입하지 않고 이 데이터를 제거할 수 있다. "유효하지 않은(invalid)" 캐시 위치는 유효한 데이터를 포함하지 않으며 비어 있는 것으로 간주될 수 있고 캐시 미스로부터 데이터를 저장하는 데 사용될 수 있다. "독점적(exclusive)" 캐시 위치는 백업 저장소와 일치하는 데이터를 포함하며 단일 처리 유닛(l02a)에 의해서만 사용된다. 언제라도(즉, 판독 요청에 대한 응답으로) 그것은 "공유된" 상태로 변경되거나 기입될 때 "수정된" 상태로 변경될 수 있다. "소유된(owned)" 캐시 위치는 둘 이상의 처리 유닛(들)(102a)에 의해 공유되지만, 처리 유닛 중 하나는 그에 대한 변경을할 수 있는 독점적 권한을 갖는다. 그 처리 유닛이 변경을 행할 때 그것은 다른 처리 유닛에게 통지할 수 있는데, 그 다른 처리 유닛이 CCP 구현을 기반으로 그들 자신의 캐시를 무효화 또는 업데이트해야할 수 있기 때문이다.
데이터 저장소(104)는 예를 들어, 트레이서(l04a), 디버거(l04b), 운영 체제 커널(l04c) 및 애플리케이션(l04d)(예를 들어, 트레이서(104a)에 의해 트레이싱하는 주체인 애플리케이션)과 같은 애플리케이션 프로그램을 나타내는 컴퓨터 실행 가능 명령어들을 저장할 수 있다. 이러한 프로그램이 (예를 들어, 프로세서(들)(102)를 사용하여) 실행 중일 때, 시스템 메모리(103)는 런타임 데이터 구조, 컴퓨터 실행 가능 명령어들 등과 같은 대응하는 런타임 데이터를 저장할 수 있다. 따라서, 도 1은 시스템 메모리(103)를 애플리케이션 코드(l03a) 및 애플리케이션 런타임 데이터(l03b)(예를 들어, 각각 애플리케이션(l04g)에 대응)를 포함하는 것으로 도시한다. 데이터 저장소(104)는 하나 이상의 트레이스 데이터 저장소(104e) 내에 저장된 트레이스 데이터와 같은 데이터 구조를 더 저장할 수 있다. 타원(104f)으로 표시된 바와 같이, 데이터 저장소(104)는 또한 다른 컴퓨터 실행 가능 명령어들 및/또는 데이터 구조를 저장할 수 있다.
트레이서(l04a)는 애플리케이션(l04d) 또는 커널(l04c)의 하나 이상의 스레드와 같은 하나 이상의 엔티티의 비트-정확한 실행 트레이스를 기록하고, 트레이스 데이터를 트레이스 데이터 저장소(l04e)에 저장하는 데 사용할 수 있다. 일부 실시 예에서, 트레이서(104a)는 독립형 애플리케이션인 반면, 다른 실시 예에서 트레이서(104a)는 커널(104c), 하이퍼바이저, 클라우드 패브릭 등과 같은 또 다른 소프트웨어 컴포넌트 내로 통합된다. 트레이스 데이터 저장소(104e)가 데이터 저장소(104)의 일부인 것으로 묘사되어 있지만, 트레이스 데이터 저장소(104e)는 또한 시스템 메모리(103), 캐시(들)(102b), 버퍼(들)(102e), 또는 일부 다른 저장 디바이스에서 적어도 부분적으로 구현될 수 있다.
언급된 바와 같이, 트레이서(l04a)는 하나 이상의 엔티티의 비트-정확한 실행 트레이스를 기록한다. 본 명세서에서 사용된 바와 같이, "비트 정확한(bit accurate)" 트레이스는 하나 이상의 처리 유닛(102a)에서 이전에 실행된 코드가 리플레이될 수 있도록 충분한 데이터를 포함하는 트레이스로서, 트레이싱 동안에 그랬던 것과 실질적으로 동일한 방식으로 리플레이 시간에 실행된다. 트레이서(l04a)가 비트-정확한 트레이스를 기록하는데 사용할 수 있는 다양한 접근 방식이 있으며, (예를 들어, 트레이싱 오버헤드, 트레이스 파일 크기, 요구되는 프로세서 수정의 양 등의 측면에서) 각각에 대한 다양한 이점과 단점이 있다. 이러한 데이터를 기록하기 위한 일부 특정한 실시 예는 도 3-9와 관련하여 나중에 논의된다.
트레이서(l04a)에 의해 사용되는 기록 접근 방식에 관계 없이, 트레이스 데이터를 하나 이상의 트레이스 데이터 저장소(l04e)에 기록할 수 있다. 예로서, 트레이스 데이터 저장소(104e)는 하나 이상의 트레이스 파일, 시스템 메모리(103)의 하나 이상의 영역, 프로세서 캐시(102b)(예를 들어, L2 또는 L3 캐시)의 하나 이상의 영역, 프로세서(102)의 버퍼(102e), 또는 이들의 임의의 조합 또는 다수를 포함할 수 있다. 트레이스 데이터 저장소(l04e)는 하나 이상의 트레이스 데이터 스트림을 포함할 수 있다. 일부 실시 예에서, 예를 들어, 다수의 엔티티(예를 들어, 프로세스, 스레드 등)는 각각 별도의 트레이스 파일 또는 주어진 트레이스 파일 내의 트레이스 데이터 스트림으로 트레이싱될 수 있다. 대안적으로, 각 엔티티에 대응하는 데이터 패킷은 그 엔티티에 대응하는 것으로 식별되도록 태그될 수 있다. 다수의 관련 엔터티(예를 들어, 동일한 프로세스의 복수의 스레드)가 트레이싱되고 있다면, 각 엔터티에 대한 트레이스 데이터를 독립적으로 트레이싱할 수 있지만(이들이 독립적으로 리플레이되게할 수 있음) 엔터티 간에 정렬가능한 임의의 이벤트(예를 들어 공유 메모리에 대한 액세스)는 독립적인 트레이스에 걸쳐 전역적인 시퀀싱 번호(예를 들어, 단조 증가 번호)로 식별될 수 있다. 트레이스 데이터 저장소(l04e)는 트레이스 데이터 스트림의 유연한 관리, 수정 및/또는 생성을 위해 구성될 수 있다. 예를 들어, 기존 트레이스 데이터 스트림의 수정은 기존 트레이스 파일의 수정, 기존 파일 내의 트레이스 데이터의 섹션 교체 및/또는 수정 사항을 포함하는 새로운 트레이스 파일의 생성을 포함할 수 있다.
일부 구현에서, 트레이서(104a)는 트레이스 데이터가 트레이싱 동안 계속해서 증가하도록 트레이스 데이터 스트림(들)에 계속해서 추가할 수 있다. 그러나 다른 구현에서 트레이스 데이터 스트림은 하나 이상의 링 버퍼로서 구현될 수 있다. 이러한 구현에서, 가장 오래된 트레이스 데이터는 새로운 트레이스 데이터가 트레이스 데이터 저장소(l04e)에 추가될 때 데이터 스트림(들)으로부터 제거된다. 이와 같이, 트레이스 데이터 스트림이 버퍼(들)로서 구현될 때, 트레이싱된 프로세스(들)에서 가장 최근 실행의 롤링(rolling) 트레이스를 포함한다. 링 버퍼를 사용하면 트레이서(l04a)가 생산 시스템에서도 "항상 온(always on)" 트레이싱에 참여할 수 있다. 일부 구현에서, 트레이싱은 하나 이상의 제어 레지스터에서 하나 이상의 비트를 설정(set)하거나 소거(clear)하는 것과 같이 사실상 언제든지 인에이블 및 디스에이블될 수 있다. 이와 같이, 링 버퍼로 트레이싱하든 전통적인 트레이스 데이터 스트림에 추가하든, 트레이스 데이터는 하나 이상의 처리 유닛(102a)에 대해 트레이싱이 인에이블되는 기간 사이의 간격(gap)을 포함할 수 있다.
디버거(l04b)는 사용자가 트레이스 데이터(또는 그 파생물)에 대한 디버깅 동작을 수행하는 것을 돕기 위해 트레이서(l04a)에 의해 생성된 트레이스 데이터를 트레이스 데이터 저장소(l04e) 내로 소비(예를 들어, 리플레이)하는 데 사용할 수 있다. 예를 들어, 디버거(l04b)는 하나 이상의 디버깅 인터페이스(예를 들어, 사용자 인터페이스 및/또는 애플리케이션 프로그래밍 인터페이스)를 제공하고, 애플리케이션(l04d)의 하나 이상의 부분의 사전 실행을 리플레이하고, 역방향 중단점/감시점을 포함하는 중단점/감시점을 설정하고, 트레이스 데이터 등에 대한 쿼리/서치를 가능하게 할 수 있다.
트레이서(104a)로 돌아가서, 본 명세서의 실시 예에서 트레이서(104a)는 프로세서(102)의 캐시(들)(102b)를 이용하여 애플리케이션(104d) 및/또는 운영 체제 커널(104c)의 비트-정확한 실행 트레이스를 효율적으로 기록한다. 이들 실시 예는 프로세서(102)(캐시(들)(10b)를 포함함)가 반(semi)- 또는 준(quasi)-폐쇄 시스템을 형성한다는 발명자의 관찰에 기반하여 구축된다. 예를 들어, 프로세스를 위한 데이터의 일부(즉, 코드 데이터 및 런타임 애플리케이션 데이터)가 캐시(들)(102b)로 로딩되면, 프로세서(102)는 시간 버스트 동안 반- 또는 준-폐쇄 시스템으로서 어떤 입력도 없이 자체적으로 실행될 수 있다. 특히, 캐시(들)(102b)가 데이터로 로딩되면, 하나 이상의 처리 유닛(102a)은 캐시(들)(102b)의 데이터 부분(들)에 저장된 런타임 데이터를 사용하여 그리고 레지스터(102d)를 사용하여 캐시(들)(102b)의 코드 부분(들)으로부터 명령어들을 실행한다.
(예를 들어, 실행 중이거나, 실행 예정이거나, 실행할 수 있는 명령어가 캐시(들)(102b)에 이미 존재하지 않는 코드 또는 런타임 데이터에 액세스하기 때문에) 처리 유닛(102a)이 정보의 유입을 필요로 할 때, "캐시 미스"가 발생하고 그 정보를 시스템 메모리(103)로부터 캐시(들)(102b)로 가져온다. 예를 들어, 실행된 명령어가 애플리케이션 런타임 데이터(l03b) 내의 메모리 어드레스에서 메모리 동작을 수행할 때 데이터 캐시 미스가 발생하면, 그 메모리 어드레스로부터의 데이터를 캐시(들)(102b)의 데이터 부분의 캐시 라인들 중 하나로 가져온다. 유사하게, 명령어가 시스템 메모리(103)에 저장된 메모리 어드레스 애플리케이션 코드(l03a)에서 메모리 동작을 수행할 때 코드 캐시 미스가 발생하면, 그 메모리 어드레스로부터의 코드를 캐시(들)(102b)의 코드 부분(들)의 캐시 라인 중 하나로 가져온다. 그 후 처리 유닛(102a)은 (예를 들어, 다른 캐시 미스 또는 캐시되지 않은 판독으로 인해) 새로운 정보를 다시 캐시(들)(102b)로 가져올 때까지, 캐시(들)(102b)의 새로운 정보를 사용하여 실행을 계속한다.
본 발명자는 또한, 애플리케이션의 실행의 비트-정확한 표현을 기록하기 위해, 트레이서(104a)는 처리 유닛이 그 애플리케이션의 스레드(들)을 실행할 때 캐시(들)(102b)로 정보의 유입을 재생할 수 있는 충분한 데이터를 기록할 수 있음을 관찰하였다. 예를 들어, 이들 유입을 기록하는 한가지 접근법은 처리 유닛 단위로 동작하고 가장 내부의 캐시 계층(예를 들어, L1)에서 동작한다. 이 접근법은 (예를 들어, 실행된 명령어들의 카운트 또는 다른 카운터를 사용하여) 각 데이터 조각을 그 처리 유닛의 L1 캐시로 가져온 실행 중의 시간과 함께, 트레이싱되고 있는 각 처리 유닛에 대해 해당 처리 유닛의 L1 캐시와 관련된 모든 캐시 미스 및 캐시되지 않은 판독(즉, 하드웨어 컴포넌트 및 캐시할 수 없는 메모리로부터의 판독)를 기록하는 것을 수반할 수 있다. 처리 유닛에 걸쳐 정렬될 수 있는 이벤트(예를 들어, 공유된 메모리에 대한 액세스)가 있는 경우, 이러한 이벤트는 (예를 들어, 데이터 스트림에 걸쳐 단조 증가(또는 증가) 번호(monotonically incrementing number, MIN)를 사용함으로써) 결과 데이터 스트림에 걸쳐 로깅될 수 있다.
그러나, L1 캐시 계층은 (예를 들어, 도 2a에 도시된 바와 같이) 상이한 물리적 처리 유닛과 각각 연관된 다수의 별개의 L1 캐시를 포함할 수 있기 때문에, 이러한 방식으로 기록하는 것은 중복 데이터를 기록할 수 있으며, 따라서 보다 많은 데이터가 "최대 충실도(full-fidelity)" 트레이스에 절대적으로 필요하다. 예를 들어, 다수의 물리적 처리 유닛이 동일한 메모리 위치로부터 판독한다면(멀티-스레드 애플리케이션에서 자주 발생할 수 있음), 이 접근 방식은 동일한 메모리 위치에 대한 캐시 미스 및 다수의 물리적 처리 유닛 각각에 대한 데이터를 로깅할 수 있다. 특정한 "최대 충실도" 트레이스는 대체 트레이싱 기법을 사용하여 기록될 수 있는 동일한 정보를 캡슐화하는 더 적은 데이터를 실제로 포함할 수 있지만, 특히, 본 명세서에서 사용되는 "최대 충실도" 트레이스는 트레이싱된 엔티티의 완전 리플레이를 가능하게 하는 충분한 정보를 포함하는 임의의 트레이스이다.
트레이스 파일 크기를 추가로 감소시키기 위해, 본 발명자는 하나 이상의 상위 계층 캐시를 이용하여 이 복제 데이터의 적어도 일부를 기록하는 것을 피하는 개선된 기록 기법을 개발하였다. 대신 이러한 향상된 기법은 이전에 로깅된 데이터를 참조하여 로깅할 수 있거나 많은 상황에서 함께 로깅하는 것을 피할 수 있다.
프로세서가 하나 이상의 상위 캐시 계층의 지식을 검사하는 것에 기반하여 하위 캐시 계층에서 캐시 미스를 로깅하는 것.
제1 실시 예에서, 프로세서는 (특정한 메모리 어드레스로부터의 판독과 같은) 제1 처리 유닛에 의한 활동에 기초하여 내부 또는 "하위 계층" 프로세서 캐시(예를 들어, L1)로의 유입(즉, 캐시 미스)을 검출하고, 그 후 제2 트레이싱된 처리 유닛을 위해서 동일한 데이터(즉, 동일한 메모리 어드레스 및 제1 처리 유닛에 의해 판독된 동일한 값)의 유입이 이미 로깅되었는지 여부를 결정하기 위하여, 하나 이상의 외부 또는 "상위 계층" 공유 프로세서 캐시(들)를 검사한다. 만일 그렇다면, 프로세서는 가능할 때 제2 처리 유닛에 의한 이전 유입을 참조하여 제1 처리에 의한 이러한 후자의 유입을 로깅할 수 있다.
이들 실시 예를 이해하기 위해, 대부분의 환경에서, 상위 계층 캐시는 그 아래의 하위 계층 캐시보다 크며, 종종 다수의 하위 계층 캐시에 대한 백업 저장소라는 점에 유의한다. 예를 들어, 도 2a의 예시적인 환경에서, 각각의 L2 캐시는 2 개의 L1 캐시에 대한 백업 저장소이고, 각각의 L3 캐시는 2 개의 L2 캐시(및 확장에 의해 4 개의 L1 캐시)에 대한 백업 저장소이다. 따라서 상위 계층 캐시는 다수의 하위 계층 캐시에 관한 지식을 유지할 수 있다(예를 들어, 도 2a에서 L2 캐시(L1-Al)는 L1 캐시(L1-Al 및 L1-A2)에 관한 지식을 유지할 수 있고, L2 캐시(L1-A2)는 L1 캐시(L1-A3 및 L1-A4)에 관한 지식을 보유할 수 있고, L3 캐시(L3-A)는 L1 캐시(L1-Al, L1-A2, L1-A3 및 L1-A4)뿐만 아니라 L2 캐시(L2-A1 및 L2-A2)에 관한 지식을 유지할 수 있다). 하나 이상의 상위 캐시 계층의 지식을 이용함으로써, 본 명세서의 실시 예는 다른 처리 유닛을 위해서 이미 로깅된 유입을 참조하여 하나의 처리 유닛에 의해 야기된 유입을 로깅할 많은 기회를 가능하게 한다.
이들 제1 실시 예에 따르면, 도 3은 하나 이상의 상위 레벨 캐시의 지식에 기반하여 이전 로그 데이터를 참조하여 하위 레벨 캐시로의 유입을 기록하는 것에 기반하는 트레이스 기록을 위한 방법(300)의 예를 도시한다. 도 3은 이제 도 1 및 2의 문맥에서 설명된다.
특히, 도 3은 복수의 처리 유닛, 복수의 N 레벨 캐시, 및 복수의 N 레벨 캐시 중 둘 이상과 연관되고 복수의 N 레벨 캐시에 대한 백업 저장소로서 구성된 (N + i) 레벨 캐시를 포함하는 프로세서(102 또는 201a)와 같은 환경에서 동작한다. 방법(300)에서 (그리고 청구범위에서), N 및 i는 양의 정수, 즉 N ≥ 1이므로, N은 1, 2, 3 등과 같고; i ≥ 1이므로, i는 1, 2, 3 등과 같다. 예를 들어, 도 2a의 프로세서(20la)를 참조하면, 프로세서는 복수의 처리 유닛(A1, A2) 등을 포함한다. 프로세서(20la)는 또한 복수의 N 레벨 캐시(L1-Al, L1-A2) 등을 포함한다(즉, 여기서 N은 1이다). 프로세서(201a)는 또한 복수의 N 레벨 캐시 중 둘 이상과 연관되고 복수의 N 레벨 캐시에 대한 백업 저장소로서 구성된 (N + i) 레벨 캐시를 포함한다. 예를 들어, 프로세서(20la)는 N 레벨 캐시(L1-Al 및 L1-A2)에 대한 백업 저장소인 (N + i) 레벨 캐시(L2-A1)를 포함한다(즉, N은 1, i는 1이다). 다른 예에서, 프로세서(20la)는 N 레벨 캐시(L1-Al, L1-A2) 등에 대한 백업 저장소인 (N + i) 레벨 캐시(L3-A)를 포함한다(즉, 여기서 N은 1이고 i는 2이다). 프로세서(102/20la)는 마이크로 코드(102c) 및/또는 회로 로직과 같은 제어 로직에 기반하여 방법(300)을 동작시킨다.
도시된 바와 같이, 방법(300)은 제1 처리 유닛에서의 실행 동안 N 레벨 캐시로의 유입을 검출하는 동작(act)(301)을 포함한다. 일부 실시 예에서, 동작(301)은 복수의 N 레벨 캐시 중 제1 N 레벨 캐시로의 유입을 검출하는 것을 포함하고, 유입은 메모리 위치에 저장된 데이터를 포함한다. 예를 들어, (예를 들어, 애플리케이션(l04c)의 제1 스레드의 정상 또는 추론적 실행으로 인한) 시스템 메모리(202)에 대한 요청된 메모리 액세스와 같은 처리 유닛(A1)에 의한 활동에 기반하여, 캐시 미스가 캐시(L1-Al)에서 발생할 수 있다(즉, N이 1일 때이다). 이와 같이, 캐시(L1-Al)의 라인은 요청된 메모리 위치의 당시 값(then-current value)을 포함하여 데이터의 유입을 획득한다. 캐시 속성들(예를 들어, 무슨 상위 레벨 계층이 존재하는지, 캐시 아키텍처가 포괄적인지 독점적인지의 여부 등) 및 현재 캐시 상태에 따라, 유입은 시스템 메모리(202) 또는 상위 레벨 캐시(예를 들어, L2-A1 및/또는 L3-A)로부터 기인할 수 있다.
방법(300)은 또한 유입 데이터가 제2 처리 유닛에서의 실행에 기반하여 이미 로깅되었는지 여부를 결정하기 위해 (N + i) 레벨 캐시를 검사하는 동작(302)을 포함한다. 일부 실시 예에서, 동작(302)은 제1 N 레벨 캐시로의 유입을 검출하는 것에 기반하여, 메모리 위치에 대한 데이터가 제2 처리 유닛을 위해서 이전에 로깅되었는지 여부를 결정하기 위해 (N +i) 레벨 캐시를 검사하는 것을 포함한다. 예를 들어, (N + i) 레벨 캐시가 (N + 1) 레벨 캐시를 포함하도록 i가 1이면, 프로세서(201)는 (캐시(L1-A2) 및 처리 유닛(A2)의 지식을 갖는) L2-A1과 같은 L2 캐시를 검사할 수 있다. 이 검사는 메모리 위치에 대한 데이터가 처리 유닛(A2)을 위해서 이전에 로깅되었는지 여부를 결정하는 데 사용될 수 있다. 이 데이터는, 예를 들어, 캐시(L1-A2)에서 캐시 미스를 야기한 처리 유닛 A2에서 애플리케이션(l04c)의 제2 스레드의 사전 실행에 기반하여 이전에 로깅된 것일 수 있다. 대안적인 예에서, (N + i) 레벨 캐시가 (N + 2) 레벨 캐시를 포함하도록 i가 2 인 경우, 프로세서(201)는 (프로세서(201)의 다른 모든 캐시의 지식을 갖는) 캐시(L3-A)와 같은 L2 캐시를 검사할 수 있다. 이 검사는 (예를 들어, 애플리케이션(l04c)의 하나 이상의 다른 스레드(들)의 사전 실행에 기반하여 캐시(L1-A2, L1-A3 및/또는 L1-A4)에서 캐시 미스(들)를 야기한 처리 유닛(A2-A4) 중 하나 이상에서) 메모리 위치에 대한 데이터가 임의의 처리 유닛(A2-A4)을 위해서 이전에 로깅되었는지 여부를 결정하는데 사용될 수 있다. 이 제2 예에서 L2 캐시는 검사에서 스킵될 수 있음을 주의한다.
도시된 바와 같이, 동작(302)은 매번 i의 값을 증가시키면서, 임의의 횟수 만큼 반복될 수 있다. i는 전형적으로 매번 1 씩 증분될 것이지만, 1보다 큰 양의 정수만큼 증분하는 실시 예가 있을 수 있다. 반복 동작(302)의 효과는 i를 증분하는 동안 다수의 상위 레벨 캐시를 검사하는 것이다. 예를 들어, i = 1이면, 동작(302)이 초기에 실행될 때 프로세서(201)가 L2 캐시 계층(예를 들어, L2-A1 및/또는 L2-A2)을 검사할 수 있다. 적용 가능한 메모리 위치에 관한 불충분한 지식이 L2 캐시에서 발견되면, 프로세서(201)는 i = 2로 동작(302)을 반복하여, L3 캐시 계층(예를 들어, L3-A)을 검사할 수 있다. 이는 컴퓨팅 환경이 제공하는 만큼 많은 레벨의 캐시에 대해 계속될 수 있다. i가 1보다 큰 값만큼 증가하면 하나 이상의 캐시 계층(들)을 그 과정에서 스킵할 수 있다. 독점적 캐시를 제공하거나 하이브리드 포괄적/독점적 행동을 보여주는 캐시를 제공하는 아키텍처에서 다중 캐시 레벨을 확인하는 것이 유리할 수 있음을 이해할 것이다. 이는 이러한 아키텍처에서 외부 캐시 계층이 내부 캐시 계층(들) 내의 데이터의 전체 수퍼세트를 포함한다고 보장할 수 없기 때문이다.
전술한 점을 고려하여, 방법(300)은 (N + i) 레벨 캐시가 (N + 1) 레벨 캐시를 포함하도록 i가 1 이고, 프로세서가 또한 (N + 1) 레벨 캐시를 위한 백업 저장소로서 구성된 (N + 2) 레벨 캐시를 포함하는, 프로세서(102 또는 201a)와 같은 환경에서 동작할 수 있음을 이해할 것이다. 이러한 환경에서, 메모리 위치에 대한 데이터가 제2 처리 유닛을 위해서 이전에 로깅되었는지 여부를 결정하기 위해 (N + 1) 레벨 캐시를 검사하는 것(즉, 동작(302))은 (N + 1) 레벨 캐시 내의 어느 캐시 라인도 메모리 위치에 대응하지 않는다고 결정하는 것을 포함한다. 또한, (N + 2) 레벨 캐시를 검사하여 메모리 위치에 대한 데이터가 제2 처리 유닛을 위해서 이전에 로깅되었는지 여부를 결정한다.
도시된 바와 같이, 동작(302)의 결과에 기반하여, 방법은 데이터가 이미 로깅되었을 때 참조에 의해 유입을 로깅하는 동작(303); 또는 데이터가 이미 로깅되지 않았을 때, 값으로 유입을 로깅하는 동작(304)을 포함한다.
일부 실시 예에서, 동작(303)은, 메모리 위치에 대한 데이터가 제2 처리 유닛을 위해서 이전에 로깅되었을 때, 제2 처리 유닛을 위해서 이전에 로깅된 로그 데이터를 참조하여 메모리 위치에 대한 데이터가 제1 처리 유닛을 위해서 로깅되도록 하는 단계를 포함한다. 상기 예를 계속하면, 예를 들어, (캐시(L1-A2)로의 유입에 기반하여) (N + 1) 레벨 캐시(L2-A1)의 검사 및/또는 (N + 2) 레벨 캐시(L3-A)의 검사가 데이터/메모리 위치가 처리 유닛(A2)을 위해서 이미 로깅되었다고 결정하는 것을 초래하면, 프로세서(201a)는 처리 유닛(A2)에 대하여 만들어진 로그 항목을 참조하여 처리 유닛(A1)을 위해서 캐시(L1-Al)로의 유입이 로깅되도록할 수 있다. 참조에 의한 로깅이 어떻게 달성될 수 있는지의 예는 나중에 제공된다.
동작(302)의 대안적인 결과로 돌아가서, 일부 실시 예에서, 동작(304)은 메모리 위치에 대한 데이터가 제2 처리 유닛을 위해서 이전에 로깅되지 않았을 때, 메모리 위치에 대한 데이터가 제1 처리 유닛을 위해서 값으로 로깅되게 하는 것을 포함한다. 예를 들어, (N + 1) 레벨 캐시(L2-A1)의 검사 및/또는 (N + 2) 레벨 캐시(L3-A)의 검사로 인해 데이터/메모리 위치가 다른 처리 유닛을 위해서 이미 로깅되지 않았다고 결정하면, 프로세서(20la)는 처리 유닛(A1)을 위해서 캐시(L1-Al)로의 유입이 값으로 로깅되게할 수 있다. 값에 의한 로깅은 예를 들어, 처리 유닛(A1)을 위해 데이터 패킷 내의 메모리 어드레스 및 메모리 값을 로깅하는 것을 포함할 수 있다. 값에 의한 로깅은 실제 로깅을 달성하는 데 필요한 비트 수를 줄이기 위해 임의의 수의 압축 기법을 포함할 수 있다는 것을 유의해야 한다.
도 1과 관련하여 설명된 바와 같이, 프로세서(들)(102)는 트레이스 데이터를 일시적으로 저장하기 위해 사용될 수 있는 버퍼(들)(102e)를 포함할 수 있다. 따라서, 방법(300)에서, 상이한 유형의 데이터가 로깅되게 "초래하는 것(causing)"은 프로세서(102)가 그러한 데이터를 버퍼(들)(102e)에 저장하는 것을 포함할 수 있다. 부가적으로 또는 대안적으로, 그것은 프로세서(102)가 그러한 데이터를 트레이서(l04a)에 전달하는 것, 그러한 데이터를 트레이스 데이터 저장소(104e)에 기입하는 것, 및/또는 트레이서(l04a)에게 데이터가 버퍼(들)(102e)에서 이용 가능하다고 통지하는 것을 포함할 수 있다. 일부 실시 예에서, 버퍼(들)(102e)는 캐시(들)(102b)의 하나 이상의 예약된 부분을 포함할 수 있다. 따라서, 동작들(304/304)에서, 버퍼들(102e)을 사용하여, 메모리 위치에 대한 데이터가 제1 처리 유닛을 위해서 참조로 또는 값으로 로깅되게 하는 것은 프로세서 사이클, 메모리 위치, 버스 대역폭 등과 같은 리소스의 이용 가능성에 기반하여 로깅을 지연시키는 것을 포함할 수 있다. 버퍼(들)(102e)가 캐시(들)(102b)의 하나 이상의 예약된 부분을 포함하는 실시 예에서, 지연된 로깅은 지연된 로깅을 위해 메모리 위치에 대한 데이터를 유지하기 위해, 제거하는 것이 아니라 (N 레벨 캐시 및/또는 (N + i) 레벨 캐시 내의) 캐시 라인을 무효화하는 것을 포함할 수 있다.
방법(300)의 설명은 하위 계층 캐시에 관한 "지식"을 갖는 상위 계층 캐시를 언급하였다. 상위 계층 캐시가 하위 레벨 캐시에 관하여 유지하는 특정 형태의 "지식"은 달라질 수 있으며 이제 예가 이어진다.
기본 형태에서, 이 "지식"은 하위 레벨 캐시(들)의 캐시 라인(들)에 대응하는 상위 레벨 캐시에서의 캐시 라인(즉, 동일한 메모리 위치 및 메모리 데이터에 대응하는 캐시 라인)의 존재에 불과할 수 있다. 위에서 언급한 바와 같이, 포괄적 캐시에서 상위 계층(들)은 아래의 계층(들)에서의 데이터의 수퍼세트를 저장한다. 예를 들어, 도 2a의 캐시가 포괄적이라고 가정한다. 이 경우, 처리 유닛(A2)에 의한 활동으로 인해 시스템 메모리(202)로부터의 위치가 캐시(L1-A2) 내로 임포트(import)되게 할 때, 동일한 메모리 위치가 또한 캐시(L2-A1 및 L3-A)에 캐시된다. 처리 유닛(A2)의 활동이 트레이싱되고 있다면, 실시 예들은 메모리 위치 및 그 값이 처리 유닛(A2)을 위해서 로깅되게할 수 있다. 나중에, 처리 유닛(A1)에 의한 활동으로 인해 시스템 메모리(202)로부터의 동일한 위치가 캐시(L1-Al) 내로 임포트되게 하고, 그 위치가 여전히 동일한 데이터를 저장한다면, 그것은 캐시(L2-A1)로부터 서비스되는데, 캐시(L2-A1)가 이미 데이터를 갖고 있기 때문이다. 종래 기법들은 캐시(L2-A1)로 유입되는 것에 기반하여 처리 유닛(A1)을 위하여 이 데이터를 다시 로깅할 수 있다. 그러나, 본 명세서의 실시 예들은 메모리 위치 및 그 값이 캐시(L2-A1)에 이미 존재하였고 따라서 캐시(L1-A2)에 이미 존재하였다는 것을 인식할 수 있다. 처리 유닛(A2)이 로깅되고 있기 때문에, 실시 예들은 메모리 위치 및 그 값이 처리 유닛(A2)을 위해서 이미 로깅되었음을 인식할 수 있고, 따라서 처리 유닛(A1)의 이 새로운 활동이 처리 유닛(A2)을 위해서 이전에 기록된 로그 데이터를 참조하여 로깅되게 한다.
상위 계층 캐시에 의한 보다 정교한 형태의 "지식"도 또한 가능하다. 예를 들어, 실시 예는 프로세서(102)가 어카운팅 비트를 구현하는 각각의 캐시 라인에 대해 (캐시 라인을 로깅한 처리 유닛(들)의 아이덴티티로 잠재적으로) 캐시 라인이 로깅되었는지 여부를 식별할 수 있게 하는 추가적인 "어카운팅"(또는 로깅) 비트를 사용하여 하나 이상의 캐시 계층에서 캐시 라인을 확장할 수 있다. 이들 개념을 이해하기 위해, 도 4a는 도 2b의 공유 캐시(203)와 유사한 예시적인 공유 캐시(400a)를 도시하며, 여기서 캐시 라인(404) 각각은 하나 이상의 추가 어카운팅 비트(들)(401)를 포함한다. 따라서, 각각의 캐시 라인(404)은 어카운팅 비트(들)(401), 종래의 어드레스 비트(402) 및 값 비트(403)를 포함한다.
대안적으로, 도 4b는 메모리 어드레스들(402) 및 값들(403)을 저장하는 종래의 캐시 라인들(405), 및 종래의 캐시 라인들(405)에 적용되는 어카운팅 비트들을 저장하기 위한 하나 이상의 예약된 캐시 라인(들)(406)을 포함하는 공유 캐시(400b)의 예를 도시한다. 예약된 캐시 라인(들)(406)의 비트는 각각 종래의 캐시 라인(405) 중 상이한 것에 대응하는 상이한 그룹의 어카운팅 비트에 할당된다.
도 4b의 예의 변형에서, 예약된 캐시 라인(들)(406)은 세트-연관 캐시의 각 인덱스에서 하나의(또는 그 이상의) 웨이(way)로서 예약될 수 있다(이후에 더 상세히 설명된다). 예를 들어, 세트 내의 8-웨이 세트-연관 캐시는 세트의 다른 7 개의 웨이에 적용되는 어카운팅 비트를 위해 예약될 수 있다. 이는 예약된 캐시 라인을 구현하는 복잡성을 감소시키고 주어진 세트의 모든 웨이가 일반적으로 대부분의 프로세서에 의해 병렬로 판독되기 때문에 예약된 캐시 라인에 대한 액세스 속도를 높일 수 있다.
어카운팅 비트가 실제로 어떻게 저장되는지에 관계없이, 각각의 캐시 라인의 어카운팅 비트(들)(401)는 캐시 라인 내의 현재 값이 처리 유닛을 위해서 로깅되었는지(또는 대안적으로 로깅에 참여하는 처리 유닛에 의해 소비되었는지) 여부를 표시하기 위하여 프로세서(들)(102)에 의해 사용되는 플래그(즉, 온 또는 오프)로서 기능하는 하나 이상의 비트를 포함할 수 있다. 따라서, 동작(302)에서의 검사는 이러한 플래그를 사용하여 캐시 라인이 로깅에 참여하는 처리 유닛에 의해 로깅되었는지 여부를 결정하는 것을 포함할 수 있다.
대안적으로, 각각의 캐시 라인의 어카운팅 비트(401)는 복수의 비트를 포함할 수 있다. 복수의 비트가 여러 웨이에서 사용될 수 있다. 본 명세서에서 "유닛 비트(unit bit)"로 지칭되는 하나의 접근법을 사용하여, 각각의 캐시 라인의 어카운팅 비트(401)는 프로세서(102)의 처리 유닛(102a)의 수(예를 들어, 프로세서(102)가 하이퍼-스레딩을 지원한다면, 논리적 처리 유닛의 수 또는 하이퍼-스레딩이 지원되지 않는다면, 물리적 처리 유닛의 수)와 동일한 수의 유닛 비트를 포함할 수 있다. 이들 유닛 비트는 프로세서(102)에 의해 어느 하나 이상의 특정 처리 유닛(들)이 캐시 라인(있는 경우)을 로깅했는지를 추적하는데 사용될 수 있다. 따라서, 예를 들어, 2 개의 처리 유닛(102a)에 의해 공유되는 캐시는 2 개의 유닛 비트를 각각의 캐시 라인과 연관시킬 수 있다.
본 명세서에서 "인덱스 비트(index bit)"로 지칭되는 복수의 어카운팅 비트(401)를 사용하는 다른 접근법에서, 각 캐시 라인의 어카운팅 비트(401)는 잠재적으로 "예약된" 값(예를 들어, -1)과 함께, 로깅에 참여하는 컴퓨터 시스템(101)의 프로세서(102)의 각각의 처리 유닛(102a)에 대한 인덱스를 나타내기에 충분한 다수의 인덱스 비트를 포함할 수 있다. 예를 들어, 프로세서(102)가 128 개의 처리 유닛(102a)을 포함하는 경우, 이들 처리 유닛은 캐시 라인 당 7 개의 인덱스 비트만을 사용하는 인덱스 값(예를 들어, 0-127)에 의해 식별될 수 있다. 일부 실시 예들에서, 프로세서가 캐시 라인에 로깅하지 않았다는 것을 표시하기 위해 하나의 인덱스 값(예를 들어, "유효하지 않음(invalid)")이 예약된다. 따라서, 이것은 7 개의 인덱스 비트가 실제로 127 개의 처리 유닛들(102a)과 예약된 값을 나타낼 수 있을 것이라는 것을 의미할 것이다. 예를 들어, 이진 값 0000000-1111110은 인덱스 위치 0-126(10 진수)에 해당하고 이진 값 1111111(예를 들어, 해석에 따라 -1 또는 127 십진수)은 "유효하지 않음"에 해당하여 프로세서가 해당 캐시 라인에 로깅하지 않았음을 표시할 수 있지만, 이 표기법은 구현에 따라 다를 수 있다. 따라서, 유닛 비트는 캐시 라인이 로깅되었는지(예를 들어, -1 이외의 값)를 표시하기 위해 그리고 캐시 라인에 로깅한 특정 처리 유닛(예를 들어, 가장 최근에 소비한 처리 유닛)에 대한 인덱스로서 프로세서(102)에 의해 사용될 수 있다. 복수의 어카운팅 비트(401)를 사용하는 이러한 제2 접근법은 캐시(102b)에서 오버헤드가 거의 없는 다수의 처리 유닛을 지원하는 이점을 가지며, 제1 접근법보다 세분성(granularity)이 적다는 단점이 있다(즉, 하나의 처리 유닛만이 한 번에 식별된다).
전술한 내용을 고려하여, 동작(302)에서, (N + i) 레벨 캐시를 검사하여 메모리 위치에 대한 데이터가 제2 처리 유닛을 위해서 이전에 로깅되었는지 여부를 결정하는 것은 메모리 위치에 대응하는 (N + i) 레벨 캐시의 캐시 라인이 하나 이상의 어카운팅 비트 세트를 갖는지의 여부를 결정하는 것을 포함한다.
캐시 라인이 로깅되었는지 여부를 결정하는 데 사용될 수 있는 또 다른 메커니즘은 세트-연관 캐시(set-associative cache) 및 웨이-락킹(way-locking)을 사용하는 것이다. 프로세서의 캐시(102b)는 일반적으로 시스템 메모리(103)보다 (종종 몇 배(by orders of magnitude)) 훨씬 작기 때문에, 따라서 캐시(102b)의 임의의 주어진 계층에 라인이 있는 것보다 시스템 메모리(103)에 보통 훨씬 더 많은 메모리 위치가 존재한다. 이와 같이, 일부 프로세서는 시스템 메모리의 다수의 메모리 위치를 하나 이상의 캐시 계층의 라인(들)에 매핑하기 위한 메커니즘을 정의한다. 프로세서는 일반적으로 직접 매핑 및 연관(또는 세트-연관) 매핑이라는 두 가지 일반적인 기법 중 하나를 사용한다. 직접 매핑을 사용하여, 시스템 메모리(103)의 상이한 메모리 위치는 캐시 계층에서 단지 하나의 라인에 매핑되어, 각 메모리 위치는 그 계층의 특정 라인으로만 캐싱될 수 있다.
한편, 세트-연관 매핑을 사용하면, 시스템 메모리(103)의 상이한 위치가 캐시 계층의 다중 라인 중 하나에 캐싱될 수 있다. 도 5는 시스템 메모리와 캐시 사이의 세트-연관 매핑의 예(500)를 도시한다. 여기서, 캐시 계층(502)의 캐시 라인(504)은 각각 2 개의 캐시 라인(504a 및 504b)의 제1 세트(인덱스 0으로 식별됨) 및 2 개의 캐시 라인(504c 및 504d)의 제2 세트(인덱스 1로 식별됨)를 포함하는 2 개의 캐시 라인의 상이한 세트로 논리적으로 파티셔닝된다. 세트 내의 각각의 캐시 라인은 상이한 "웨이(way)"로서 식별되어, 캐시 라인(504a)은 인덱스 0, 웨이 0으로 식별되고, 캐시 라인(504b)은 인덱스 0, 웨이 1로 식별된다. 추가로 도시된 바와 같이, 메모리 위치(503a, 503c, 503e 및 503g)(메모리 인덱스 0, 2, 4 및 6)는 인덱스 0에 매핑된다. 따라서, 시스템 메모리에서 이들 위치 각각은 인덱스 0에서 세트 내의 임의의 캐시 라인(즉, 캐시 라인(504a 및 504b))에 캐싱될 수 있다. 도시된 매핑의 특정 패턴은 단지 예시적이고 개념적인 목적을 위한 것이며, 메모리 인덱스가 캐시 라인에 매핑될 수 있는 유일한 방식(way)으로서 해석되어서는 안된다.
세트-연관 캐시는 일반적으로 N-웨이 세트-연관 캐시로 지칭되며, 여기서 N은 각 세트의 "웨이"의 수이다. 따라서, 도 5의 캐시(500)는 2-웨이 세트-연관 캐시로 지칭될 것이다. 프로세서는 일반적으로 N-웨이 캐시를 구현하며, 여기서 N은 2의 거듭 제곱(예를 들어, 2, 4, 8 등)이고, 4 및 8의 N 값이 일반적으로 선택된다(본 명세서의 실시 예는 임의의 특정 N-값 또는 N-값의 서브세트에 한정되지 않는다). 특히, l-웨이 세트-연관 캐시는 일반적으로 직접 매핑 캐시와 동일한데, 이는 각 세트가 하나의 캐시 라인만 포함하기 때문이다. 또한 N이 캐시의 라인 수와 같으면, 캐시의 모든 라인을 포함하는 단일 세트를 포함하므로 완전 연관 캐시(fully associative cache)라고 지칭된다. 완전 연관 캐시에서 임의의 메모리 위치는 캐시의 임의의 라인에 캐싱될 수 있다.
도 5는 일반적인 원리를 설명하기 위해 시스템 메모리 및 캐시의 단순화된 뷰를 나타낸다. 예를 들어, 도 5는 개별 메모리 위치를 캐시 라인에 매핑하지만, 캐시의 각 라인은 시스템 메모리의 다수의 어드레서블 위치와 관련된 데이터를 저장할 수 있음을 이해할 것이다. 따라서, 도 5에서, 시스템 메모리(501)의 각 위치(503a-503h)는 실제로 복수의 어드레서블 메모리 위치를 나타낼 수 있다. 부가적으로, 매핑은 시스템 메모리(501)의 실제 물리적 어드레스와 캐시(502)의 라인 사이에 있을 수 있거나, 가상 어드레스의 중간 계층을 사용할 수 있다.
세트-연관 캐시는 웨이-락킹의 사용을 통하여 캐시 라인이 로깅되었는지 여부를 결정하는 데 사용될 수 있다. 웨이-락킹은 어떤 목적으로 캐시에서 하나 이상의 웨이를 락킹하거나 예약한다. 특히, 본 명세서의 실시 예는 트레이싱되고 있는 처리 유닛에 대한 하나 이상의 웨이를 예약하기 위해 웨이-로킹을 이용하여, 락킹된/예약된 웨이가 그 유닛의 실행과 관련된 캐시 미스를 저장하기 위해 독점적으로 사용된다. 따라서, 도 5를 다시 참조하면, "웨이 0"이 트레이싱된 처리 유닛에 대해 락킹되었다면, 캐시 라인(504a 및 504c)(즉, 인덱스 0, 웨이 0 및 인덱스 1, 웨이 0)은 그 유닛의 실행과 관련된 캐시 미스에 대하여 독점적으로 사용될 것이고, 나머지 캐시 라인은 다른 모든 캐시 미스에 사용될 것이다. 따라서, 특정 캐시 라인이 로깅되었는지 여부를 결정하기 위해, 프로세서(102)는 "N + 1" 캐시 계층에 저장된 캐시 라인이 트레이싱된 처리 유닛을 위해 예약된 웨이의 일부인지 여부를 결정하기만 하면된다.
전술한 내용을 고려하여, 동작(302)에서, (N + i) 레벨 캐시를 검사하여 메모리 위치에 대한 데이터가 제2 처리 유닛을 위해서 이전에 로깅되었는지 여부를 결정하는 것은 상기 메모리 위치에 대응하는 (N + i) 레벨 캐시의 캐시 라인이 로깅된 처리 유닛에 대응하는 웨이에서 저장되는지 여부를 결정하는 것을 포함할 수 있다는 것을 이해할 것이다.
앞서 설명된 바와 같이, 캐시는 CCP에 따라 동작하며, CCP는 처리 유닛이 캐시 데이터로부터 판독하고 기입할 때 다양한 캐시들 사이에서 일관성이 유지되는 방법 및 처리 유닛이 캐시 내의 주어진 장소로부터 항상 유효한 데이터를 판독하도록 보장하는 방법을 정의한다. 이와 같이, 캐시 작동과 관련하여, 프로세서(102)는 CCP 상태 데이터를 유지 및 저장한다. 상이한 프로세서들 및/또는 상이한 CCP들이 캐시 일관성 상태를 추적하고 그 캐시 일관성 데이터를 트레이서(104a)에 이용 가능하게 하는 세분성은 변할 수 있다. 예를 들어, 스펙트럼의 한쪽 끝에서 일부 프로세서/CCP는 캐시 라인 별로 및 처리 유닛 별로 캐시 일관성을 추적한다. 그러므로, 이들 프로세서/CCP는 각각의 처리 유닛과 관련될 때 각각의 캐시 라인의 상태를 추적할 수 있다. 이것은 단일 캐시 라인이 각각의 처리 유닛(102a)과 관련될 때 그 상태에 관한 정보를 가질 수 있음을 의미한다. 다른 프로세서/CCP는 덜 세분화되어 있으며 캐시 라인 레벨의 캐시 일관성만 추적한다(처리 유닛 당 정보가 부족하다). 스펙트럼의 다른 쪽 끝에서 프로세서 제조업체는 효율성을 위해서만 캐시 라인 레벨에서 캐시 일관성을 추적하도록 선택할 수 있는데, 이는 한 번에 하나의 프로세서만 독점적으로(독점, 수정 등) 라인을 소유할 수 있기 때문이다. 중간 세분성의 예로서, 프로세서/CCP는 캐시 라인 당 캐시 일관성뿐만 아니라 현재 캐시 라인 상태를 갖는 처리 유닛에 대한 인덱스(예를 들어, 4 개의 처리 유닛 프로세서에 대하여 0, 1, 2, 3)를 추적할 수 있다.
주어진 프로세서에서 CCP 상태 데이터가 유지되는 세분성에 관계없이 이 CCP 상태 데이터는 (N + i) 레벨 캐시가 캐시된 데이터에 대해 가지고 있는 "지식"에 포함될 수 있다. 특히, (N + i) 레벨 캐시에서 주어진 캐시 라인과 연관된 CCP 상태 데이터는 그 캐시 라인이 처리 유닛들 중 하나에 의해 로깅되었는지 여부를 결정하는데 사용될 수 있다. 예를 들어, CCP 상태 데이터가 특정 처리 유닛이 주어진 캐시 라인을 "공유(shared)"인 것으로 간주한다고 표시한다면, 이 데이터는 차례로 처리 유닛이 캐시 라인으로부터의 판독을 로깅하였다고 결정하는 데 사용될 수 있다. 따라서, 동작(302)에서, (N + i) 레벨 캐시를 검사하여 메모리 위치에 대한 데이터가 제2 처리 유닛을 위해서 이전에 로깅되었는지 여부를 결정하는 것은, 캐시 라인이 로깅되었다고 결정하는데 사용할 수 있는 연관 CCP 상태 데이터를 메모리 위치에 대응하는 (N + i) 레벨 캐시의 캐시 라인이 가지는지 여부를 결정하는 것을 포함할 수 있다는 것을 이해할 것이다.
동작(303)에서, 데이터의 유입은 이전에 로깅된 데이터(전형적으로 현재 유입을 유발한 것과 상이한 처리 유닛에 의해 로깅된 데이터)를 참조하여 로깅될 수 있다. 참조에 의한 로깅은 다양한 방법(방법의 조합을 포함함) 중 하나 이상을 사용하여 달성될 수 있으며, 그 중 일부가 이제 설명된다.
제1 방법은 이전에 로깅된 메모리 어드레스를 참조하여 로깅한다. 예를 들어, 도 2a의 처리 유닛(A2)이 (즉, 시스템 메모리(202) 내의) 특정 메모리 어드레스를 나타내는 데이터 및 그 메모리 어드레스에 저장된 특정 데이터를 로깅했다고 가정하자. 나중에, 그 특정 메모리 어드레스/특정 데이터가 처리 유닛(A1)에 대한 유입이라면, 처리 유닛(A1)은 (i) 특정 메모리 어드레스 및 (ii) 처리 유닛(A2)을 식별하는 로그 항목을 저장할 수 있다. 여기서, 처리 유닛(A1)은 메모리 어드레스에 저장된 실제 데이터(대규모 크기일 수 있음)를 재로깅하는 것을 피했다. 이러한 제1 방법의 일부 변형은 또한 처리 유닛(A1 및 A2)을 위해 데이터 스트림에 걸쳐 증가하는 시리즈로부터의 MIN과 같은 정렬 데이터를 저장할 수 있다. 이 MIN은 나중에 처리 유닛(A2)에서 하나 이상의 이벤트(예를 들어, 동일한 시리즈로부터의 MIN과 또한 연관된 이벤트)에 대해 처리 유닛(A1)에 의한 유입을 정렬하는데 사용될 수 있다. 따라서, 동작(303)에서, 제2 처리 유닛을 위해서 이전에 로깅된 로그 데이터를 참조하여 메모리 위치에 대한 데이터가 제1 처리 유닛을 위해서 로깅되게 하는 것은 메모리 위치의 어드레스를 로깅하는 것, 또는 MIN과 같은 정렬 데이터 및 메모리 위치의 어드레스를 로깅하는 것 중 하나 이상을 포함할 수 있다.
제2 방법은 데이터를 저장하는 캐시 라인의 이전 소유자를 참조하여 로깅한다. 예를 들어, 도 2a의 처리 유닛(A2)이 제1 유입 데이터를 로깅했다고 가정한다. 또한, 제1 유입으로 인해 데이터가 (N + i) 레벨 캐시(예를 들어, 캐시(L2-A1))의 캐시 라인에 캐싱되게 하여, 처리 유닛(A2)이 캐시 라인의 소유자로 식별되었다고 가정하자. 나중에, 처리 유닛(A1)이 동일한 데이터의 제2 유입을 야기하면, 처리 유닛(A1)은 (N + i) 레벨 캐시에서 이 캐시 라인의 소유자가될 수 있다. 그 후 처리 유닛(A1)은 캐시 라인의 이전 소유자(즉, 처리 유닛(A2))를 식별하는 로그 항목을 저장하여 A2의 로그 항목이 나중에 데이터를 얻기 위해 사용될 수 있게 한다. 이는 참조에 의한 로깅이 캐시 라인의 이전 소유자와 함께 캐시 라인의 아이덴티티를 기록하는 것을 포함할 수 있음을 의미한다(예를 들어, 메모리 어드레스 및 메모리 값의 기록을 잠재적으로 피할 수 있다). 따라서, 동작(303)에서, 제2 처리 유닛을 위해서 이전에 로깅된 로그 데이터를 참조하여 메모리 위치에 대한 데이터가 제1 처리 유닛을 위해서 로깅되게 하는 것은, 메모리 위치에 대응하는 캐시 라인의 이전 소유자로서 제2 처리 유닛을 로깅하는 것을 포함할 수 있다.
제3 방법은 CCP 데이터를 참조하여 로깅한다. 예를 들어, 언급된 바와 같이, CCP는 상이한 처리 유닛이 판독 및 기록을 위해 이를 취함에 따라 각 캐시 라인에 관한 캐시 일관성 상태를 저장할 수 있다. 이 데이터의 세분성은 프로세서 구현에 따라 달라질 수 있지만, 예를 들어, 각각의 처리 유닛과 관련하여 각각의 캐시 라인의 캐시 일관성 상태를 추적하고, 현재 캐시 라인 상태 등을 소유하는 처리 유닛의 인덱스(예를 들어, 0, 1, 2, 3 등)와 함께 각 캐시 라인의 캐시 일관성 상태를 추적할 수 있다. 제3 방법은 사용 가능한 CCP 데이터를 사용하여 어느 처리 유닛(들)이 캐시 라인에 대한 캐시 일관성 상태를 이전에 소유했는지, 어느 처리 유닛(들)이 캐시 라인의 값을 로깅했는지 식별하기 위하여 어느 캐시 일관성 상태가 사용될 수 있는지 추적한다. 이는 참조에 의한 로깅이 캐시 라인에 대한 CCP 데이터를 기록하는 것을 포함할 수 있음(예를 들어, 메모리 어드레스 및 메모리 값을 기록하는 것을 다시 잠재적으로 피할 수 있음)을 의미한다. 따라서, 동작(303)에서, 제2 처리 유닛을 위해서 이전에 로깅된 로그 데이터를 참조하여 메모리 위치에 대한 데이터가 제1 처리 유닛을 위해서 로깅되게 하는 것은 제2 처리 유닛을 참조하는 CCP 데이터를 로깅하는 것을 포함할 수 있다.
제4 방법은 캐시 웨이를 참조하여 로깅한다. 언급된 바와 같이, 세트-연관 캐시는 웨이-락킹의 사용을 통하여 캐시 라인이 로깅되었는지 여부를 결정하는 데 사용될 수 있다. 예를 들어, 웨이 락킹이 처리 유닛(P2)을 위한 하나 이상의 웨이를 예약하는데 사용되고 P2가 데이터의 제1 유입을 로깅한다고 가정하자. 제1 유입은 또한 (N + i) 레벨 캐시(예를 들어, 캐시(L2-A1))가 그 웨이와 연관된 캐시 라인에 제1 유입의 데이터를 저장하는 것을 초래한다. 다른 처리 유닛(예를 들어, Pl)이 동일한 데이터의 제2 유입을 가질 때, (N + i) 레벨 캐시에 이 캐시 라인이 존재한다는 것은 P2가 이미 데이터를 로깅했음을 나타낸다. 실시 예는 캐시 라인이 저장되는 웨이에 주목하는 것에 기반하여 P2의 로그 데이터에 대한 참조를 로깅할 수 있고, 다시 메모리 어드레스 및 메모리 값의 로깅을 잠재적으로 피할 수 있다. 이 실시 예는 또한 P1과 P2 사이의 이벤트를 정렬하기 위해 정렬 정보(예를 들어, MIN)를 기록하는 것과 관련되어 사용될 수 있다. 따라서, 동작(303)에서, 제2 처리 유닛을 위해서 이전에 로깅된 로그 데이터를 참조하여 메모리 위치에 대한 데이터가 제1 처리 유닛을 위해서 로깅되게 하는 것은 캐시 웨이에 대한 참조를 로깅하는 것, 캐시 웨이의 참조 및 정렬 데이터를 로깅하는 것 중 하나 이상을 포함할 수 있다.
제2 처리 유닛에 의한 사전 유입에 기반하여 제1 처리 유닛에 대한 유입을 로깅하는 것 외에도, 실시 예는 또한 단일 처리 유닛에 의해 동일한 데이터의 다수의 유입이 있을 때 로깅을 감소(및 심지어 제거)하기 위한 최적화를 포함한다. 예를 들어, 도 2a를 참조하면, 처리 유닛(A1)은 메모리 위치에서 특정 데이터에 대해 N 레벨 캐시(예를 들어, L1-Al 캐시)에서 캐시 미스를 야기할 수 있다. 이에 응답하여, 캐시 체계는 그 데이터를 L1-Al 캐시로, 잠재적으로 또한 (N + i) 레벨 캐시(예를 들어, L2-A1 캐시 및/또는 L3-A 캐시)로 임포트할 수 있다. 또한, 유입은 처리 유닛(A1)을 위하여 값으로 로깅될 수 있다. 나중에 이 데이터는 L1-Al 캐시로부터 제거될 수 있다. 일반적인 캐시 환경에서 이로 인해 L2-A1 캐시 및/또는 L3-A 캐시로부터 데이터가 사전에 제거될 수 있다. 그러나, L2-A1 및/또는 L3-A 캐시에서 제거(들)를 초래하는 대신, 실시 예는 대신 이들 (N + i) 레벨 캐시 중 하나 이상에 적절한 캐시 라인(들)을 유지할 수 있다. 따라서, 방법(300)은 메모리 위치에 대응하는 (N + i) 레벨 캐시에서 제2 캐시 라인을 유지하면서, 메모리 위치에 대응하는 제1 N 레벨 캐시에서 제1 캐시 라인을 제거하는 것을 포함할 수 있다.
나중에, 처리 유닛(A1)이 동일한 데이터에 대한 L1-Al 캐시에서의 후속 캐시 미스를 야기하면, (N + i) 레벨 캐시(예를 들어, L2-A1 및/또는 L3-A 캐시)의 보유 캐시 라인(들)를 사용하여 이 데이터가 처리 유닛(Al)을 위해서 이미 로깅되었다고 결정할 수 있다. 따라서, 일부 실시 예들에서, 이 후속 캐시 미스는 처리 유닛(A1)에 의해 이전 로그 항목을 참조하여 로깅된다. 다른 실시 예들에서, 처리 유닛(A1)은 이미 그 트레이스에 데이터를 갖기 때문에, 이 후속 캐시 미스에 대해 로그 항목이 완전히 생략될 수 있다. 따라서, 방법(300)은, 제1 N 레벨 캐시로의 후속 유입(후속 유입은 또한 메모리 위치에 저장된 데이터를 포함함)을 검출하는 것에 기반하여, 후속 유입이 제2 캐시 라인의 존재에 기반하여 참조에 의해 로깅되게 하는 것을 포함할 수 있다. 추가적으로 또는 대안적으로, 방법(300)은 (i) 제1 처리 유닛에서의 추가 코드 실행에 기반하여 제1 N 레벨 캐시로의 후속 유입(후속 유입은 또한 메모리 위치에 저장된 데이터를 포함함)을 검출하는 것, 및 (ii) 제1 N 레벨 캐시로의 후속 유입을 검출하는 것에 적어도 기반하여 그리고 제2 캐시 라인의 존재에 적어도 기반하여, 후속 유입이 로깅될 필요가 없다고 결정하는 것을 포함할 수 있다.
프로세서가 하나 이상의 상위 캐시 계층을 검사하는 것에 기초하여 하위 캐시 계층에서 로깅하는 이러한 제1 실시 예는 도 3의 방법(300)을 구현하는 프로세서 제어 로직(예를 들어, 회로 및/또는 마이크로 코드)으로서 구현될 수 있음을 이해할 것이다. 이와 같이, 이러한 실시 예를 구현하는 프로세서(102)는 방법(300)에서 약술된 것처럼, 하위 계층(예를 들어, L1) 캐시로의 유입을 검출한 다음, (잠재적으로 점진적으로) 하나 이상의 상위 계층 캐시를 검사하여 유입이 참조로 로깅될 수 있는지 또는 심지어 유입이 로깅될 필요가 있는지 여부를 결정하는 프로세서 제어 로직을 포함할 수 있다.
하위 캐시 계층이 로깅 요청(들)을 상위 캐시 계층(들)으로 보내는 것에 기반하여 하위 캐시 계층에서 캐시 미스를 로깅.
제2 실시 예에서, 프로세서는 제1 처리 유닛에 의한 활동(예를 들어, 특정한 메모리 어드레스로부터의 판독)에 기초하여 하위 계층 프로세서 캐시(예를 들어, L1)로의 유입(즉, 캐시 미스)을 검출하고, 그런 다음 하위 계층 프로세서 캐시는 상위 계층 캐시가 유입을 로깅하도록 요청하고/하거나 상위 계층 캐시가 유입을 로깅하는 방법을 하위 계층에 알려주도록 요청한다. 이러한 상위 계층 캐시는 그 후 유입이 로깅되어야 하는지의 여부와 방법(예를 들어, 값으로 또는 참조로)을 결정하고/결정하거나, 유입을 로깅하는 방법을 결정하기 위한 필요한 지식이 없다면 요청을 또 다른 상위 계층 캐시(존재하는 경우)로 전달한다. 이것은 N 캐시 레벨까지 계속할 수 있다.
이 제2 실시 예를 구현하는 프로세서(102)는 모든 상위 계층 캐시(들) 또는 로깅 프로세스에 참여하는 적어도 모든 상위 계층 캐시(들)에서 공통 (또는 적어도 매우 유사한) 제어 로직을 구현함으로써 잠재적으로 그렇게 할 수 있다. 일부 구현에서, 제2 실시 예를 구현하는 데 필요한 제어 로직은 제1 실시 예를 구현하는 데 필요한 제어 로직보다 덜 광범위할 수 있는 반면, 상위 캐시 레벨(들)의 지식을 이용하는 것에 기반하여 하위 캐시 레벨에서 유입을 로깅하는 데서 오는 많은 (또는 모든) 동일한 이점을 제공한다. 또한, 캐시 레벨은 이미 대부분의 프로세서에서 서로 간에 CCP 메시지를 전달하기 때문에, 제2 실시 예를 구현하는 데 필요한 제어 로직은 잠재적으로 기존 제어 로직에 대한 확장으로서 구현될 수 있다.
이러한 제2 실시 예에 따라, 도 6은 상위 캐시 계층이 하위 캐시 계층에 의한 로깅 요청에 기초하여 하위 캐시 계층에 의한 유입 로깅 방법을 결정하는 예시적인 방법(600)의 흐름도를 도시한다. 방법(300)과 유사하게, 방법(600)은 복수의 처리 유닛(예를 들어, 처리 유닛(A1-A4) 중 2 개 이상)을 포함하고 복수의 캐시 계층 내로 정렬된 복수의 캐시를 포함하는 프로세서(201a)를 나타내는 도 2a의 예시적인 환경과 같은 마이크로 프로세서 환경에서 구현될 수 있다. 이들 캐시는 제1 캐시 계층 내의 복수의 제1 캐시(예를 들어, 캐시(L1-A1 내지 L1-A4) 중 2 개 이상) 및 제2 캐시 계층 내의 하나 이상의 제2 캐시(예를 들어, 캐시(L2-A1 또는 L2-A2), 또는 캐시(L3-A) 중 하나 이상)를 포함할 수 있다. 이들 캐시는 제1 캐시 계층(예를 들어, L1-Al)에서 적어도 특정한 제1 캐시를 위한 백업 저장소로서 기능하는 제2 캐시 계층 내의 특정한 제2 캐시(예를 들어, L2-A1 또는 L3-A)를 포함할 수 있다. 단순화를 위해, 방법(600)은 특정한 제1 캐시를 "제1 캐시(first cache)"로 지칭하고 특정한 제2 캐시를 "제2 캐시(second cache)"로 지칭할 것이다. 마이크로 프로세서 환경은 방법을 수행하기 위한 제어 로직(예를 들어, 마이크로 코드(102c) 및/또는 회로)을 포함할 수 있다. 일부 실시 예에서, 이러한 제어 로직은 하나 이상의 상위 캐시 계층(예를 들어, 도 2a의 캐시 계층(L2 및/또는 L3)에서 구현된다.
방법(600)은 로깅에 참여하는 위에서 소개된 제2 캐시에서 수행되고, 제2 캐시가 내부 캐시 계층으로부터 로깅 요청을 수신하는 동작(601)에서 시작된다. 일부 실시 예에서, 동작(601)은 제2 캐시가 특정한 메모리 어드레스를 참조하는 로깅 요청을 제1 캐시로부터 수신하는 것을 포함할 수 있다. 예를 들어, L2 캐시 계층의 캐시(L2-A1)(또는 방법(600)이 L3 캐시 계층에서 수행되고 있다면 캐시(L3-A))은 L1 캐시 계층의 캐시(L1-Al)로부터 로깅 요청을 수신할 수 있다. 이러한 로깅 요청은 제1 캐시(L1-A1)로의 데이터 유입을 야기하는 (예를 들어, 시스템 메모리(202) 내의) 특정한 메모리 어드레스의 판독과 같은 처리 유닛(A1)에 의한 활동에 기초할 수 있다. 도 2a의 환경에서, 이러한 유입에서의 데이터는 캐시(L2-A2), 캐시(L3-A) 또는 시스템 메모리(202)로부터 제공될 수 있다.
이 요청에 기초하여, 방법(600)은 제2 캐시가 메모리 어드레스에 대한 캐시 라인이 이러한 캐시 계층에 존재하는지 여부를 결정하는 동작(602)으로 진행한다. 일부 실시 예에서, 동작(602)은 요청에 기초하여 메모리 어드레스에 대응하는 캐시 라인이 제2 캐시에 존재하는지 여부를 결정하는 것을 포함할 수 있다. 예를 들어, 요청 수신에 기초하여 L2 캐시 계층 내의 캐시(L2-A1)(또는 방법(600)이 L3 캐시 계층에서 수행되고 있다면 캐시(L3-A))는 로깅 요청으로부터 특정한 메모리 어드레스를 캐싱하는 캐시 라인을 포함하는지 여부를 결정할 수 있다. 이러한 캐시 라인은 일반적으로 캐시 체계가 포괄적 캐시를 포함하는 경우(예를 들어, 제2 캐시가 제1 캐시 계층에서 그 아래의 캐시(들)에 데이터의 수퍼세트를 저장하는 경우) 존재할 것이지만, 캐시 체계가 독점적이거나 일부 독점적 거동을 보이는 경우에는 해당되지 않을 수 있다는 것을 이해할 것이다.
동작(602)으로부터의 "아니오" 분기 이후(즉, 캐시 라인이 특정한 제2 캐시에 존재하지 않을 때), 방법(600)은 제2 캐시가 그것이 가장 바깥 쪽 로깅 캐시 계층인지 여부를 결정할 수 있는 동작(603)에 도달한다. 논의되는 바와 같이, 동작(603)의 결과에 기초하여, 방법(600)은 제2 캐시가 (i) 로깅에 참여하고 적어도 제2 캐시를 위한 백업 저장소로서 기능하는 (예를 들어, 제 3 캐시 계층 내의) 제3 캐시가 존재하지 않을 때 캐시 라인이 로깅되게 하거나(즉, 동작(608)으로의 경로를 따름), (ii) 제3 캐시가 존재할 때 요청을 제3 캐시로 포워딩하는 것(즉, 동작(606)으로의 경로를 따름)을 포함할 수 있다.
예를 들어, 제2 캐시가 캐시(L2-A1)이면, 동작(603)에서 제2 캐시는 캐시(L3-A)가 존재하고 로깅에 참여하는지 여부를 결정할 수 있다(따라서 L2-A1은 가장 바깥 쪽 로깅 캐시 계층이 아니다). 캐시(L3-A)가 존재한다면, 일부 구현에서이 캐시는 프로세서의 현재 구성에 따라 한 순간에 로깅에 참여하고 다른 순간에는 로깅에 참여하지 않을 수 있음을 알 것이다. 다른 예에서, 제2 캐시가 캐시(L3-A)이면, 동작(603)에서 제2 캐시는 외부 캐시 계층이 존재하지 않는다고 결정할 수 있고, 따라서 그것이 가장 바깥 쪽 로깅 캐시 계층이라고 결정할 수 있다. 로깅 캐시 계층들 사이에 비-로깅(non-logging) 캐시 계층이 개입할 수 있음을 유의한다. 예를 들어, 동작(603)이 캐시(L2-A1)에 의해 수행되고 있고 일부 L4 캐시 계층이 존재한다면, L3 캐시 계층은 비-로깅일 수 있고 L4 캐시 계층은 로깅일 수 있다.
동작(603)으로부터의 결정이 제2 캐시가 외부 로깅 캐시 계층이 아니라는 것이면(즉, 동작(603)의 "아니오" 분기), 방법(600)은 동작(606)으로 진행하여 제2 캐시가 로깅 요청을 다음 로깅 캐시 계층으로 포워딩한다. 그런 다음, 방법(600)은 해당 계층의 캐시에서 반복된다. 예를 들어, 제2 캐시가 캐시(L2-A1)이면 요청을 캐시(L3-A)로 포워딩할 수 있고 캐시(L3-A)는 방법(600)을 반복할 수 있다. 이는 많은 로깅 캐시 레벨이 존재하는 만큼 확장될 수 있다. 일부 구현에서, 동작(606)에 도달할 때, 로깅 요청을 다음 로깅 캐시 계층으로 포워딩하는 대신에, 제2 캐시 계층은 로깅 요청을 다음 로깅 캐시 계층으로 직접 보내도록 명령하는 하나 이상의 응답 메시지를 제1 캐시로 보낼 수 있다.
반면에, 동작(603)으로부터의 결정이 제2 캐시가 가장 바깥 쪽 로깅 캐시 계층인 것이면(즉, 동작(603)으로부터의 "예" 분기), 방법(600)은 제2 캐시가 유입이 로깅되게 하는 동작(608)으로 진행한다. 나중에 논의되는 바와 같이, 동작(608)에서의 로깅은 (특정 상황에 따라) 값으로 또는 참조로 수행될 수 있고, 동작(608)에서의 실제 로깅은 현재 캐시 계층 및/또는 하위 캐시 계층에서 수행될 수 있다.
동작(603)의 결정 블록에서 점선으로 표시된 바와 같이, 동작(603)은 방법(600)이 수행되는 컴퓨팅 환경에 따라 선택적 동작일 수 있다는 점에 유의한다. 예를 들어, 캐시 체계가 로깅에 참여하는 (그리고 방법(600)을 수행하는) 하나의 상위 캐시 계층만 포함하는 경우, 이러한 캐시 계층은 항상 "가장 바깥 쪽" 로깅 캐시 계층이 될 것이다. 이러한 환경에서는 동작(603)이 필요하지 않을 수 있다. 또한 다수의 로깅 캐시 계층이 있는 경우에도, 가장 바깥 쪽 로깅 캐시 계층은 그것이 가장 바깥 쪽 계층이라는 내재하는 지식을 가질 수 있다. 따라서, 두 경우 모두에서, 동작(602)에서의 "아니오" 결정은 단순히 동작(608)으로 진행할 수 있다.
동작(602)으로 돌아가서 "예" 분기를 따르면(즉, 캐시 라인이 제2 캐시에 존재할 때), 방법(600)은 제2 캐시가 캐시 라인이 로깅되었는지 여부를 결정하는 동작(604)에 도달한다. 이 결정은 캐시 라인이 제2 캐시에 의해 로깅되었는지 여부 또는 캐시 라인이 어떤 다른 캐시에 의해 로깅되었고 제2 캐시가 그 로깅을 알고 있는지 여부를 결정하는 것을 포함할 수 있다. 제2 캐시가 캐시 라인이 로깅되었다고 (그리고 잠재적으로 어느 처리 유닛(들)에 의해서) 결정하는 방식은, (예를 들어, 도 4a, 4b 및 5와 관련하여 설명된 실시 예를 포함하는) 제1 캐시 로깅 실시 예와 관련하여 설명된 임의의 메커니즘에 의존할 수 있다. 예를 들어, 제2 캐시는 도 4a 및 4b와 관련하여 설명된 바와 같이 어카운팅 비트(즉, 플래그 비트, 유닛 비트 및/또는 인덱스 비트)를 저장할 수 있고, 제2 캐시는 도 5와 관련하여 설명된 바와 같이 웨이-락킹을 활용할 수 있고/있거나, 제2 캐시는 CCP 데이터를 저장하고 이에 의존할 수 있다.
논의되는 바와 같이, 캐시 라인이 제2 캐시에 의해 로깅되도록 결정되지 않는 경우, 방법(600)은 제2 캐시가 요청을 다음 로깅 캐시 계층으로 포워딩하는 것(즉, 동작(606)으로의 경로를 따름) 및/또는 캐시 라인을 로깅하는 것(즉, 동작(608)으로의 경로를 따름)을 포함할 수 있다. 반면에, 캐시 라인이 로깅되는 것으로 제2 캐시에 의해 결정되는 경우, 방법(600)은 제1 캐시가 이 캐시의 캐시 라인에 저장된 현재 값을 아는지 여부를 제2 캐시가 결정하지 않았을 때 제2 캐시가 캐시 라인이 로깅되게 하는 단계(즉, 동작(608)으로의 경로를 따름), 또는 요청 프로세서가 제2 캐시의 캐시 라인에 저장된 현재 값을 알고 있다고 결정될 때 제2 캐시가 캐시 라인이 로깅될 필요가 없다고 결정하는 단계(즉, 동작(609)으로의 경로를 따름)를 포함할 수 있다.
예를 들어, 동작(604)으로부터의 결정이 캐시 라인이 로깅되도록 제2 캐시에 의해 결정되지 않는 것일 때(즉, 동작(604)으로부터의 "아니오" 분기), 제2 캐시는 발생하는 로깅을 외부 로깅 캐시 계층에(만일 있다면) 잠재적으로 통지하는 한편(즉, 동작(607)), 유입이 동작(608)에서 로깅되게 할 수 있다. 동작(607)이 수행되면, 동작(608)에서 특정한 제2 캐시에 의해 로깅되는 것으로 결정되지 않을 때 캐시 라인이 로깅되게 하는 것은, 제3 캐시 계층이 존재한다고 결정하는 것, 및 캐시 라인이 특정한 제2 캐시에 의해 값으로 로깅되었다고 제3 캐시에게 통지하는 것을 포함할 수 있다. 방법(600)에서, 동작(607 및 608)은 병렬로 수행되는 동작을 포함하여 서로에 대해 임의의 순서로 수행될 수 있음에 유의한다. 동작(607)은 방법(600)이 다음 로깅 캐시 계층에서 수행되도록 할 수 있음에 유의한다.
대안적으로, 동작(604)으로부터의 결정이 캐시 라인이 제2 캐시에 의해 로깅되는 것으로 결정되지 않는 것이라면 제2 캐시는 동작(603)에서 그것이 가장 바깥 쪽 로깅 캐시 계층인지 여부를 결정할 수 있고, 결과에 기반하여, 동작(606)에서 요청을 다음 로깅 캐시 계층으로 포워딩하거나, 아니면 동작(608)에서 유입을 로깅할 수 있다는 것을 도 6이 보여준다. 본질적으로 이러한 대체 경로는 동작(604)에서 "아니오" 결정이 있는 경우 제2 캐시가 (i) 유입을 로깅하고 다음 로깅 캐시 계층에 하나가 있는지 여부를 통지할 수 있고/있거나(즉, 따라서 다음 계층은 나중의 사용을 위하여 로깅 이벤트를 알고 있음) (ii) 그것(또는 심지어 훨씬 상위 계층)이 유입이 참조로 로깅되거나 전혀 로깅되지 않는 것을 초래할 수 있는 지식을 포함할 수 있기 때문에 요청을 다음 로깅 캐시 계층으로 포워딩할 수 있다는 것을 전달한다.
동작(604)으로 돌아가서, 제2 캐시가 로깅되고 있는 캐시 라인을 안다면(즉, 동작(604)으로부터의 "예" 분기), 동작(605)에서 제2 캐시는 로깅 요청을 유발한 처리 유닛이 캐시 라인에 현재 값을 가지고 있는지 여부를 결정한다. 제2 캐시는 제1 캐시가 현재 소유하고 있는 것보다 요청된 메모리 어드레스에 대해 더 최신의 값을 가질 수 있다는 것을 알 것이다. 예를 들어, 제1 캐시가 캐시(L1-Al)이고 제2 캐시가 캐시(L2-A1)인 경우, 캐시(L2-A2)는 처리 유닛(A1)이 (예를 들어 처리 유닛(A2)에 의한 활동으로 인하여) 동작(601)에서 로깅 요청을 초래한 판독을 수행한 시점에 L1-A1보다 특정한 메모리 어드레스에 대한 더 최신 값을 가질 수 있다. 제1 캐시가 제2 캐시의 캐시 라인에 현재 값을 가지는 것이 확실하게 알려져 있다면(즉, 동작(605)으로부터의 "예" 분기), 제2 캐시는 동작(609)에서 아무것도 로깅하지 않도록 선택할 수 있다(즉, 현재 값이 이미 로깅되었기 때문이다). 반면에 제1 캐시가 제2 캐시의 캐시 라인에 현재 값을 가지는 것이 확실하게 알려져 있지 않다면(즉, 동작(605)으로부터의 "아니오" 분기), 제2 캐시는 발생하는 로깅을 외부 로깅 캐시 계층에(있는 경우) 잠재적으로 통지하는 한편(즉, 동작(607)), 동작(608)에서 유입이 로깅되게 할 수 있다. 다시 말하지만, 동작(607 및 608)은 병렬로 수행되는 동작을 포함하여 서로에 대해 임의의 순서로 수행될 수 있다.
언급된 바와 같이, 동작(608)에서의 유입의 로깅은 특정 상황에 따라 값으로(by value) 또는 참조로(by reference) 수행될 수 있다. 일반적으로 (예를 들어, 리플레이 동안 프로세서 활동에 의해 또는 이전에 로깅된 캐시 라인에 의해) 유입의 값이 트레이스를 기반으로 찾을 수 없다면 유입은 값으로 로깅된다. 유입의 값이 로깅된 프로세서 활동을 리플레이함으로써 얻어질 수 있다면 또는 유입의 값이 이전 로깅된 캐시 라인에 저장되어 있다면, 유입은 참조로 로깅될 수 있을 것이다. 특히, 유입을 참조로 로깅하는 것이 합법적일 수 있는 상황에서도 해당 유입을 값으로 로깅하는 것은 여전히 합법적이다. 예를 들어, 트레이싱 동안 처리 시간을 절약하고, 더 쉽게 리플레이되는 트레이스를 생성하기 위해 값으로 로깅하는 결정이 내려질 수 있다. 따라서, 동작(608)은 특정한 메모리 어드레스의 값을 직접 로깅하는 것 및/또는 특정한 메모리 어드레스에 대한 이전 로그 항목에 대한 참조를 로깅하는 것에 기초하여, 캐시 라인이 로깅되게 하는 것을 포함할 수 있다.
방법(600)에서 참조에 의해 로깅이 수행될 수 있는 한 가지 상황은 동작(608)이 동작(605)을 통해 도달된 경우이다(즉, 제2 캐시는 값이 로깅되었음을 알고 있지만 요청 프로세서는 현재 값을 가지는 것으로 분명히 알려져 있지 않다). 여기서, 동작(608)에서의 로깅은 제2 캐시에 의해 로깅된 것으로 이미 알려진 값을 참조하여 제1 캐시에 대해 수행될 수 있다. 예를 들어 캐시(L1-A2)는 현재 값을 로깅했을 수 있고 캐시(L2-A1)는 이를 알고 있으므로, 유입은 L1-A2에 의한 로깅을 참조하여 캐시(L1-Al)에 대해 로깅될 수 있다.
이러한 경우 리플레이 코드가 다른 수단을 통해 값을 복구할 수 있다면 아무것도 로깅하지 않는 것이 또한 좋을 수 있다. 예를 들어, 처리 유닛(A1)에 의해 야기된 현재 유입은 처리 유닛(A2)에 의한 이전 활동과 관련하여 이미 로깅되었을 수 있으므로, 동작(608)에서 A2의 로그를 참조하여 현재 유입을 로깅하는 것이 가능할 것이다. 그러나, 방법(600)이 이번에 Al에 대해 아무 것도 로깅하지 않으면 트레이스는 여전히 정확할 수 있다. 이렇게 하면 리플레이 동안 다른 처리 유닛의 트레이스에서 이러한 이전에 로깅된 값을 찾아야 한다는 트레이드 오프와 함께 트레이스 크기가 감소한다.
리플레이 동안 이전에 로깅된 값을 찾는 작업은 상이한 로깅된 처리 유닛 사이에서 이벤트의 적어도 부분적인 정렬(ordering)을 재현할 수 있는지에 따라 달라진다. 이전에 로깅된 값을 찾는 데 도움이 되도록 트레이스에 포함될 수 있는 몇 가지 사항이 있다. 예를 들어, 캐시 제거(cache eviction)를 로깅하는 것은 리플레이시에 Al에 의한 판독을 수행하는 데 필요한 값이 캐시(Al-L1)에서 사용할 수 없다고(즉, 제거되었기 때문에) 결정하는데 도움이된다. 따라서 다른 처리 유닛(들)에 대한 트레이스(들)에서 값을 서치할 수 있다. 또 다른 예에서, CCP 데이터를 로깅하면 Al에 의한 판독을 수행하는 데 필요한 값이 리플레이 동안 캐시(Al-L1)에서 사용 가능하지 않거나 현재 값이 아니라고 결정하는 데 또한 도움이 될 수 있다. 따라서 다른 처리 유닛(들)에 대한 트레이스(들)에서 값을 서치할 수 있다. CCP 데이터는 잠재적으로 현재 값을 찾을 위치를 나타낼 수 있다는 것을 유의한다. 다른 예에서 캐시의 지오메트리에 대한 지식은 필요한 로그 항목을 찾는 데 도움이될 수 있다. 예를 들어, 처리 유닛(A1 및 A2)은 동일한 L2 캐시(즉, L2-A1)를 공유한다는 것이 알려져 있을 수 있다. 따라서 예를 들어 A3 및 A4에 대한 트레이스를 서치하는 것과는 달리 먼저 필요한 로그 항목에 대해 A2의 트레이스를 서치하는 것이 좋을 것이다.
로깅이 참조에 의해 수행될 수 있는 또 다른 상황은 동작(607)에서 하위 캐시 계층이 현재 캐시 계층에 통지를 보내는 것에 기초하여 현재 캐시 계층에서 방법(600)이 수행되고 있을 때 동작(608)에 도달한 경우이다. 여기서, 하위 캐시 계층은 (값으로 또는 참조로) 유입을 로깅했을 것이므로, 현재 캐시 계층은 하위 캐시 계층의 로그를 참조하여 로깅할 수 있다.
또한 언급된 바와 같이, 동작(608)에서의 로깅은 현재 캐시 계층 또는 하위 캐시 계층에서 수행될 수 있다. 예를 들어, 일부 구현에서는 동작(608)에 도달할 때 제2 캐시 계층이 자체적으로 로깅을 수행하는 것이 아니라, 대신, 유입이 로깅되어야 한다는 것과 방법(즉, 값으로 또는 참조로, 만일 참조라면, 참조 로그 항목이 어디에 있는지)을 제1 캐시에게 명령하는 하나 이상의 응답 메시지를 제1 캐시로 다시 보낼 수 있다. 응답 메시지(들)는 또한 어떻게 어카운팅 비트를 설정하는지, CCP 데이터를 저장(save)하는지 등을 제1 캐시에 명령할 수 있다. 유사하게, 동작(609)에서, 제2 캐시 계층은 로깅이 필요 없음을 알리기 위해 제1 캐시 계층에 응답 메시지를 보낼 수 있다. 원래 로깅 요청이 둘 이상의 로깅 캐시 계층을 통해 전파된 경우 이러한 응답 메시지는 계층을 통해 다시 전파되거나 원래 요청자에게 직접 전송될 수 있다. 전술한 내용에 비추어 볼 때, 동작(608)은 특정한 메모리 어드레스의 값을 직접 로깅하도록 제1 캐시에 명령하거나, 특정한 메모리 어드레스에 대한 이전 로그 항목에 대한 참조를 로깅하도록 제1 캐시에 명령하는 것에 기초하여 캐시 라인이 로깅되도록 하는 것을 포함할 수 있음을 알 것이다.
로깅이 수행되는 방법에 관계 없이, 동작(608)은 유입이 로깅되었다는 사실을 기록(document)하기 위하여 제2 캐시 계층이 임의의 적절한 로깅 어카운팅 비트(예를 들어 플래그 비트, 유닛 비트 또는 인덱스 비트)를 설정하거나 임의의 적절한 CCP 메시지를 저장하는 것을 포함할 수 있다. 이와 같이, 동작(608)에서 캐시 라인이 로깅되게 하는 것은 (예를 들어, 캐시 라인과 관련된 어카운팅 비트를 적절하게 설정함으로써) 특정한 제2 캐시 내에 로깅되는 것으로 캐시 라인을 마킹하는 것을 포함할 수 있다는 것을 알 것이다.
일부 실시 예에서, 동작(608)에서의 로깅은 제2 캐시가 캐시 라인이 로깅되게 한 것 및 가능하게는 캐시 라인이 로깅되게 한 방식을 하나 이상의 하위 캐시 계층에 사전에 알리는 것을 포함할 수 있다. 예를 들어, 캐시(L2-A1)가 동작(608)에서 로깅하였다면, 그들에게 캐시 라인이 로깅되게 하였다고 통지하는 것은 캐시(L1-A2 내지 L1-A4) 중 하나 이상(즉, 로깅 요청을 개시하는 것이 아닌 L1 캐시)으로의 하나 이상의 메시지일 수 있다. 이 정보에는 캐시(L2-A1)가 값으로 또는 참조로 캐시 라인을 로깅했는지가 포함될 수 있다. 캐시 라인이 참조로 로깅되면 캐시(L2-A1)는 원래 로그 데이터가 존재하는 위치에 관한 정보를 심지어 보낼 수도 있다. 이에 응답하여 캐시(예를 들어, L1-A2 내지 L1-A4 중 하나 이상)는 잠재적으로 캐시(L2-A1)가 캐시 라인이 어떻게 로깅되게 했는지를 포함하여, 캐시(L2-A1)가 캐시 라인이 로깅되게 했다는 사실을 기록하는 정보를 저장할 수 있다. 이 정보는 예를 들어 이러한 L1 캐시 내의 추가 어카운팅 비트에 저장될 수 있다. 이런 식으로 이러한 Ll 캐시들 중 하나가 나중에 캐시 라인을 로깅할 필요가 있다고 결정하면, 이미 로깅되었다고 미리(up front) 알 수 있으며 상위 계층 캐시에 로깅 요청을 보내거나 상위 계층 캐시에 로깅하는 방법의 질문을 보내는 것을 피할 수 있다.
특히, 지연된 로깅을 달성하기 위해 버퍼(들)(102e) 및/또는 캐시(들)(102b)의 전용(devoted) 부분을 사용하기 위해, 제1 실시 예와 관련하여 위에서 논의된 임의의 기법이 또한 이 제2 실시 예에 적용될 수 있다. 이와 같이, 동작(608)에서 캐시 라인이 로깅되게 하는 것은 버퍼(들)(102e) 및/또는 캐시(들) (102b)의 일부와 같은 트레이스 버퍼 내에 캐시 라인을 로깅하는 것을 포함할 수 있다는 것을 이해할 것이다.
방법(600)은 상위 로깅 캐시 계층에서 수행되는 동작에 초점을 맞추었지만, 도 7-9는 하위 캐시 계층(예를 들어, 원래 로깅 요청을 개시한 L1 캐시 계층(들))에서 수행될 수 있는 몇 가지 예시적인 방법론을 보여준다. 특히, 방법(600)은 캐시 라인의 값이 로깅되었음을 나타내기 위해 캐시 라인의 로깅 상태를 설정하는 것(예를 들어, 캐시 라인과 연관된 어카운팅 비트를 설정하거나 CCP 데이터를 저장하는 것 등)을 포함하여 로깅을 수행하는 데 초점을 맞추었지만, 이러한 방법론은 이 캐시 라인의 값이 더 이상 로깅되지 않을 때 그 로깅 상태를 나중에 소거(clear)하는 것과 관련된다.
캐시는 로깅 상태가 설정된 캐시 라인을 포함할 수 있는데, 이는 그 캐시를 사용하는 처리 유닛이 해당 처리 유닛에 대해 로깅이 인에이블된 동안 메모리 판독을 수행했기 때문이다. 캐시는 또한 이미 캐시 라인에 로깅 상태가 설정된 상위 레벨 캐시로부터 캐시 라인을 수신할 수도 있다. 위에서 언급했듯이, 상위 레벨 캐시가 캐시 라인이 로깅되었음을 사전에 알렸기 때문에 캐시 라인은 또한 로깅 상태를 설정할 수도 있다. 처리 유닛이 해당 처리 유닛에 대해 로깅이 디스에이블되어 있는 동안 캐시 라인에 기입을 수행할 때 캐시 라인의 로깅 상태가 일반적으로 소거된다.
처음에, 도 7은 처리 유닛이 로깅 인에이블 및 로깅 디스에이블 사이에서 전환할 때 캐시 라인의 로깅 상태를 관리하기 위한 예시적인 방법(700)의 흐름도를 도시한다. 방법(600)과 같이, 방법(700)은 도 2a의 예시적인 환경과 같은 마이크로 프로세서 환경에서 구현될 수 있다. 일반적으로, 방법(700)은 처리 유닛(예를 들어, Al)이 로깅이 인에이블된 상태로 동작한 후에 동작하고, 이제 로깅된 하나 이상의 캐시 라인을 포함하는 캐시(예를 들어, L1-Al)를 사용한다. 처리 유닛이 이러한 로깅된 캐시 라인 중 하나에 기입한다면, 방법(700)은 처리 유닛에 대해 로깅이 현재 인에이블 또는 디스에이블되었는지 여부에 따라 이 로깅 상태를 유지하거나 소거한다.
방법(700)은 로깅된 것으로 마킹된 캐시 라인에 대한 기입을 검출하는 동작(701)에서 시작한다. 일부 실시 예에서, 동작(701)은 설정된 로깅 상태를 갖는 제1 캐시에서 캐시 라인에 대한 기입을 검출하는 것을 포함할 수 있다. 예를 들어 제1 캐시는 캐시(L1-Al)일 수 있다. 이 캐시는 처리 유닛(A1)에 의한 메모리판독을 기반으로 (예를 들어, 어카운팅 비트를 적절하게 설정함으로써) 로깅된 것으로 이전에 마킹된 캐시 라인을 가질 수 있다. 예를 들어, 이 캐시 라인은 방법(600)과 관련하여 위에서 논의된 특정한 메모리 어드레스에 대응할 수 있다.
다음으로, 방법(700)은 동작(702)을 포함하며, 여기서 로깅이 인에이블되는지 여부가 결정된다. 이러한 맥락에서, 동작(702)은 제1 캐시와 연관된 처리 유닛이 로깅을 인에이블했는지 여부를 결정한다. 일부 실시 예에서, 동작(702)은 기입을 검출하는 것에 기초하여 특정한 처리 유닛에 대해 로깅이 인에이블되는지 여부를 결정하는 것을 포함할 수 있다. 예를 들어, 캐시(L1-Al)에 대한 제어 로직은 처리 유닛(Al)이 로깅을 인에이블했는지 여부를 결정할 수 있다. 로깅이 인에이블되면(즉, 동작(702)으로부터의 "예" 분기), 캐시 라인에 대한 로깅 상태는 동작(703)에서 유지될 수 있다. 따라서, 일부 실시 예에서 동작(703)은 특정한 처리 유닛에 대하여 로깅이 인에이블되는 것에 적어도 기초하여 캐시 라인에 대한 로깅 상태를 유지하는 것을 포함할 수 있다.
대안적으로, 로깅이 디스에이블된다면(즉, 동작(702)으로부터의 "아니오" 분기), 캐시 라인에 대한 로깅 상태는 동작(704)에서 소거될 수 있다. 따라서, 일부 실시 예에서 동작은 특정한 처리 유닛에 대하여 로깅이 디스에이블되는 것에 적어도 기초하여 캐시 라인에 대한 로깅 상태를 소거하는 것을 포함할 수 있다. 예를 들어 캐시(L1-Al)는 캐시 라인의 계정 비트를 적절하게 소거할 수 있다.
도시된 바와 같이, 로깅 상태를 소거하는 것 외에도, 방법(700)은 다음 로깅 캐시 계층에 통지하는 단계를 포함한다. 일부 실시 예에서, 동작(705)은 로깅이 특정 처리 유닛에 대해 디스에이블되는 것에 적어도 기초하여, 캐시 라인에 대한 로깅 상태가 소거되어야 함을 하나 이상의 제2 캐시 중 적어도 하나에 통지하는 것을 포함할 수 있다. 예를 들어, 제2 캐시 중 하나는 캐시(L2-A1)일 수 있으며, 이와 같이 캐시(L1-A1)는 캐시 라인의 사본에 대한 로깅 상태를 소거하도록 캐시(L2-A1)에 알릴 수 있다. 동작(704 및 705)은 병렬로 수행되는 것을 포함하여 서로에 대해 임의의 순서로 수행될 수 있다는 점에 유의한다.
도 6에 도시되지 않았지만, 방법(600)은 상응하게, 특정한 제2 캐시가 메모리 어드레스에 또한 대응하는 제1 캐시의 또 다른 캐시 라인이 제1 캐시 내에 로깅되지 않은 것으로 마킹된다는 것을 나타내는 메시지를 제1 캐시로부터 수신하는 단계를 포함할 수 있다. 방법(600)은 또한 메시지에 기초하여 특정한 제2 캐시 내에 로깅되지 않은 것으로 캐시 라인을 마킹하는 단계를 포함할 수 있다.
도 8은 로깅이 디스에이블된 처리 유닛이 기입을 위해 부모 캐시로부터 독점적으로 캐시 라인을 수신할 때 캐시 라인의 로깅 상태를 관리하기 위한 예시적인 방법(800)의 흐름도를 도시한다. 방법(600 및 700)과 같이, 방법(800)은 도 2a의 예시적인 환경과 같은 마이크로 프로세서 환경에서 구현될 수 있다. 일반적으로, 방법(800)은 처리 유닛(예를 들어, Al)이 로깅이 인에이블된 상태에서 동작하고 있을 때 동작하고, 그것은 부모 캐시(들)(예를 들어, L2-A1 및/또는 L3-A)가 로깅 상태가 설정된 캐시 라인을 포함하는 캐시(예를 들어, L1-A1)를 사용하고, 캐시는 부모 캐시로부터 기입을 위한 캐시 라인을 취한다.
방법(800)은 로깅이 디스에이블되면 캐시가 기입을 위해 상위 캐시로부터 캐시 라인을 요청하는 동작(801)에서 시작한다. 예를 들어, 처리 유닛(Al)으로부터의 특정한 메모리 어드레스에의 기입 요청에 기반하여, 캐시(L1-Al)에서 캐시 미스가 발생할 수 있다. 결과적으로 캐시(L1-Al)는 캐시(L2-A1) 또는 캐시(L3-A)로부터 적절한 캐시 라인의 사본을 요청할 수 있다.
일부 상황에서 캐시(L1-Al)는 로깅 상태가 소거된 캐시 라인을 수신할 수 있다. 이와 같이, 방법(800)은 캐시가 로깅 상태가 소거된 상태로 상위 캐시로부터 독점적으로 캐시 라인을 수신하는 동작(802)을 포함할 수 있다. 로깅 상태는 수신된 캐시 라인에서 소거될 수 있는데, 예를 들어, (i) 상위 캐시에 설정되지 않았거나 (ii) 상위 캐시가 처리 유닛(Al)에서 로깅이 디스에이블되어 있음을 알고 있어서 상위 캐시가 캐시(Ll-Al)에 캐시 라인을 제공할 때 로깅 상태를 소거하였기 때문이다. 예를 들어, 방법(600)은 기입을 위해 캐시 라인을 요청하는 메시지를 제1 캐시로부터 수신하고, 캐시 라인을 제1 캐시로 전송하는 단계를 포함할 수 있으며, 캐시 라인은 제1 캐시에 대해 로깅이 디스에이블된 것에 적어도 기초하여 로깅되지 않은 것으로 마킹된다.
다른 상황에서 캐시(L1-Al)는 로깅 상태가 설정된 캐시 라인을 수신할 수 있다. 이와 같이, 방법(800)은 캐시가 로깅 상태가 설정된 상위 캐시로부터 독점적으로 캐시 라인을 수신하는 동작(803)을 포함할 수 있다. 로깅 상태는 수신된 캐시 라인에서 설정될 수 있는데, 예를 들어 그것은 상위 캐시에서 설정되었기 때문이다.
다음으로, 방법(800)은 로깅이 여전히 디스에이블된 상태에서 캐시가 캐시 라인에 기입을 수행하는 동작(804)을 포함할 수 있다. 예를 들어, 캐시(L1-Al)는 적절한 값을 캐시 라인에 기입함으로써 처리 유닛(Al)으로부터의 원래 기입 요청을 완료할 수 있다. 다음으로, 방법(800)은 캐시 라인에 대한 로깅 상태가 소거되는 동작(805) 및 캐시 라인에 대한 로깅 상태를 소거하도록 상위 캐시에 통지하는 동작(806)을 포함할 수 있다. 동작(805)은 동작(804)과는 별도로 묘사되지만, 캐시 라인에 대한 로깅 상태를 소거하는 것은 동작(804)에서 기입을 수행하는 자연스러운 부분이 될 수 있다는 점에 유의한다. 예를 들어, 로깅이 디스에이블된 경우 모든 기입은 기입되고 있는 캐시 라인에 대하여 로깅 상태가 소거되는 결과를 초래할 수 있다. 이와 같이, 동작(804)과 동작(805) 사이의 화살표는 동작(804)이 실제로 선택적일 수 있음을 나타내기 위해 점선으로 표시된다. 동작(806)은 방법(700)과 관련하여 위에서 논의된 동작(705)과 유사한 방식으로 동작할 수 있다.
방법(700)의 동작(705)과 유사하게, 동작(806)이 수행될 때 방법(600)은 상응하게, 메모리 어드레스에 또한 대응하는 제1 캐시의 다른 캐시 라인이 제1 캐시 내에서 로깅되지 않은 것으로 마킹된다고 표시하는 메시지를 특정한 제2 캐시가 제1 캐시로부터 수신하는 단계를 포함할 수 있다. 방법(600)은 또한 메시지에 기초하여 특정한 제2 캐시 내에서 로깅되지 않은 것으로 캐시 라인을 마킹하는 단계를 포함할 수 있다.
도 9는 처리 유닛이 "소유된" CCP 상태에서 취한 캐시 라인에 처리 유닛이 기입할 때 캐시 라인의 로깅 상태를 관리하기 위한 예시적인 방법(900)의 흐름도를 도시한다. 방법(600-800)과 같이, 방법(900)은 도 2a의 예시적인 환경과 같은 마이크로 프로세서 환경에서 구현될 수 있다. 일반적으로, 방법(900)은 CCP가 하나의 처리 유닛이 기입을 위해 캐시 라인을 취한 기간 동안 다른 처리 유닛(들)이 캐시 라인의 현재 값을 요청할 수 있는 상태를 제공할 때 동작한다. 이에 대한 예는 이전에 소개된 MOESI CCP에서의 "소유된" 상태이다.
방법(900)은 로깅이 디스에이블된 상태에서 캐시가 소유된 상태에 있는 캐시 라인을 수정하는 동작(901)에서 시작한다. 예를 들어, 처리 유닛(A1)은 캐시 라인이 캐시(L1-Al)에서 "소유된" 것으로 간주했을 수 있다. 이 시간 동안, 처리 유닛(A1)은 그 캐시 라인에 기입을 수행할 수 있다. 도 8과 관련하여 논의된 바와 같이, 캐시 라인에 대한 로깅 상태를 소거하는 것은 로깅이 디스에이블되었을 때 기입을 수행하는 자연스러운 부분이 될 수 있다. 이와 같인, 방법(900)은 로깅 상태를 소거하기 위한 어떠한 명시적 동작도 묘사하지 않지만, 일부 구현에서 명시 적 동작이 존재할 수 있다.
동작(901)에 기초하여, 방법(900)은 캐시 라인에 대한 로깅 상태가 또한 다른 캐시(들)에서도 소거되어야 한다는 것을 전달하기 위해 하나 (또는 그 이상의) 동작이 취해질 수 있음을 보여준다. 동작(902)에서, 요청에 기초하여, 캐시는 캐시 라인에 대한 로깅 상태를 소거하도록 형제 캐시(sibling cache)에 통지한다. 예를 들어, 캐시(L1-Al)에서 소유된 캐시 라인에 기입이 수행된 후, 캐시(L1-Al)는 캐시(L2-A2)와 같은 형제 캐시로부터 캐시 라인의 현재 값을 요청하는 요청(예를 들어, CCP 메시지)을 수신할 수 있다. 이 요청의 결과로 캐시(L1-A1)는 설정된 경우 해당 캐시 라인에서 로깅 상태를 소거해야 함을 캐시(L2-A2)에 통지할 수 있다. 이 통지는 캐시(L1-Al)에서 캐시 라인의 현재 값을 전달하는 CCP 메시지와 함께 전송되거나 별도의 메시지의 일부로 전송될 수 있다.
동작(903)에서, 캐시 라인의 수정에 기초하여, 캐시는 캐시 라인에 대한 로깅 상태를 소거하도록 하나 이상의 형제 캐시에 통지한다. 예를 들어, 캐시(L1-Al)에서 소유된 캐시 라인에 기입이 수행된 후, (캐시 라인이 해당 캐시에 존재한다면 그리고 로깅 상태가 설정되어 있다면) 캐시(L1-Al)는 형제 캐시(예를 들어, L1-A2 내지 L1-A4)에 통지를 브로드캐스트하여, 해당 캐시 라인에 대한 로깅 상태를 소거해야 한다고 그들이 알게 할 수 있다. 따라서, 동작(902)은 상대적으로 형제 캐시에 로깅 상태를 소거하도록 통지하는 반면, 동작(903)은 형제 캐시에 사전에 통지한다.
동작(904)에서, 캐시 라인의 수정에 기초하여, 캐시는 캐시 라인에 대한 로깅 상태를 소거하도록 상위 캐시 계층에 통지한다. 예를 들어 캐시(L1-Al)에서 소유된 캐시 라인에 기입이 수행된 후, (캐시 라인이 해당 캐시에 존재한다면 그리고 로깅 상태가 설정되어 있다면) 캐시(L1-Al)는 캐시(L2-A1 및/또는 L3-A)와 같은 부모 캐시(들)에 통지를 브로드캐스트하여, 해당 캐시 라인에 대한 로깅 상태를 소거해야 한다고 그들이 알게 할 수 있다. 따라서, 동작(903)과 유사하게, 동작(904)은 사전 통지를 수행하지만 이번에는 형제 캐시(들)가 아니라 부모 캐시(들)에 대해 수행한다.
특히, 일부 구현은 동작(902-904) 중 둘 이상을 수행할 수 있다. 예를 들어, 구현은 기입이 수행될 때(즉, 동작(904)) 상위 캐시(들)를 사전에 통지할 수 있지만, 형제 캐시(들)에게만 반응적으로 통지할 수 있다(즉, 동작(902)). 다른 예에서, 구현은 상위 캐시(들)(즉, 동작(904)) 및 형제 캐시(들)(즉, 동작(903)) 모두에게 사전에 통지할 수 있다.
추가적으로, 방법(700)의 동작(705) 및 방법(800)의 동작(806)과 유사하게, 동작(903)이 수행될 때 방법(600)은 상응하게 메모리 어드레스에 또한 대응하는 제1 캐시의 다른 캐시 라인이 제1 캐시 내에서 로깅되지 않은 것으로 마킹된다고 표시하는 메시지를 특정한 제2 캐시가 제1 캐시로부터 수신하는 단계를 포함할 수 있다. 방법(600)은 또한 메시지에 기초하여, 특정한 제2 캐시 내에 로깅되지 않은 것으로 캐시 라인을 마킹하는 단계를 포함할 수 있다.
상위 계층(예를 들어, L2, L3 등) 캐시(들)에 대한 지식을 기반으로 하위 계층(예를 들어, Ll) 캐시로의 유입을 로깅하면, 단지 참조에 의한 로깅을 인에이블하고 일부 경우에서 로깅을 자제하는 것 이상의 여러 이점을 제공할 수 있다. 예를 들어, 하위 계층은 캐시 미스로부터의 데이터가 실제로 처리 유닛에 의해 소비된 경우에만 로깅 프로세스를 시작한다. 예를 들어, 이것은 추측에 근거한(speculative) 실행으로 인한 캐시 미스를 로깅하는 것을 피할 수 있다. 또한 하위 계층은 캐시 활동을 유발한 명령어의 폐기(retiring)와 동시에 로깅을 수행할 수 있다. 이로 인해 더 높은 정확도의 타이밍을 캡처하는 트레이스가 생성될 수 있다. 마지막으로 하위 계층을 로깅할 때 로깅은 원하는 경우 물리적 메모리 어드레싱이 아닌 가상 메모리 어드레싱을 기반으로 할 수 있다. 특히 가상 메모리 어드레싱을 기반으로 로깅하는 경우 복수의 가상 어드레스가 동일한 물리적 어드레스에 매핑되는 상황이 있을 수 있다. 이러한 상황에서 캐시는 상이한 가상 어드레스를 통한 동일한 물리적 어드레스에의 액세스가 캐시 미스로서 작동하게 하지 않을 수 있다. 이것이 발생하면, 그 트레이서(104a)는 TLB(102f)로부터 데이터를 로깅할 수 있다. 일부 구현에서, 가상 또는 물리적 어드레스는 추가 식별자(예를 들어, 가상 프로세서 ID, 메모리 어드레스에 대한 보안 설정 등)에 의해 더 구별될 수 있다. 이러한 구현 중 적어도 일부에서, 캐시는 상이한 추가 식별자를 가지고(또는 더 높거나 더 낮은 또는 상이한 보안 레벨을 가지고) 동일한 어드레스에 액세스하는 것이 캐시 미스로서 작동하게 할 수 있다.
따라서, 본 명세서의 실시 예는 프로세서 캐시의 적어도 2 개의 티어 또는 계층을 사용하여 복수의 처리 유닛에 걸쳐 실행의 효과를 트레이싱하는 것에 기반하여 비트-정확한 "시간 여행" 트레이스 기록을 기록하기 위한 상이한 실시 예를 제공한다. 이러한 방식으로 트레이스 파일을 기록하면 프로세서를 약간만 수정하면 되며, 이전 트레이스 기록 접근법과 비교할 때 트레이스 기록의 성능 영향뿐만 아니라 트레이스 파일 크기도 몇 배나 줄일 수 있다.
본 발명은 그 사상 또는 본질적인 특성을 벗어나지 않고 다른 특정 형태로 구현될 수 있다. 설명된 실시 예들은 모든 면에서 단지 예시적이고 제한적이지 않은 것으로 간주되어야 한다. 그러므로, 본 발명의 범위는 전술한 설명이 아니라 첨부된 청구범위에 의해 지시된다. 청구범위의 의미 및 등가 범위 내에 있는 모든 변경은 그 범위 내에 포함되어야 한다.

Claims (15)

  1. 마이크로 프로세서에 있어서,
    복수의 처리 유닛;
    복수의 캐시 계층 내로 정렬(arrange)되고, 제1 캐시 계층 내의 복수의 제1 캐시 및 제2 캐시 계층 내의 하나 이상의 제2 캐시를 포함하는 복수의 캐시로서, 상기 제2 캐시 계층 내의 특정한 제2 캐시는 적어도 상기 제1 캐시 계층 내의 특정한 제1 캐시를 위한 백업 저장소로서 기능하는 것인 상기 복수의 캐시; 및
    적어도 상기 특정한 제2 캐시를, 적어도 동작들을 수행하도록 구성하는 제어 로직을 포함하고,
    상기 동작들은:
    상기 특정한 제1 캐시로부터 특정한 메모리 어드레스를 참조하는 로깅 요청을 수신하는 동작; 및
    상기 요청에 기반하여, 상기 메모리 어드레스에 대응하는 캐시 라인이 상기 특정한 제2 캐시 내에 존재하는지 여부를 결정하고,
    상기 캐시 라인이 상기 특정한 제2 캐시 내에 존재하지 않을 때,
    로깅에 참여하고 적어도 상기 특정한 제2 캐시를 위한 백업 저장소로서 기능하는 제3 캐시가 존재하지 않을 때, 상기 캐시 라인이 로깅되게 하는 것, 및
    상기 제3 캐시가 존재할 때 상기 요청을 상기 제3 캐시로 포워딩하는 것
    중 하나를 수행하거나,
    상기 캐시 라인이 상기 특정한 제2 캐시 내에 존재할 때,
    (i) 상기 캐시 라인이 로깅되는 것으로 상기 특정한 제2 캐시에 의해 결정되지 않을 때, 또는 (ii) 상기 캐시 라인이 로깅되는 것으로 상기 특정한 제2 캐시에 의해 결정되지만 상기 제1 캐시가 상기 특정한 제2 캐시의 캐시 라인에 저장된 현재 값을 알고 있다고 상기 특정한 제2 캐시가 결정하지 않았을 때, 상기 캐시 라인이 로깅되게 하는 것, 및
    (i) 상기 캐시 라인이 로깅되는 것으로 상기 특정한 제2 캐시에 의해 결정될 때, 및 (ii) 상기 제1 캐시가 상기 특정한 제2 캐시의 캐시 라인에 저장된 현재 값을 알고 있다고 결정될 때, 상기 캐시 라인이 로깅될 필요가 없다고 결정되는 것
    중 적어도 하나를 수행하는 동작
    을 포함하는 것인, 마이크로 프로세서.
  2. 제1항에 있어서,
    상기 캐시 라인이 로깅되게 하는 것은:
    트레이스 버퍼 내에 상기 캐시 라인을 로깅하는 것; 및
    상기 특정한 제2 캐시 내에 로깅되는 것으로 상기 캐시 라인을 마킹(marking)하는 것
    을 포함하는 것인, 마이크로 프로세서.
  3. 제1항에 있어서,
    상기 캐시 라인이 로깅되게 하는 것은:
    상기 제1 캐시에게 상기 특정한 메모리 어드레스의 값을 직접 로깅하도록 명령하는 것; 및
    상기 제1 캐시에게 상기 특정한 메모리 어드레스에 대한 이전 로그 항목에 대한 참조를 로깅하도록 명령하는 것
    중 하나를 포함하는 것인, 마이크로 프로세서.
  4. 제1항에 있어서,
    상기 캐시 라인이 로깅되는 것으로 상기 특정한 제2 캐시에 의해 결정되지 않을 때 상기 캐시 라인이 로깅되게 하는 것은:
    제3 캐시 계층이 존재한다고 결정하는 것; 및
    상기 캐시 라인이 상기 특정한 제2 캐시에 의해 값으로 로깅되었다고 상기 제3 캐시에게 통지하는 것
    을 포함하는 것인, 마이크로 프로세서.
  5. 제1항에 있어서,
    상기 제1 캐시 계층은 L1 캐시 계층을 포함하고, 상기 제2 캐시 계층은 L2 캐시 계층 또는 L3 캐시 계층을 포함하는 것인, 마이크로 프로세서.
  6. 제1항에 있어서,
    상기 제어 로직은 또한, 적어도 상기 특정한 제2 캐시를:
    상기 메모리 어드레스에 또한 대응하는 상기 제1 캐시 내의 다른 캐시 라인이 상기 제1 캐시 내에 로깅되지 않는 것으로 마킹된다고 표시하는 메시지를 상기 제1 캐시로부터 수신하고,
    상기 메시지에 기반하여, 상기 특정한 제2 캐시 내에 로깅되지 않는 것으로 상기 캐시 라인을 마킹하도록
    구성하는 것인, 마이크로 프로세서.
  7. 제6항에 있어서,
    상기 처리 유닛을 위해 로깅이 디스에이블되어 있는 동안 상기 다른 캐시 라인이 상기 제1 캐시에 대응하는 처리 유닛에 의해 기입되는(written) 것에 기반하여, 상기 다른 캐시 라인은 상기 제1 캐시 내에 로깅되지 않는 것으로 마킹되는 것인, 마이크로 프로세서.
  8. 제1항에 있어서,
    상기 제어 로직은 또한 적어도 상기 특정한 제2 캐시를:
    상기 제1 캐시로부터 기입을 위해 상기 캐시 라인을 요청하는 메시지를 수신하고;
    로깅이 상기 제1 캐시에 대하여 디스에이블되는 것에 적어도 기반하여 로깅되지 않은 것으로 마킹된 캐시 라인을 상기 제1 캐시로 전송하도록
    구성하는 것인, 마이크로 프로세서.
  9. 상위 캐시 계층이 하위 캐시 계층에 의한 유입을 로깅하는 방법을 상기 하위 캐시 계층에 의한 로깅 요청에 기반하여 결정하는 방법으로서, 상기 방법은 (i) 복수의 처리 유닛; 및 (ii) 복수의 캐시 계층 내로 정렬되고, 제1 캐시 계층 내의 복수의 제1 캐시 및 제2 캐시 계층 내의 하나 이상의 제2 캐시를 포함하는 복수의 캐시로서, 상기 제2 캐시 계층 내의 특정한 제2 캐시는 적어도 상기 제1 캐시 계층 내의 특정한 제1 캐시를 위한 백업 저장소로서 기능하는 것인 상기 복수의 캐시를 포함하는 컴퓨팅 디바이스에서 구현되고, 상기 방법은:
    상기 특정한 제1 캐시로부터 특정한 메모리 어드레스를 참조하는 로깅 요청을 수신하는 단계; 및
    상기 요청에 기반하여, 상기 메모리 어드레스에 대응하는 캐시 라인이 상기 특정한 제2 캐시 내에 존재하는지 여부를 결정하고,
    상기 캐시 라인이 상기 특정한 제2 캐시 내에 존재하지 않을 때,
    로깅에 참여하고 적어도 상기 특정한 제2 캐시를 위한 백업 저장소로서 기능하는 제3 캐시가 존재하지 않을 때, 상기 캐시 라인이 로깅되게 하는 것, 및
    상기 제3 캐시가 존재할 때 상기 요청을 상기 제3 캐시로 포워딩하는 것
    중 하나를 수행하거나,
    상기 캐시 라인이 상기 특정한 제2 캐시 내에 존재할 때,
    (i) 상기 캐시 라인이 로깅되는 것으로 상기 특정한 제2 캐시에 의해 결정되지 않을 때, 또는 (ii) 상기 캐시 라인이 로깅되는 것으로 상기 특정한 제2 캐시에 의해 결정되지만 상기 제1 캐시가 상기 특정한 제2 캐시의 캐시 라인에 저장된 현재 값을 알고 있다고 상기 특정한 제2 캐시가 결정하지 않았을 때, 상기 캐시 라인이 로깅되게 하는 것, 및
    (i) 상기 캐시 라인이 로깅되는 것으로 상기 특정한 제2 캐시에 의해 결정될 때 및 (ii) 상기 제1 캐시가 상기 특정한 제2 캐시의 캐시 라인에 저장된 현재 값을 알고 있다고 결정될 때, 상기 캐시 라인이 로깅될 필요가 없다고 결정하는 것
    중 적어도 하나를 수행하는 단계
    를 포함하는 것인, 하위 캐시 계층에 의한 유입 로깅 방법.
  10. 제9항에 있어서,
    상기 캐시 라인이 로깅되게 하는 것은:
    트레이스 버퍼 내에 상기 캐시 라인을 로깅하는 것; 및
    상기 특정한 제2 캐시 내에 로깅되는 것으로 상기 캐시 라인을 마킹하는 것
    을 포함하는 것인, 하위 캐시 계층에 의한 유입 로깅 방법.
  11. 제9항에 있어서,
    상기 캐시 라인이 로깅되게 하는 것은:
    상기 제1 캐시에게 상기 특정한 메모리 어드레스의 값을 직접 로깅하도록 명령하는 것; 및
    상기 제1 캐시에게 상기 특정한 메모리 어드레스에 대한 이전 로그 항목에 대한 참조를 로깅하도록 명령하는 것
    중 하나를 포함하는 것인, 하위 캐시 계층에 의한 유입 로깅 방법.
  12. 제9항에 있어서,
    상기 캐시 라인이 로깅되는 것으로 상기 특정한 제2 캐시에 의해 결정되지 않을 때 상기 캐시 라인이 로깅되게 하는 것은:
    상기 제3 캐시가 존재한다고 결정하는 것; 및
    상기 제3 캐시의 지식에 기반하여 상기 캐시 라인이 참조로 로깅되게 하는 것
    을 포함하는 것인, 하위 캐시 계층에 의한 유입 로깅 방법.
  13. 제9항에 있어서,
    상기 캐시 라인이 로깅되는 것으로 상기 특정한 제2 캐시에 의해 결정되지 않을 때 상기 캐시 라인이 로깅되게 하는 것은:
    제3 캐시 계층이 존재한다고 결정하는 것; 및
    상기 캐시 라인이 상기 특정한 제2 캐시에 의해 값으로 로깅되었다고 상기 제3 캐시에게 통지하는 것
    을 포함하는 것인, 하위 캐시 계층에 의한 유입 로깅 방법.
  14. 제9항에 있어서,
    상기 제1 캐시 계층은 L1 캐시 계층을 포함하고, 상기 제2 캐시 계층은 L2 캐시 계층 또는 L3 캐시 계층을 포함하는 것인, 하위 캐시 계층에 의한 유입 로깅 방법.
  15. 제9항에 있어서,
    상기 제어 로직은 또한, 적어도 상기 특정한 제2 캐시를:
    상기 메모리 어드레스에 또한 대응하는 상기 제1 캐시 내의 다른 캐시 라인이 상기 제1 캐시 내에 로깅되지 않는 것으로 마킹된다고 표시하는 메시지를 상기 제1 캐시로부터 수신하고,
    상기 메시지에 기반하여, 상기 특정한 제2 캐시 내에 로깅되지 않는 것으로 상기 캐시 라인을 마킹하도록
    구성하는 것인, 하위 캐시 계층에 의한 유입 로깅 방법.
KR1020207026922A 2018-02-23 2019-02-14 요청에 의해 캐시 유입을 상위 레벨 캐시로 로깅 KR102661543B1 (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US15/904,072 US10496537B2 (en) 2018-02-23 2018-02-23 Trace recording by logging influxes to a lower-layer cache based on entries in an upper-layer cache
US15/904,072 2018-02-23
US15/947,699 US10642737B2 (en) 2018-02-23 2018-04-06 Logging cache influxes by request to a higher-level cache
US15/947,699 2018-04-06
PCT/US2019/017912 WO2019164730A1 (en) 2018-02-23 2019-02-14 Logging cache influxes by request to a higher-level cache

Publications (2)

Publication Number Publication Date
KR20200123188A true KR20200123188A (ko) 2020-10-28
KR102661543B1 KR102661543B1 (ko) 2024-04-26

Family

ID=65576730

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020207026922A KR102661543B1 (ko) 2018-02-23 2019-02-14 요청에 의해 캐시 유입을 상위 레벨 캐시로 로깅

Country Status (16)

Country Link
US (1) US10642737B2 (ko)
EP (1) EP3756099B1 (ko)
JP (1) JP7334163B2 (ko)
KR (1) KR102661543B1 (ko)
CN (1) CN111742301A (ko)
AU (1) AU2019223807B2 (ko)
BR (1) BR112020014668A2 (ko)
CA (1) CA3088558A1 (ko)
ES (1) ES2943508T3 (ko)
IL (1) IL276650B2 (ko)
MX (1) MX2020008661A (ko)
PH (1) PH12020551310A1 (ko)
RU (1) RU2764173C1 (ko)
SG (1) SG11202007566WA (ko)
WO (1) WO2019164730A1 (ko)
ZA (1) ZA202004082B (ko)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10031834B2 (en) 2016-08-31 2018-07-24 Microsoft Technology Licensing, Llc Cache-based tracing for time travel debugging and analysis
US11042469B2 (en) 2017-08-28 2021-06-22 Microsoft Technology Licensing, Llc Logging trace data for program code execution at an instruction level
US10496537B2 (en) 2018-02-23 2019-12-03 Microsoft Technology Licensing, Llc Trace recording by logging influxes to a lower-layer cache based on entries in an upper-layer cache
WO2021061220A1 (en) * 2019-09-24 2021-04-01 Microsoft Technology Licensing, Llc Logging trace data for program code execution at an instruction level
KR20210079637A (ko) * 2019-12-20 2021-06-30 에스케이하이닉스 주식회사 데이터 저장 장치 및 그 동작 방법
WO2022177697A1 (en) * 2021-02-22 2022-08-25 Microsoft Technology Licensing, Llc Cache-based trace logging using tags in an upper-level cache
US20220269614A1 (en) * 2021-02-22 2022-08-25 Microsoft Technology Licensing, Llc Treating main memory as a collection of tagged cache lines for trace logging
US20220269615A1 (en) * 2021-02-22 2022-08-25 Microsoft Technology Licensing, Llc Cache-based trace logging using tags in system memory
US11561896B2 (en) 2021-02-22 2023-01-24 Microsoft Technology Licensing, Llc Cache-based trace logging using tags in an upper-level cache
LU102708B1 (en) * 2021-03-26 2022-09-26 Microsoft Technology Licensing Llc Physical memory address omission or obfuscation within an execution trace
LU102709B1 (en) * 2021-03-26 2022-09-26 Microsoft Technology Licensing Llc Memory address compression within an execution trace
LU500060B1 (en) * 2021-04-20 2022-10-20 Microsoft Technology Licensing Llc Processor support for using memory page markings as logging cues to simultaneously record plural execution contexts into independent execution traces
LU500061B1 (en) * 2021-04-20 2022-10-20 Microsoft Technology Licensing Llc Processor support for using cache way- locking to simultaneously record plural execution contexts into independent execution traces

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170052876A1 (en) * 2015-08-18 2017-02-23 Telefonaktiebolaget L M Ericsson (Publ) Method for observing software execution, debug host and debug target

Family Cites Families (91)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4598364A (en) 1983-06-29 1986-07-01 International Business Machines Corporation Efficient trace method adaptable to multiprocessors
AU3776793A (en) 1992-02-27 1993-09-13 Intel Corporation Dynamic flow instruction cache memory
US5666514A (en) * 1994-07-01 1997-09-09 Board Of Trustees Of The Leland Stanford Junior University Cache memory containing extra status bits to indicate memory regions where logging of data should occur
US5905855A (en) 1997-02-28 1999-05-18 Transmeta Corporation Method and apparatus for correcting errors in computer systems
US6009270A (en) 1997-04-08 1999-12-28 Advanced Micro Devices, Inc. Trace synchronization in a processor
US6167536A (en) 1997-04-08 2000-12-26 Advanced Micro Devices, Inc. Trace cache for a microprocessor-based device
US6094729A (en) 1997-04-08 2000-07-25 Advanced Micro Devices, Inc. Debug interface including a compact trace record storage
US5944841A (en) 1997-04-15 1999-08-31 Advanced Micro Devices, Inc. Microprocessor with built-in instruction tracing capability
US6101524A (en) 1997-10-23 2000-08-08 International Business Machines Corporation Deterministic replay of multithreaded applications
US6513155B1 (en) 1997-12-12 2003-01-28 International Business Machines Corporation Method and system for merging event-based data and sampled data into postprocessed trace output
US6351844B1 (en) 1998-11-05 2002-02-26 Hewlett-Packard Company Method for selecting active code traces for translation in a caching dynamic translator
US6823473B2 (en) 2000-04-19 2004-11-23 Hewlett-Packard Development Company, L.P. Simultaneous and redundantly threaded processor uncached load address comparator and data value replication circuit
US6854108B1 (en) 2000-05-11 2005-02-08 International Business Machines Corporation Method and apparatus for deterministic replay of java multithreaded programs on multiprocessors
US7448025B2 (en) 2000-12-29 2008-11-04 Intel Corporation Qualification of event detection by thread ID and thread privilege level
JP2002207613A (ja) * 2001-01-12 2002-07-26 Fujitsu Ltd 履歴採取装置及び履歴採取方法
US6634011B1 (en) 2001-02-15 2003-10-14 Silicon Graphics, Inc. Method and apparatus for recording program execution in a microprocessor based integrated circuit
US20020144101A1 (en) 2001-03-30 2002-10-03 Hong Wang Caching DAG traces
US7185234B1 (en) 2001-04-30 2007-02-27 Mips Technologies, Inc. Trace control from hardware and software
US7181728B1 (en) 2001-04-30 2007-02-20 Mips Technologies, Inc. User controlled trace records
US7178133B1 (en) 2001-04-30 2007-02-13 Mips Technologies, Inc. Trace control based on a characteristic of a processor's operating state
US20030079205A1 (en) 2001-10-22 2003-04-24 Takeshi Miyao System and method for managing operating systems
US7051239B2 (en) 2001-12-28 2006-05-23 Hewlett-Packard Development Company, L.P. Method and apparatus for efficiently implementing trace and/or logic analysis mechanisms on a processor chip
US7089400B1 (en) 2002-08-29 2006-08-08 Advanced Micro Devices, Inc. Data speculation based on stack-relative addressing patterns
US7073026B2 (en) * 2002-11-26 2006-07-04 Advanced Micro Devices, Inc. Microprocessor including cache memory supporting multiple accesses per cycle
US20040117690A1 (en) 2002-12-13 2004-06-17 Andersson Anders J. Method and apparatus for using a hardware disk controller for storing processor execution trace information on a storage device
US20040153635A1 (en) 2002-12-30 2004-08-05 Kaushik Shivnandan D. Privileged-based qualification of branch trace store data
US7526757B2 (en) 2004-01-14 2009-04-28 International Business Machines Corporation Method and apparatus for maintaining performance monitoring structures in a page table for use in monitoring performance of a computer program
US20050223364A1 (en) 2004-03-30 2005-10-06 Peri Ramesh V Method and apparatus to compact trace in a trace buffer
US8010337B2 (en) 2004-09-22 2011-08-30 Microsoft Corporation Predicting database system performance
US7447946B2 (en) 2004-11-05 2008-11-04 Arm Limited Storage of trace data within a data processing apparatus
JP4114879B2 (ja) 2005-01-21 2008-07-09 インターナショナル・ビジネス・マシーンズ・コーポレーション トレース情報収集システム、トレース情報収集方法、及びトレース情報収集プログラム
US7640539B2 (en) 2005-04-12 2009-12-29 International Business Machines Corporation Instruction profiling using multiple metrics
US8301868B2 (en) 2005-09-23 2012-10-30 Intel Corporation System to profile and optimize user software in a managed run-time environment
US7877630B1 (en) 2005-09-28 2011-01-25 Oracle America, Inc. Trace based rollback of a speculatively updated cache
US7984281B2 (en) 2005-10-18 2011-07-19 Qualcomm Incorporated Shared interrupt controller for a multi-threaded processor
US9268666B2 (en) 2005-10-21 2016-02-23 Undo Ltd. System and method for debugging of computer programs
US7620938B2 (en) 2005-10-31 2009-11-17 Microsoft Corporation Compressed program recording
US20070106827A1 (en) 2005-11-08 2007-05-10 Boatright Bryan D Centralized interrupt controller
US7461209B2 (en) 2005-12-06 2008-12-02 International Business Machines Corporation Transient cache storage with discard function for disposable data
US20070150881A1 (en) 2005-12-22 2007-06-28 Motorola, Inc. Method and system for run-time cache logging
US20070220361A1 (en) 2006-02-03 2007-09-20 International Business Machines Corporation Method and apparatus for guaranteeing memory bandwidth for trace data
US7958497B1 (en) 2006-06-07 2011-06-07 Replay Solutions, Inc. State synchronization in recording and replaying computer programs
US7676632B2 (en) 2006-07-18 2010-03-09 Via Technologies, Inc. Partial cache way locking
US7472218B2 (en) 2006-09-08 2008-12-30 International Business Machines Corporation Assisted trace facility to improve CPU cache performance
US20080114964A1 (en) 2006-11-14 2008-05-15 Davis Gordon T Apparatus and Method for Cache Maintenance
US20080250207A1 (en) 2006-11-14 2008-10-09 Davis Gordon T Design structure for cache maintenance
US8370806B2 (en) 2006-11-15 2013-02-05 Qualcomm Incorporated Non-intrusive, thread-selective, debugging method and system for a multi-thread digital signal processor
JP4851958B2 (ja) * 2007-02-19 2012-01-11 エヌイーシーコンピュータテクノ株式会社 バスインタフェースアダプタ、データ転送方法、データ転送システム及び情報処理装置
US7685409B2 (en) * 2007-02-21 2010-03-23 Qualcomm Incorporated On-demand multi-thread multimedia processor
US8261130B2 (en) 2007-03-02 2012-09-04 Infineon Technologies Ag Program code trace signature
US8484516B2 (en) 2007-04-11 2013-07-09 Qualcomm Incorporated Inter-thread trace alignment method and system for a multi-threaded processor
US20090037886A1 (en) 2007-07-30 2009-02-05 Mips Technologies, Inc. Apparatus and method for evaluating a free-running trace stream
CN101446909B (zh) 2007-11-30 2011-12-28 国际商业机器公司 用于管理任务事件的方法和系统
US8078807B2 (en) 2007-12-27 2011-12-13 Intel Corporation Accelerating software lookups by using buffered or ephemeral stores
US8413122B2 (en) 2009-02-12 2013-04-02 International Business Machines Corporation System and method for demonstrating the correctness of an execution trace in concurrent processing environments
US8402318B2 (en) 2009-03-24 2013-03-19 The Trustees Of Columbia University In The City Of New York Systems and methods for recording and replaying application execution
US8589629B2 (en) 2009-03-27 2013-11-19 Advanced Micro Devices, Inc. Method for way allocation and way locking in a cache
US8140903B2 (en) 2009-04-16 2012-03-20 International Business Machines Corporation Hardware process trace facility
US8423965B2 (en) 2009-06-23 2013-04-16 Microsoft Corporation Tracing of data flow
JP2011013867A (ja) 2009-06-30 2011-01-20 Panasonic Corp データ処理装置、性能評価解析システム
US8719796B2 (en) 2010-01-26 2014-05-06 The Board Of Trustees Of The University Of Illinois Parametric trace slicing
US8468501B2 (en) 2010-04-21 2013-06-18 International Business Machines Corporation Partial recording of a computer program execution for replay
US9015441B2 (en) 2010-04-30 2015-04-21 Microsoft Technology Licensing, Llc Memory usage scanning
US8499200B2 (en) 2010-05-24 2013-07-30 Ncr Corporation Managing code-tracing data
US20120042212A1 (en) 2010-08-10 2012-02-16 Gilbert Laurenti Mixed Mode Processor Tracing
US9645913B2 (en) 2011-08-03 2017-05-09 Daniel Geist Method and apparatus for debugging programs
US20130055033A1 (en) 2011-08-22 2013-02-28 International Business Machines Corporation Hardware-assisted program trace collection with selectable call-signature capture
WO2013048493A1 (en) * 2011-09-30 2013-04-04 Intel Corporation Memory channel that supports near memory and far memory access
US8584110B2 (en) 2011-09-30 2013-11-12 International Business Machines Corporation Execution trace truncation
US8612650B1 (en) 2012-03-13 2013-12-17 Western Digital Technologies, Inc. Virtual extension of buffer to reduce buffer overflow during tracing
US9058415B1 (en) 2013-03-15 2015-06-16 Google Inc. Counting events using hardware performance counters and annotated instructions
US9304863B2 (en) 2013-03-15 2016-04-05 International Business Machines Corporation Transactions for checkpointing and reverse execution
JP2014191622A (ja) * 2013-03-27 2014-10-06 Fujitsu Ltd 処理装置
US9619404B2 (en) * 2013-04-16 2017-04-11 International Business Machines Corporation Backup cache with immediate availability
US9189360B2 (en) 2013-06-15 2015-11-17 Intel Corporation Processor that records tracing data in non contiguous system memory slices
US9734080B2 (en) * 2013-08-08 2017-08-15 Nxp Usa, Inc. Cache organization and method
US9086974B2 (en) 2013-09-26 2015-07-21 International Business Machines Corporation Centralized management of high-contention cache lines in multi-processor computing environments
US9965320B2 (en) * 2013-12-27 2018-05-08 Intel Corporation Processor with transactional capability and logging circuitry to report transactional operations
US9785568B2 (en) 2014-05-19 2017-10-10 Empire Technology Development Llc Cache lookup bypass in multi-level cache systems
US9535815B2 (en) 2014-06-04 2017-01-03 Nvidia Corporation System, method, and computer program product for collecting execution statistics for graphics processing unit workloads
US9300320B2 (en) 2014-06-27 2016-03-29 Qualcomm Incorporated System and method for dictionary-based cache-line level code compression for on-chip memories using gradual bit removal
US9875173B2 (en) 2014-06-30 2018-01-23 Microsoft Technology Licensing, Llc Time travel debugging in managed runtime
US9361228B2 (en) 2014-08-05 2016-06-07 Qualcomm Incorporated Cache line compaction of compressed data segments
US10210168B2 (en) * 2015-02-23 2019-02-19 International Business Machines Corporation Managing data in storage according to a log structure
US9588870B2 (en) 2015-04-06 2017-03-07 Microsoft Technology Licensing, Llc Time travel debugging for browser components
US9767237B2 (en) 2015-11-13 2017-09-19 Mentor Graphics Corporation Target capture and replay in emulation
US9569338B1 (en) 2015-12-02 2017-02-14 International Business Machines Corporation Fingerprint-initiated trace extraction
US10031833B2 (en) 2016-08-31 2018-07-24 Microsoft Technology Licensing, Llc Cache-based tracing for time travel debugging and analysis
US10031834B2 (en) 2016-08-31 2018-07-24 Microsoft Technology Licensing, Llc Cache-based tracing for time travel debugging and analysis
JP7202293B2 (ja) 2016-10-11 2023-01-11 グリーン ヒルズ ソフトウェア,エルエルシー 垂直統合インストルメント化およびトレース再構成のためのシステム、方法およびデバイス
US10496537B2 (en) 2018-02-23 2019-12-03 Microsoft Technology Licensing, Llc Trace recording by logging influxes to a lower-layer cache based on entries in an upper-layer cache

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20170052876A1 (en) * 2015-08-18 2017-02-23 Telefonaktiebolaget L M Ericsson (Publ) Method for observing software execution, debug host and debug target

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Ponugoti Mounika et al, "Exploiting cache coherence for effective on-the-fly data tracing in multicores", 2016 iEEE 34th International Conference on Computer Design (ICCD), (2016.10.2.) *
Vladimir Uzelac et al, "Hardware-Based Load value trace Filtering for On-the Fly Debugging", ACM Transaction on Embedded Computing vol.12, no. 2s, (2013.5.1.) *

Also Published As

Publication number Publication date
IL276650B2 (en) 2023-09-01
JP7334163B2 (ja) 2023-08-28
EP3756099B1 (en) 2023-03-29
BR112020014668A2 (pt) 2020-12-01
JP2021515287A (ja) 2021-06-17
CN111742301A (zh) 2020-10-02
RU2764173C1 (ru) 2022-01-13
ES2943508T3 (es) 2023-06-13
WO2019164730A1 (en) 2019-08-29
CA3088558A1 (en) 2019-08-29
EP3756099A1 (en) 2020-12-30
IL276650B1 (en) 2023-05-01
ZA202004082B (en) 2021-09-29
US10642737B2 (en) 2020-05-05
US20190266086A1 (en) 2019-08-29
KR102661543B1 (ko) 2024-04-26
AU2019223807A1 (en) 2020-07-23
PH12020551310A1 (en) 2021-09-06
MX2020008661A (es) 2020-09-22
SG11202007566WA (en) 2020-09-29
AU2019223807B2 (en) 2024-02-15
IL276650A (en) 2020-09-30

Similar Documents

Publication Publication Date Title
KR102661543B1 (ko) 요청에 의해 캐시 유입을 상위 레벨 캐시로 로깅
KR102645481B1 (ko) 상위 계층 캐시의 항목을 기반으로 하위 계층 캐시로의 유입을 로깅함으로써 트레이스 기록
US11994974B2 (en) Recording a trace of code execution using reference bits in a processor cache
JP7152474B2 (ja) キャッシュコヒーレンスプロトコルデータを用いたキャッシュベーストレース記録
US11126536B2 (en) Facilitating recording a trace file of code execution using index bits in a processor cache
US10324851B2 (en) Facilitating recording a trace file of code execution using way-locking in a set-associative processor cache
US10558572B2 (en) Decoupling trace data streams using cache coherence protocol data
US11907091B2 (en) Trace recording by logging influxes to an upper-layer shared cache, plus cache coherence protocol transitions among lower-layer caches
CN117157632A (zh) 在记录位精确踪迹时日志记录高速缓存行寿命提示

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant