다양한 실시예들은 일반적으로 애플리케이션 루틴의 상이한 부분들에 의한 또는 관련된 애플리케이션 루틴들에 의한 데이터에의 조율되지 않은 액세스들로부터 발생하는 경쟁 상태를, 이러한 조율되지 않은 액세스들과 연관되는 경향이 있는 하나 이상의 지정된 캐시 이벤트들의 발생을 검출하는 것에 의해, 검출하는 것에 관한 것이다. 프로세서 구성요소의 모니터링 유닛은 이러한 캐시 이벤트들과 연관된 프로세서 구성요소의 상태의 표시들을 포착하도록 구성되어 있다. 모니터링 유닛은 애플리케이션 루틴 또는 관련된 애플리케이션 루틴들의 디버깅을 가능하게 하기 위해 필터링 및/또는 디버깅 루틴으로의 중계를 위해 그 포착된 표시들을 검출 드라이버(detection driver)에 제공한다.
본 기술 분야의 통상의 기술자는 잘 아는 바와 같이, 프로세서 구성요소가 부정확한 데이터를 읽고 사용하게 되는 방식으로, 캐시의 내용이 다른 저장소들(다른 캐시들을 포함함)의 내용과 동기화 실패하지 않도록 보장하기 위해 캐시 일관성 메커니즘(cache coherency mechanism)들이 이용된다. 이러한 캐시 일관성 메커니즘들은 데이터를 캐시 라인에 저장하고, 캐시 라인으로부터 데이터를 검색하며, 캐시 라인에 있는 데이터를 유효하지 않은 것으로 표시하라고 그리고/또는 캐시 라인을 이용 가능하게 만들라고 캐시에 지시하는 동작들, 및 캐시 라인에 저장된 데이터와 연관된 상태를 변경하는 또 다른 동작들을 종종 수반한다. 일부 실시예들에서, 이용되는 캐시 일관성 메커니즘은 널리 공지되고 널리 사용되는 MESI(modified-exclusive-shared-invalidated) 알고리즘에 기초할 수 있다.
사용되는 특정 캐시 일관성 메커니즘에 관계없이, 캐시 라인에 저장된 데이터와 연관된 상태에 영향을 미치는 동작들 중 하나 이상은 프로세서 구성요소에 포함된 모니터링 유닛에 의해 검출될 수 있는 캐시 이벤트들일 수 있다. 이러한 모니터링 유닛은 하나 이상의 지정된 캐시 이벤트들이 있는지 모니터링하도록 그리고/또는 하나 이상의 지정된 캐시 이벤트들을 검출할 시에 프로세서 구성요소의 코어의 상태의 하나 이상의 양태들의 표시들을 포착하도록 프로그램 가능할 수 있다. 포착된 표시들은 발생한 캐시 이벤트의 유형의 표시자, 캐시 이벤트를 트리거한 데이터 액세스의 유형의 표시자(예컨대, 읽기 또는 쓰기 동작), 데이터 액세스를 야기한 프로세스 및/또는 실행 스레드의 식별자, 명령어 포인터의 주소의 표시, 프로세서 구성요소의 하나 이상의 레지스터들의 내용 등을 포함할 수 있다.
모니터링되는 하나 이상의 지정된 캐시 이벤트들은 시간상 비교적 가까이에서 일어나는(예컨대, 하나의 액세스가 다른 액세스 직후에 일어남) 동일한 데이터 조각에의 연속적인 액세스들로부터 발생하는 하나 이상의 유형의 캐시 이벤트를 포함할 수 있다. 특히 관심을 끄는 것은 애플리케이션 루틴의 2개의 동시 실행되는 부분들에 의한 동일한 데이터 조각을 수반하는 조율되지 않은 읽기 동작과 쓰기 동작의 조합으로부터 또는 조율되지 않은 쓰기 동작들의 쌍으로부터 발생할 수 있는 캐시 이벤트이다. 대안적으로, 이러한 조율되지 않은 액세스들은 이러한 액세스들이 동시에 행해질 때 이들을 조율하도록 되어 있는 2개 이상의 관련된 애플리케이션 루틴들에 의해 행해질 수 있다. 이와 같이 조율이 없으면 데이터 조각이 쓰기 동작에 의해 변경되기 전에 또는 그 후에 읽기 동작이 그 데이터 조각을 예측할 수 없게 검색하는 읽기 동작과 쓰기 동작 사이의 경쟁 상태 또는 2개의 쓰기 동작들의 결과 얻어진 데이터의 상태가 예측 가능하지 않게 되는 2개의 쓰기 동작들 사이의 경쟁 상태가 야기될 수 있다. 이러한 캐시 이벤트들은 다른 캐시의 다른 캐시 라인에 저장된 동일한 데이터에의 임박한 또는 진행 중인 연속적인 액세스들의 결과로서 캐시 라인을 선제적으로 무효화하기 위해 캐시에의 명시적 통신을 수반한다. 이러한 캐시 이벤트의 일 예는 RFO("request for ownership" 또는 "read for ownership") 캐시 이벤트일 수 있다. 대안적으로 또는 그에 부가하여, 이러한 캐시 이벤트들은 다른 캐시의 다른 캐시 라인에 저장되기도 하고 수정되기도 한 결과로서 무효화된 하나의 캐시의 캐시 라인에 있는 데이터에의 액세스를 수반할 수 있다. 이러한 캐시 이벤트의 일 예는 HITM("hit modified") 캐시 이벤트일 수 있다.
특정 캐시 이벤트와 연관된 프로세서 구성요소의 상태의 표시들이 캐시 이벤트가 일어날 때마다 포착될 수 있거나, 보다 적은 지정된 빈도수로 포착될 수 있다. 예로서, 이러한 포착이 지정된 캐시 이벤트의 매 5 번째 발생에서만 일어날 수 있다. 이것은 처리 및/또는 저장 요구사항들을 감소시키기 위해 행해질 수 있고, 지정된 캐시 이벤트가 빈번히 일어날 것으로 예상되는 경우에 특히 그렇다. 이것은 또한, 지정된 캐시 이벤트가 일어날 때마다 포착이 일어나지는 않을지라도, 경쟁 상태를 야기하는 애플리케이션 루틴 내의 오류가 포착될 가능성이 있을 정도의 충분한 빈도수로 일어날 것이라고 예상되어 행해질 수 있다.
모니터링 유닛의 프로그래밍은 모니터링 유닛으로부터 하나 이상의 지정된 캐시 이벤트들의 포착된 표시들을 또한 수신하는 검출 드라이버에 의해 수행될 수 있다. 검출 드라이버는, 디버깅 루틴에 제공될 데이터의 총량을 감소시키기 위해 보다 제한된 표시들의 세트로 이루어지는 감소된 데이터를 생성하기 위해, 그가 수신하는 포착된 표시들을 필터링할 수 있다. 디버깅 루틴은 애플리케이션 루틴이 실행되는 동일한 컴퓨팅 디바이스의 프로세서 구성요소에 의해 실행될 수 있다. 대안적으로, 디버깅 루틴은 상이한 컴퓨팅 디바이스의 프로세서 구성요소에 의해 실행될 수 있고, 감소된 데이터가 네트워크를 통해 다른 컴퓨팅 디바이스로 전송될 수 있다.
본 명세서에 사용된 표기법 및 명명법을 일반적으로 참조하면, 이하의 상세한 설명의 부분들은 컴퓨터 또는 컴퓨터들의 네트워크 상에서 실행되는 프로그램 절차들의 면에서 제시될 수 있다. 이 절차적 설명들 및 표현들은 본 기술 분야의 통상의 기술자들이 자신의 작업의 내용을 본 기술 분야의 다른 통상의 기술자들에게 가장 효과적으로 전달하기 위해 사용된다. 절차는 여기에서 일반적으로 원하는 결과를 가져오는 자체 일관성 있는(self-consistent) 동작들의 시퀀스인 것으로 생각된다. 이 동작들은 물리적 양의 물리적 조작을 필요로 하는 것이다. 보통, 비록 꼭 그럴 필요는 없지만, 이러한 양은 저장, 전송, 결합, 비교 또는 다른 방식으로 조작될 수 있는 전기, 자기 또는 광 신호의 형태를 취한다. 원칙적으로 흔히 사용되기 때문에, 이러한 신호를 비트, 값, 요소, 심볼, 문자, 항, 숫자 등으로 지칭하는 것이 때로는 편리한 것으로 밝혀졌다. 그렇지만, 이 용어들 및 유사한 용어들 모두가 적절한 물리적 양과 연관되어 있고 그 양에 적용되는 편리한 명칭들에 불과하다는 것을 염두에 두어야 한다.
게다가, 이 조작들은 종종, 가산 또는 비교와 같은, 사람 조작자에 의해 수행되는 정신적 작업들과 흔히 연관되어 있는 용어들로 지칭된다. 그렇지만, 하나 이상의 실시예들의 일부를 형성하는 본원에 기술되는 동작들 중 임의의 것에서, 사람 조작자의 이러한 능력이 대부분의 경우들에서 필요하지 않거나 바람직하지 않다. 오히려, 이 동작들은 머신 동작들이다. 다양한 실시예들의 동작들을 수행하는 데 유용한 머신들은 본원에서의 개시 내용에 따라 작성되는 저장된 컴퓨터 프로그램에 의해 선택적으로 활성화되거나 구성되는 범용 디지털 컴퓨터를 포함하고, 그리고/또는 요구된 목적을 위해 구체적으로 구성된 장치를 포함한다. 다양한 실시예들은 또한 이 동작들을 수행하는 장치들 또는 시스템들에 관한 것이다. 이 장치들은 요구된 목적을 위해 구체적으로 구성될 수 있거나, 범용 컴퓨터를 포함할 수 있다. 각종의 이 기계들에 대한 요구된 구조는 주어진 설명으로부터 명백하게 될 것이다.
이제부터 도면들을 참조하고, 도면들 전체에 걸쳐 유사한 참조 번호들은 유사한 요소들을 지칭하는 데 사용된다. 이하의 설명에서, 설명의 목적상, 실시예들의 완전한 이해를 제공하기 위해 다수의 구체적인 상세들이 기술되어 있다. 그렇지만, 새로운 실시예들이 이 구체적인 상세 없이 실시될 수 있다는 것이 명백할 수 있다. 다른 경우들에서, 실시예들의 설명을 용이하게 하기 위해, 널리 공지된 구조들 및 디바이스들이 블록도 형태로 도시되어 있다. 의도는 청구항들의 범주 내의 모든 수정들, 등가물들, 및 대안들을 포함하는 것이다.
도 1은 서버(100), 컴퓨팅 디바이스(300) 및 디버깅 디바이스(500) 중 하나 이상을 포함하는 경쟁 상태 디버깅 시스템(1000)의 일 실시예의 블록도이다. 이 컴퓨팅 디바이스(100, 300 및 500) 각각은 데스크톱 컴퓨터 시스템, 데이터 입력 단말, 랩톱 컴퓨터, 넷북 컴퓨터, 태블릿 컴퓨터, 핸드헬드 PDA(personal data assistant), 디지털 카메라, 스마트폰, 스마트 손목 시계, 스마트 안경, 의류 내에 포함된 신체 착용 컴퓨팅 디바이스, 차량(예컨대, 자동차, 자전거, 휠체어 등) 내에 통합된 컴퓨팅 디바이스, 서버, 서버들의 클러스터, 서버 팜(server farm) 등(이들로 제한되지 않음)을 비롯한, 각종의 유형의 컴퓨팅 디바이스 중 임의의 것일 수 있다.
도시된 바와 같이, 이 컴퓨팅 디바이스들(100, 300 및 500)의 서브셋들은 컴퓨팅 디바이스(300) 상의 단일의 애플리케이션 루틴(370)의 부분들 또는 다수의 관련된 애플리케이션 루틴들(370)의 부분들의 동시 실행으로부터 발생하는, 데이터를 액세스하는 데 있어서의 경쟁 상태들의 디버깅과 연관되어 있는 신호들을 네트워크(999)를 통해 교환할 수 있다. 그렇지만, 이 컴퓨팅 디바이스들 중 하나 이상은 이러한 디버깅과 전혀 관련이 없는 다른 데이터를 네트워크(999)를 통해 서로 그리고/또는 또 다른 컴퓨팅 디바이스들(도시 생략)과 교환할 수 있다. 다양한 실시예들에서, 네트워크(999)는 어쩌면 단일의 건물 또는 다른 비교적 제한된 구역 내에 뻗어 있는 것으로 제한되는 단일의 네트워크, 어쩌면 상당한 거리에 걸쳐 뻗어 있는 연결된 네트워크들의 조합일 수 있고, 그리고/또는 인터넷을 포함할 수 있다. 이와 같이, 네트워크(999)는 전기적 및/또는 광학적 전도성 케이블을 이용하는 유선 기술들, 및 적외선, 무선 주파수 또는 다른 형태의 무선 전송을 이용하는 무선 기술들(이들로 제한되지 않음)을 비롯한, 신호들이 교환될 수 있는 각종의 통신 기술들(또는 그 조합) 중 임의의 것에 기초할 수 있다.
다양한 실시예들에서, 컴퓨팅 디바이스(300)는 프로세서 구성요소(350), 저장소(360), 컨트롤들(320), 디스플레이(380), 및 컴퓨팅 디바이스(300)를 네트워크(999)에 결합시키는 인터페이스(390) 중 하나 이상을 포함한다. 프로세서 구성요소(350)는 모니터링 유닛(354), 및 각각이 캐시(357)를 포함하는 하나 이상의 코어들(355)을 포함한다. 캐시들(357) 각각은 레벨 1(L1) 및/또는 레벨 2(L2) 캐시일 수 있고, 각각은 그가 포함되어 있는 코어들(355) 중 하나에 의한 사용에 전용되어 있을 수 있다. 컴퓨팅 디바이스(300)는, 그에 부가하여, 코어들(355) 중 다수의 코어들에 의해 공유될 수 있는 부가의 캐시(367)를 포함할 수 있다. 캐시(367)는 프로세서 구성요소(350) 내에 또는 제어기 또는 다른 회로부(이에 의해 저장소(360)가 프로세서 구성요소(350)에 결합됨) 내에 포함될 수 있고, L2 또는 레벨 3(L3) 캐시일 수 있다.
모니터링 유닛(354)은 각종의 이벤트들 중 임의의 것의 발생을 검출하기 위해 코어들(355) 각각의 상태를 모니터링할 수 있고, 코어들(355) 각각의 하나 이상의 레지스터들의 상태를 비롯한, 코어들(355) 각각의 상태의 양태들을 포착하는 동작을 할 수 있다. 모니터링 유닛(354)은 캐시들(357) 각각의 동작과 연관된 캐시 이벤트들을 직접 모니터링하기 위해 코어들(355) 각각의 캐시들(357)에 직접 결합될 수 있다. 캐시(367)가 프로세서 구성요소(350)에 포함되는 실시예들에서, 모니터링 유닛(354)은 캐시(367)의 동작과 연관된 캐시 이벤트들을 직접 모니터링하기 위해 캐시(367)에 직접 결합될 수 있다. 캐시(367)가 프로세서 구성요소(350)에 포함되지 않는(예컨대, 캐시(367)가 저장소(360)에 포함되거나 저장소(360)와 다른 방식으로 연관되어 있는) 실시예들에서, 모니터링 유닛(354)은 캐시(367)와 연관된 캐시 이벤트들을 나타낼 수 있는, 프로세서 구성요소(350)와 캐시(367) 사이에서 교환되는 통신을 모니터링할 수 있다. 달리 말하면, 모니터링 유닛(354)은 캐시들(357) 각각과 관련하여 그리고/또는 캐시(367)에서 발생하는 하나 이상의 특정 유형의 캐시 이벤트의 발생이 있는지 모니터링하고 그리고 하나 이상의 특정 유형의 캐시 이벤트의 발생에 응답하여 코어들(355) 중 하나 이상의 상태의 표시들을 포착하기 위해 모니터링한다.
저장소(360)는 운영 체제(340), 데이터(330), 검출 드라이버(140), 구성 데이터(135), 모니터링 데이터(334), 감소된 데이터(337), 및 디버깅 루틴(170) 중 하나 이상을 저장한다. 하나의 애플리케이션 루틴(370) 또는 다수의 관련된 애플리케이션 루틴들(370) 중 어느 하나가 또한 저장소(360) 내에 저장된다. 운영 체제(340), 애플리케이션 루틴(들)(370), 검출 드라이버(140) 및 디버깅 루틴(170) 각각은 컴퓨팅 디바이스(300)의 주 프로세서 구성요소로서 역할하는 프로세서 구성요소(350) 상에서 다양한 기능들을 수행하는 논리를 구현하는 동작을 하는 명령어 시퀀스를 포함한다.
운영 체제(340)를 실행할 때, 프로세서 구성요소(350)는, 다양한 서비스들을 제공하는 호출 가능 시스템 함수(callable system function)들을 비롯한, 애플리케이션 루틴(들)(370)의 실행을 위한 다양한 형태의 지원을 제공할 수 있다. 운영 체제(340)는 애플리케이션 루틴(들)(370)과 컴퓨팅 디바이스(300)의 하드웨어 구성요소들 및/또는 그의 디바이스 드라이버들 사이의 추상화 계층을 제공할 수 있다. 하드웨어 구성요소들 및 관련된 디바이스 드라이버들 - 이들로부터 추상화 계층이 제공될 수 있음 - 중에 모니터링 유닛(354) 및 검출 드라이버(140)가 있을 수 있다. 운영 체제(340)는 프로세서 구성요소(350)에 의한 다수의 실행 스레드들 중 개별적인 실행 스레드들에서의 단일의 애플리케이션 루틴(370)의 다수의 부분들의 동시 실행에 대한 또는 관련된 애플리케이션 루틴들(370)의 부분들의 동시 실행에 대한 지원을 제공한다. 애플리케이션 루틴들(370) 중 단일의 애플리케이션 루틴은, 워드 프로세서, 웹 사이트 뷰어, 사진 편집기, 회의 일정 관리, CAD/CAM 등을 비롯한, 각종의 개인적 및/또는 전문적 기능들 중 임의의 것을 수행하기 위해 운영 체제(340)의 지원을 받아 프로세서 구성요소(350)에 의한 컴퓨팅 디바이스(300) 상에서의 실행을 위해 선택된 각종 유형의 루틴 중 임의의 것일 수 있다. 다수의 애플리케이션 루틴들(370)이 있는 경우, 이들은 동일한 "생산성 제품군(productivity suite)"의 애플리케이션 루틴들 중 워드 프로세싱 애플리케이션 및 일러스트레이션 애플리케이션, 또는 웹 사이트 브라우징 애플리케이션 및 웹 사이트에 의해 제공되는 특정 유형의 데이터를 볼 수 있게 하는 "확장" 애플리케이션(이들로 제한되지 않음)과 같은 애플리케이션 루틴들의 세트 중 관련된 애플리케이션 루틴들일 수 있다.
검출 드라이버(140)를 실행할 때, 프로세서 구성요소(350)는 캐시들(357) 및/또는 캐시(367) 중 하나 이상과 연관된 하나 이상의 특정 캐시 이벤트들의 발생을 검출하도록 모니터링 유닛(354)을 구성한다. 그렇게 함에 있어서, 프로세서 구성요소(350)는 모니터링 유닛(354)과 연관된 하나 이상의 레지스터들의 비트들을 설정하는 것을 통해 하나 이상의 캐시 이벤트들을 지정하도록 되어 있을 수 있다. 프로세서 구성요소(350)는 구성 데이터(135)로부터 검출될 하나 이상의 캐시 이벤트들의 표시들을 검색할 수 있다. 특히 관심을 끄는 것은 시간상 서로 비교적 가까이에서 발생하는, 동일한 데이터 조각을 수반하는 읽기 동작 및 쓰기 동작의 조합들의 결과로서 일어나는 캐시 이벤트들일 수 있다. 시간상 가깝고 조율이 없는 경우, 읽기 동작이 쓰기 동작 이전 또는 이후 중 어느 하나에서 예측 가능하지 않게 발생할 수 있고, 그에 의해 읽기 동작과 쓰기 동작 사이의 경쟁 상태를 야기함으로써 그 데이터 조각의 잘못된 버전이 때로는 읽기 동작에서 검색되고 때로는 그렇지 않게 된다. 대안적으로 또는 그에 부가하여, 특히 관심을 끄는 것은 시간상 서로 비교적 가까이에서 발생하는, 동일한 데이터 조각을 수반하는 다수의 쓰기 동작들의 조합들의 결과로서 일어나는 캐시 이벤트들일 수 있다. 시간상 가깝고 조율이 없는 경우, 쓰기 동작들 중 하나가 다른 쓰기 동작 이전 또는 이후 중 어느 하나에서 예측 가능하지 않게 발생할 수 있고, 그에 의해 다수의 쓰기 동작들 사이의 경쟁 상태를 야기함으로써 다수의 쓰기 동작들 이후의 데이터의 상태가 예측 가능하지 않게 된다. 동일한 데이터 조각에의 액세스들의 이러한 조율되지 않은 조합들은, 그 액세스들을 조율하게 되어 있도록 관련되어 있는, 단일의 애플리케이션 루틴(370)의 2개의 동시 실행되는 부분들 간의 또는 2개의 동시 실행되는 애플리케이션 루틴들(370) 간의 조율이 없는 것으로 인한 것일 수 있다.
그렇게 구성되어 있을 때, 모니터링 유닛(354)은, 하나 이상의 지정된 캐시 이벤트들 중 하나의 캐시 이벤트의 발생에 응답하여, 프로세서 구성요소(350)의 코어들(355) 중 하나 이상의 상태의 표시들을 포착하고, 포착된 표시들을 모니터링 데이터(334)로서 검출 드라이버(140)에 제공한다. 포착된 표시들은 코어들(355) 중 하나 이상과 연관된 하나 이상의 레지스터들의 상태의 표시들, 하나 이상의 명령어 포인터들에 저장된 주소들의 표시들, 실행 중인 명령어들의 표시들, 코어들(355) 중 하나 이상에 의해 실행 중인 프로세스들 및/또는 스레드들의 ID(identity)들의 표시들 등을 포함할 수 있다. 포착된 표시들은 또한 캐시들(357) 및/또는 캐시(367) 중 하나 이상의 캐시들의 하나 이상의 캐시 라인들의 상태의 표시들을 포함할 수 있다. 포착된 표시들은 또한 캐시들(357 및/또는 367) 간에 교환되는 캐시 프로토콜 신호들의 표시들을 포함할 수 있다. 캐시(367)가 프로세서 구성요소(350)의 외부에 있는 실시예들에서, 이것은 프로세서 구성요소(350)와 캐시(367) 간에 교환되는 캐시 프로토콜 신호들의 표시들을 포함할 수 있다. 이 다양한 표시들은 표시들의 포착을 트리거한 지정된 캐시 이벤트의 발생을 트리거한 애플리케이션 루틴(370)의 어떤 부분(들)의 어떤 액세스 명령어(들)가 실행되었는지의 표시들을 제공할 수 있다.
또한 검출 드라이버(140)를 실행할 때, 프로세서 구성요소(350)는 또한 프로세서 구성요소(350)의 상태의 표시들을 포착하기 전에 지정된 캐시 이벤트의 지정된 수의 발생들을 반복하여 카운트하도록 모니터링 유닛(354)의 카운터를 구성할 수 있다. 환언하면, 지정된 캐시 이벤트의 모든 발생에 응답하여 프로세서 구성요소(350)의 상태의 표시들을 포착하는 대신에, 모니터링 유닛(354)은 지정된 캐시 이벤트의 발생들의 샘플 서브셋에 대해 프로세서 구성요소(350)의 상태의 표시들을 포착하도록 되어 있을 수 있고, 그에 의해 이러한 포착이 수행되는 빈도수를 감소시킨다. 보다 구체적으로는, 모니터링 유닛(354)은 매 "N 번째"의 지정된 캐시 이벤트에서만 프로세서 구성요소(350)의 상태를 포착하도록 구성될 수 있고, 여기서 포착이 수행되는 빈도수는 N의 값에 의해 제어된다. 포착이 수행되는 빈도수(예컨대, N의 값)는 또한 구성 데이터(135)에 지정되어 있을 수 있다. 프로세서 구성요소(350)의 상태를 지정된 캐시 이벤트가 발생할 때마다보다 덜 빈번히 포착하는 것이 포착된 표시들을 처리 및/또는 디버깅 루틴으로 중계하는 데 요구되는 처리 및/또는 저장 자원들을 감소시키는 데 바람직한 것으로 생각될 수 있다. 게다가, 이것은 지정된 캐시 이벤트를 트리거하는 애플리케이션 루틴들(370) 중 하나 이상의 애플리케이션 루틴들의 동시 실행되는 부분들 간의 데이터 액세스 경쟁 상태의 발생을 야기하는 애플리케이션 루틴들(370) 중 하나에서의 오류가 각각의 발생에 응답하여 프로세서 구성요소(350)의 상태를 포착하는 것을 불필요하게 만들 정도로 충분히 자주 발생할 가능성이 있다고 예상하여 행해질 수 있다. 달리 말하면, 이러한 발생들 전부보다 적은 것에 대한 프로세서 구성요소(350)의 상태의 이러한 샘플링은 애플리케이션 루틴들(370) 중 하나를 이루고 있는 명령어들 내에서 경쟁 상태를 야기하는 오류의 위치를 적어도 좁히는 데 충분한 정보를 제공할 가능성이 있는 것으로 생각될 수 있다.
게다가 또한 검출 드라이버(140)를 실행할 때, 프로세서 구성요소(350)는 하나 이상의 지정된 캐시 이벤트들이 있는지 모니터링하는 것을 동적으로 인에이블 및/또는 디스에이블시키는 다른 메커니즘을 통해 모니터링 유닛(354)의 하나 이상의 레지스터들을 동작시키고 그리고/또는 모니터링 유닛(354)에 신호할 수 있다. 프로세서 구성요소(350)는 애플리케이션 루틴들(370) 중 하나 이상이 현재 실행되고 있는지의 표시들에 응답하여 그렇게 하도록 트리거될 수 있다. 이러한 표시들은 애플리케이션 루틴(들)(370)과 검출 드라이버(140) 사이에서 직접 전달될 수 있거나, 운영 체제(340)를 통해 그리고/또는 디버깅 루틴(170)(존재하는 경우)을 통해 중계될 수 있다.
프로세서 구성요소(350)의 상태의 포착이 지정된 캐시 이벤트가 발생할 때마다 또는 그보다 덜 빈번히 수행되는지에 관계없이, 프로세서 구성요소(350)는, 모니터링 데이터(334)의 표시들의 서브셋을 갖는 감소된 데이터(337)를 생성하기 위해, 검출 드라이버(140)에 의해 모니터링 데이터(334)를 필터링하도록 되어 있을 수 있다. 모니터링 데이터(334)는 애플리케이션 루틴(370)의 개별적인 동시 실행되는 부분들에 의해 행해지는 데이터에의 액세스들에서의 있을 수 있는 경쟁 상태들의 디버깅을 가능하게 하는 데 실제로 필요한 것보다 프로세서 구성요소(350)의 상태에 관한 더 많은 정보의 표시들을 포함할 수 있다. 애플리케이션 루틴(들)(370)의 임의의 부분을 실행하는 데 관여되지 않은 코어들(355), 프로세스들 및/또는 스레드들 중 임의의 것들과 연관된 표시들을 제거하기 위해 모니터링 데이터(334)의 표시들이 필터링될 수 있다. 이것을 가능하게 하기 위해, 프로세서 구성요소(350)는 애플리케이션 루틴(들)(370)의 부분들을 실행하는 데 관여되어 있는 코어들(355), 프로세스들 및/또는 스레드들의 식별자들, 및/또는 실행되는 부분들의 식별자들을 검색할 수 있다. 애플리케이션 루틴(들)(370)의 부분들에 의해 행해지는 액세스들 사이의 있을 수 있는 경쟁 상태에 관계가 없는 캐시 이벤트와 연관되어 있는 모니터링 데이터(334)에서의 표시들을 식별하기 위해, 이러한 식별자들이 이어서 모니터링 데이터(334)의 식별자들과 비교될 수 있다. 운영 체제(340)의 아키텍처에 따라, 이러한 식별자들이 운영 체제(340)를 통해 그리고/또는 디버깅 루틴(170)(존재하는 경우)을 통해 애플리케이션 루틴(들)(370)으로부터 검색될 수 있다. 대안적으로 또는 그에 부가하여, 데이터를 액세스하는 것과 연관되지 않은 프로세서 구성요소(350)의 레지스터들과 연관된 표시들을 제거하기 위해, 모니터링 데이터(334)의 표시들이 필터링될 수 있다.
일부 실시예들에서, 프로세서 구성요소(350)는 컴퓨팅 디바이스(300) 상에서의 애플리케이션 루틴(들)(370)의 부분들 사이의 데이터 액세스들에서의 있을 수 있는 경쟁 상태들의 디버깅을 가능하게 하기 위해 감소된 데이터(337)를 디버깅 루틴(170)에 제공할 수 있다. 그렇게 함에 있어서, 그리고 운영 체제(340)의 아키텍처에 따라, 검출 드라이버(140)로부터 디버깅 루틴(170)으로의 감소된 데이터(337)의 이러한 전달은 적어도 부분적으로 운영 체제(340)를 통해 수행될 수 있다. 다른 실시예들에서, 프로세서 구성요소(350)는 디버깅 디바이스 상에서 디버깅이 수행될 수 있게 하기 위해 감소된 데이터(337)를 디버깅 디바이스(500)로 전송하도록 인터페이스(390)를 동작시킬 수 있다.
도 3 및 도 4는, 각각, 특정 캐시 이벤트를 검출하는 컴퓨팅 디바이스(300)의 구성요소들의 동작의 일 실시예를 나타낸 것이다. 보다 구체적으로는, 도 3은 RFO 캐시 이벤트의 검출을 나타낸 것이고, 도 4는 HITM 캐시 이벤트를 나타낸 것이다. 도 3 및 도 4 둘 다에 도시된 바와 같이, 코어들(355) 중 하나 이상은 하나 이상의 레지스터들(3555)을 포함한다. 레지스터들(3555)은 산술 연산, 비트 단위 논리 연산, SIMD(single-instruction-multiple-data) 연산 등을 지원하는 레지스터들을 포함할 수 있다. 또한 도시된 바와 같이, 캐시들(357 및/또는 367) 각각은 캐시 제어기(3575) 및 다수의 캐시 라인들(3577)(그 중 하나가 도시되어 있음)을 포함한다. 또한 도시된 바와 같이, 모니터링 유닛(354)은 카운터(3544) 및 하나 이상의 레지스터들(3545) - 이들에 의해 모니터링 유닛이 다양한 이벤트들을 검출하도록 그리고 다양한 정보들을 포착하도록 프로그램될 수 있음 - 을 포함한다. 모니터링 유닛(354)은 캐시 이벤트들을 검출하기 위해 캐시들(357 및/또는 367) 중 하나 이상의 캐시들의 캐시 제어기(375)와 직접 통신할 수 있다. 대안적으로 또는 그에 부가하여, 모니터링 유닛(354)은 캐시 이벤트들을 검출하기 위해 캐시들(357 및/또는 367) 중 2개 이상의 캐시들의 캐시 제어기들(3575) 간의 통신을 가로채기할 수 있다.
또한 도시된 바와 같이, 하나 이상의 애플리케이션 루틴들(370)은 동시에 실행될 다수의 부분들(377)을 포함하고, 그 부분들(377) 각각은, 각각의 부분(377)을 실행하기 위해 스레드들이 할당되기 때문에, 운영 체제(340)에 의해 생성될 수 있는 고유 식별자(ID)를 할당받을 수 있다. 각각의 부분은 애플리케이션 루틴들(370) 중 하나의 애플리케이션 루틴의 하나 이상의 기능들의 서브셋을 수행하기 위해 애플리케이션 루틴들(370) 중 그 하나의 애플리케이션 루틴의 명령어 시퀀스의 서브셋을 포함한다. 일부 실시예들에서, 동일한 데이터 조각(예컨대, 데이터(330))에 액세스할 수 있는 애플리케이션 부분들(377)은 동일한 애플리케이션 루틴(370)의 부분들(377)일 수 있다. 이러한 실시예들에서, 그 부분들(377)은 데이터 조각에의 그의 액세스들을 서로 조율해야만 한다. 이러한 조율은 전적으로 그 하나의 애플리케이션 루틴(370) 내에서 행해지도록 되어 있을 수 있지만 - 이들 모두는 플래그 비트, 함수 호출에서 파라미터를 전달하는 것 등(이들로 제한되지 않음)을 비롯한 각종의 메커니즘들 중 임의의 것을 통함 -, 부분들 중 하나 이상의 부분들의 작성에서의 오류로 인해 이러한 조율이 없을 수 있다. 다른 실시예들에서, 동일한 데이터 조각에 액세스할 수 있는 애플리케이션 부분들(377)은, 데이터 조각에의 그들의 액세스들을 서로 조율해야만 하는 한, 관련되어 있는 애플리케이션 루틴들(370) 중 상이한 애플리케이션 루틴들의 부분들(377)일 수 있지만, 다시 말하지만, 오류로 인해 이러한 조율이 없을 수 있다. 또 다른 실시예들에서, 동일한 데이터 조각에 액세스하는 동일한 애플리케이션 루틴(370)의 동일한 부분들(377)의 다수의 인스턴스들이 있을 수 있고, 동일한 부분(377)의 이러한 인스턴스들은 그 액세스들을 조율해야만 한다.
도 3 또는 도 4의 실시예들 중 어느 하나에서 캐시 이벤트를 검출할 준비를 하기 위해, 프로세서 구성요소(350)는, 검출 드라이버(140)의 실행에 의해, 하나 이상의 특정 캐시 이벤트들의 발생을 검출하도록 모니터링 유닛(354)을 구성하기 위해 모니터링 유닛(354)의 레지스터들(3545) 중 하나 이상의 레지스터들을 프로그램하도록 되어 있을 수 있다. 프로세서 구성요소(350)는 또한 그 발생들의 검출에 대해 프로세서 구성요소(350)의 상태의 양태들을 포착하는 것으로 응답하도록 레지스터들(3545) 중 하나 이상의 레지스터들을 프로그램하도록 되어 있을 수 있다. 프로세서 구성요소(350)는 또한 모니터링 유닛(354)으로 하여금 이러한 발생들이 있을 때마다보다 덜 빈번히 이러한 포착을 수행하게 하기 위해 카운터(3544)를 프로그램하도록 되어 있을 수 있다. 예를 들어, 모니터링 유닛(354)은 지정된 캐시 이벤트의 매 3 번째 발생에서만 이러한 포착을 수행하도록, 카운터(3544)를 통해, 구성될 수 있다.
도 3을 참조하면, 프로세서 구성요소(350)의 코어들(355) 중 하나는, 하나의 부분(377)을 실행할 시에, 데이터(330)를 읽어서 데이터(330)를 레지스터들(3555) 중 하나에 로드하기 위해 읽기 명령어를 실행한다. 그 직후에, 프로세서 구성요소(350)의 코어(355)는, (동일한 애플리케이션 루틴(370) 또는 상이한 관련된 애플리케이션 루틴(370) 중 어느 하나의) 다른 부분(377)을 실행할 시에 또는 동일한 부분(377)의 다른 인스턴스를 실행할 시에, 데이터(330)를 수정할 목적으로 레지스터들(3555) 중 하나(레지스터들(3555) 중 동일한 레지스터 또는 상이한 레지스터 중 어느 하나)로부터의 값을 데이터(330)에 쓰기 위해 쓰기 명령어를 실행한다. 이와 같이, 2개의 상이한 부분들(377)의 동시 실행의 결과로서, 둘 다 동일한 데이터(330)에 액세스하는 읽기 동작 및 쓰기 동작 둘 다가 시간상 비교적 가까이에서 일어난다. 논의된 바와 같이, 이것은 읽기 동작 및 쓰기 동작 중 어느 하나가 다른 것보다 먼저 발생했을 수 있음으로써 읽기 동작이 데이터(330)의 잘못된 버전을 검색했을 수 있는 데이터(330)에의 2개의 조율되지 않은 액세스들의 일 예일 수 있다.
읽기 동작의 실행은 저장소(360) 또는 읽기 동작이 실행될 때 데이터(330)의 최신 사본이 다른 캐시에 저장되어 있는지에 따라 다른 캐시(예컨대, 캐시(367) 또는 캐시들(357) 중 다른 것) 중 어느 하나로부터의 데이터(330)의 검색을 야기할 수 있다. 어쨋든, 캐시(357)의 캐시 라인(3577)에 데이터(330)가 로드되고, 데이터(330)는 또한 읽기 동작의 실행에 의해 데이터(330)가 로드되게 되어 있던 레지스터들(3555) 중 어느 것이든 그 레지스터에 제공된다.
그렇지만, 이 읽기 동작에 뒤이에서 즉각적으로 또는 적어도 비교적 빨리 동일한 데이터(330)를 수정하게 될 쓰기 동작이 온다는 사실은 다른 캐시(357 또는 367)의 캐시 제어기(3575)에 그가 가지고 있을 수 있는 데이터(330)의 어떤 사본이라도 무효화시키라고 신호하도록 캐시(357)의 캐시 제어기(3575)를 트리거할 수 있다. 이 신호를 수신한 것에 응답하여, 다른 캐시(357 또는 367)의 캐시 제어기(3575)는 그 사본이 저장되어 있을 수 있는 캐시 라인들(3577) 중 어느 것에든 있는 데이터(330)의 사본을 무효화시킨다(이 무효화는 해칭선으로 도시되어 있음). 다른 캐시(357 또는 367)에 그가 가지고 있을 수 있는 데이터(330)의 어떤 사본이든 무효화하라는 이 신호는, 읽기 동작 후에 쓰기 동작이 실행될 것이라는 사실에 기초하여, 다른 캐시(357 또는 367)가 가지고 있을 수 있는 데이터(330)의 어떤 사본이든 곧 쓸모없게 될 것임을 알려주는 선제적 신호이다.
캐시(357)에 저장하기 위한 데이터(330)를 검색하는 읽기 동작과 다른 캐시(357 또는 367)에 그가 가지고 있을 수 있는 데이터(330)의 어떤 사본이든 무효화하라는 신호의 이 조합은 RFO(read for ownership) 캐시 이벤트라고 지칭되는 것이다. 본질적으로, 캐시(357)는 데이터(330)를 변경하게 될 쓰기 동작에 대비하여 데이터(330)의 사본을 가지고 있을 수 있는 임의의 다른 캐시들로부터 데이터(330)의 "소유권을 가져오며", 그 결과 캐시(357)는 쓰기 동작 후에 얻어지게 될 데이터(330)의 최신 버전을 "소유"하게 될 것이다. 캐시들(357 및/또는 367) 간의 이러한 선제적 통지의 사용은 MESI 알고리즘에 기초하여 캐시 일관성 메커니즘들의 적어도 일부 구현들에서 행해지고, 캐시 일관성을 유지함에 있어서 효율을 증대시키는 데 바람직한 것으로 생각될 수 있다. 모니터링 유닛(354)이 캐시(357)의 캐시 제어기(3575) 또는 다른 캐시(357 또는 367)의 캐시 제어기(3575)와 직접 통신하는지에 따라, 모니터링 유닛(354)은 이 캐시 제어기들(3575) 중 하나 또는 둘 다로부터 이 RFO 캐시 이벤트의 발생을 신호받을 수 있고 그리고/또는 그들 사이에서 교환되는 무효화 신호를 가로채기할 수 있다. 유의할 점은, 일부 실시예들에서, 무효화 신호가 RFO 캐시 이벤트의 일부라는 표시를 포함할 수 있다는 것이다.
도 4를 참조하면, 프로세서 구성요소(350)의 코어들(355) 중 하나(구체적으로는, 도 4에서 코어(355x)라고 표시된 코어)는, 부분(377)을 실행하는 것에 의해, 코어(355x)와 연관된 캐시(357)의 캐시 라인들(3577) 중 하나에 우연히 저장되어 있는 데이터(330)를 수정할 쓰기 동작을 수행하게 된다. 그 결과, 그 캐시 라인(3577)에 있는 데이터(330)의 사본이 이제는 데이터(330)의 최신 버전이다. 또한, 데이터(330)의 이 사본의 이 수정에 응답하여, 코어(355x)의 캐시(357)의 캐시 제어기(3575)는 다른 캐시들이 가지고 있을 수 있는 데이터(330)의 어떤 사본이든(캐시들(357) 및/또는 캐시(367)의 다른 사본들을 포함함) 무효화하라는 신호를 다른 캐시들의 캐시 제어기들(3575)로 전송한다. 그 다른 캐시들의 그 다른 제어기들(3575) 중에는, 코어들(355) 중 다른 코어(구체적으로는, 도 4에서 코어(355y)로 표시된 코어)의 캐시(357)의 제어기(3575)가 있다. 무효화 신호를 수신한 것에 응답하여, 코어(355y)의 캐시(357)의 캐시 제어기(3575)는 그의 캐시 라인들(3577) 중 하나에 저장된 데이터(330)의 사본을 무효화시킨다(이 무효화는 해칭선으로 도시되어 있음).
이어서, 코어(355y)는, (동일한 애플리케이션 루틴(370) 또는 상이한 관련된 애플리케이션 루틴(370) 중 어느 하나의) 다른 부분(377)을 실행하는 것에 의해 또는 동일한 부분(377)의 다른 인스턴스를 실행하는 것에 의해, 데이터(330)를 읽는 읽기 동작 또는 데이터(330)에 쓰는 쓰기 동작을 수행하게 된다. 데이터(330)의 가장 최신의 사본이 코어(355x)의 캐시(357)의 캐시 라인들(3577) 중 하나에 저장되는 경우, 코어(355x)의 캐시(357)의 캐시 제어기(3575)는 코어(355x)의 캐시(357)가 데이터(330)의 수정된 사본을 가지고 있으며 따라서 이것이 가장 최신의 사본이라는 취지로 코어(355y)의 캐시(357)의 캐시 제어기(3575)에 신호한다. 달리 말하면, 이 신호는 이 후속하는 읽기 또는 쓰기 동작으로 인해 데이터(330)의 사본을 가지는 코어(355x)의 캐시(357)로부터 캐시 "히트"가 발생했고 따라서 그 사본이 보다 느린 저장소(360)에서 액세스될 필요가 없다는 사실을 전달하고, 이 신호는 이 사본이 수정되었고 따라서 이 사본이 가장 최신의 사본이라는 사실을 전달한다. 이 신호에서의 이 2개의 표시들의 결합은 HITM(hit-modified) 캐시 이벤트를 나타낸다. 이와 같이, HITM 캐시 이벤트는, 도 3의 RFO 캐시 이벤트와 같이, 하나의 액세스 동작이 다른 액세스 동작 이후 비교적 짧은 기간 내에 실행되는(어쩌면 하나의 액세스 동작이 다른 액세스 동작 직후에 있음), 동일한 데이터를 수반하는 2개의 액세스 동작들의 결합으로부터 발생한다. 다시 말하지만, 이것은 동일한 애플리케이션 루틴(370) 또는 상이한 애플리케이션 루틴들(370) 중 어느 하나의 2개의 상이한 부분들(377)의 동시 실행에 의해 야기되는 동일한 데이터 조각에의 2개의 조율되지 않은 액세스들의 한 경우를 나타낼 수 있다. 모니터링 유닛(354)이 코어(355x)의 캐시(357)의 캐시 제어기(3575) 또는 코어(355y)의 캐시(357)의 캐시 제어기(3575)와 직접 통신하는지에 따라, 모니터링 유닛(354)은 이 캐시 제어기들(3575) 중 하나 또는 둘 다로부터 이 HITM 캐시 이벤트의 발생을 신호받을 수 있고 그리고/또는 그들 사이에서 교환되는 HITM 신호를 가로채기할 수 있다.
도 3 및 도 4 둘 다를 다시 참조하면, 모니터링 유닛(354)은 이 RFO 또는 HITM 캐시 이벤트들 중 어느 하나의 발생에 대해 프로세서 구성요소(350)의 코어들(355)의 적어도 서브셋의 상태의 표시들을 포착하고 그 표시들을 모니터링 데이터(334)로서 검출 드라이버(140)에 제공하는 것으로 응답할 수 있다. 논의된 바와 같이, 검출 드라이버(140)를 실행할 때, 프로세서 구성요소(350)는 그 표시들을 보다 적게 갖는 감소된 데이터(337)를 생성하기 위해 모니터링 데이터(334)의 그 표시들을 필터링할 수 있다. 다시 말하지만, 감소된 데이터(337)가 디버깅 루틴(170)으로 전달될 수 있거나 디버깅 디바이스(500)로 전송될 수 있다. 다시 말하지만, 이러한 필터링은 하나 이상의 애플리케이션 루틴들(370)의 부분(377)을 실행하는 데 관여되지 않은 코어들(355), 프로세스들 및/또는 스레드들 중 임의의 것의 상태의 표시들을 제거하는 것을 포함할 수 있다. 애플리케이션 루틴(들)(370)의 부분들(377)을 실행하는 데 관여되어 있는 코어들(355), 프로세스들 및/또는 스레드들의 식별을 가능하게 하기 위해, 프로세서 구성요소(350)는 그 부분들(377), 코어들(355), 프로세스들 및/또는 스레드들에 대한 식별자들을 검색할 수 있다.
도 1로 돌아가서, 감소된 데이터(337)가 디버깅 루틴(170)에 제공되는 실시예들에서, 프로세서 구성요소(350)는, 디버깅 루틴(170)을 실행하는 것에 의해, 어쩌면 조율되지 않은 데이터 액세스들을 디버깅하는 것에 관련된 정보가 제시될 수 있는 사용자 인터페이스를 제공하기 위해 컨트롤들(320) 및/또는 디스플레이(380)를 동작시키도록 되어 있을 수 있다. 보다 구체적으로는, 동일한 애플리케이션 루틴(370) 또는 상이한 관련된 애플리케이션 루틴들(370) 중 어느 하나의 상이한 부분들(377)의 동시 실행으로부터 발생하는 조율되지 않은 액세스들의 가능한 경우들의 표시들이 디스플레이(380) 상에 시각적으로 제시될 수 있다. 대안적으로 또는 그에 부가하여, 감소된 데이터(337)에 표시되는 바와 같은, 시간상 비교적 가까이에서 동일한 데이터 조각(예컨대, 데이터(330))에의 액세스를 야기한 것으로 식별된 동시 실행된 부분들(377)로부터의 명령어 시퀀스들이, 그 시퀀스들의 검사를 가능하게 하기 위해, 디스플레이(380) 상에 시각적으로 제시될 수 있다.
대안적으로, 디버깅 디바이스를 포함하고 감소된 데이터(337)가 디버깅 디바이스(500)에 제공되는 실시예들에서, 디버깅 디바이스(500)는 프로세서 구성요소(550), 저장소(560), 컨트롤들(520), 디스플레이(580), 및 디버깅 디바이스(500)를 네트워크(999)에 결합시키는 인터페이스(590) 중 하나 이상을 포함한다. 저장소(560)는 감소된 데이터(337) 및 디버깅 루틴(570)을 저장한다. 디버깅 루틴(570)은 원격 컴퓨팅 디바이스(500)의 주 프로세서 구성요소로서 역할하는 프로세서 구성요소(550) 상에서 다양한 기능들을 수행하는 논리를 구현하는 동작을 하는 명령어 시퀀스를 포함한다. 디버깅 루틴(170)과 같이, 디버깅 루틴(570)을 실행할 시에, 프로세서 구성요소(550)는 애플리케이션 루틴(들)(370)의 부분들(377)에 의한 어쩌면 조율되지 않은 데이터 액세스들을 디버깅하는 것에 관련된 정보가 제시될 수 있는 사용자 인터페이스를 제공하기 위해 컨트롤들(520) 및/또는 디스플레이(580)를 동작시킬 수 있다. 다시 말하지만, 대안적으로 또는 그에 부가하여, 상이한 부분들(377) 및/또는 그 상이한 부분들로부터의 명령어 시퀀스들의 동시 실행으로부터 발생하는 조율되지 않은 액세스들의 가능한 경우들의 표시들이 디스플레이(580) 상에 시각적으로 제시될 수 있다.
서버(100)를 포함하는 실시예들에서, 컴퓨팅 디바이스(300)는 검출 드라이버(140), 구성 데이터(135) 및 디버깅 루틴(170) 중 하나 이상을 서버(100)로부터 제공받을 수 있고, 이러한 프로비저닝은 네트워크(999)를 통해 수행될 수 있다. 유의할 점은, 디버깅 루틴(170)이 애플리케이션 루틴들(370) 중 하나 이상의 애플리케이션 루틴들의 구성요소일 수 있고 따라서 디버깅 루틴(170)이 애플리케이션 루틴들(370) 중 하나 이상의 애플리케이션 루틴들과 함께 또는 그의 일부로서 컴퓨팅 디바이스(300)에 제공될 수 있다는 것이다.
도 2는 컴퓨팅 디바이스(300)의 대안의 실시예를 포함하는 경쟁 상태 디버깅 시스템(1000)의 대안의 실시예의 블록도를 나타낸 것이다. 도 2의 경쟁 상태 디버깅 시스템(1000)의 대안의 실시예는 많은 점에서 도 1의 실시예와 유사하고, 따라서 유사한 참조 번호들이 그 전체에 걸쳐 유사한 구성요소들을 지칭하는 데 사용된다. 그렇지만, 도 1의 컴퓨팅 디바이스(300)와 달리, 도 2의 컴퓨팅 디바이스(300)는 각각이 동일한 애플리케이션 루틴(370) 또는 상이한 관련된 애플리케이션 루틴들(370)의 한 부분을 실행할 수 있는 하나 초과의 프로세서 구성요소들(350)(도 2에서 프로세서 구성요소들(350a 및 350b)로서 표시됨)을 포함한다. 이와 같이, 하나 이상의 애플리케이션 루틴들(370)의 상이한 부분들에 의한 동일한 데이터 조각에의 액세스들에서의 경쟁 상태들은 프로세서 구성요소들(350a 및 350b) 중 상이한 프로세서 구성요소들에 의해 행해지는 액세스들 간의 경쟁들을 포함할 수 있다.
이것에 대응하기 위해, 프로세서 구성요소들(350a 및 350b) 중 하나 또는 둘 다에 의한 검출 드라이버(140)의 실행은 이 프로세서 구성요소들 둘 다의 모니터링 유닛들(354)이 특정 캐시 이벤트들이 있는지 모니터링하도록 그리고 이 프로세서 구성요소들 중 그 각자의 프로세서 구성요소들의 상태의 양태들을 포착하도록 구성되게 할 수 있다. 이와 같이, 도시된 모니터링 유닛들(354) 둘 다는 모니터링 데이터(334)의 내용에 기여할 수 있다. 게다가, 검출 드라이버(140)는 감소된 데이터(337)를 생성함에 있어서 프로세서 구성요소들(350a 및 350b) 각각의 상태의 표시들을 대조하여 결합된 표시들의 세트로 만들 수 있다. 예로서, 검출 드라이버(140)는 모니터링 유닛들(354) 각각으로부터 수신되는 모니터링 데이터(334) 내의 표시들에서의 중복 정보를 필터링 제거할 수 있다.
다양한 실시예들에서 프로세서 구성요소들(350 및 550) 각각은 아주 다양한 구매 가능 프로세서들 중 임의의 것을 포함할 수 있다. 게다가, 이 프로세서 구성요소들 중 하나 이상은 다수의 프로세서들, 멀티스레드 프로세서, 멀티 코어 프로세서(다수의 코어들이 동일한 다이 상에 공존하든 개별적인 다이들 상에 공존하든 관계 없음), 및/또는 다수의 물리적으로 분리된 프로세서들이 어떤 방식으로 연결되어 있는 어떤 다른 종류의 멀티 프로세서 아키텍처를 포함할 수 있다.
다양한 실시예들에서, 저장소들(360 및 560) 각각은, 어쩌면 전력의 연속적인 제공을 필요로 하는 휘발성 기술들을 비롯한 그리고 어쩌면 이동식일 수 있거나 그렇지 않을 수 있는 머신 판독 가능 저장 매체의 사용을 수반하는 기술들을 비롯한, 아주 다양한 정보 저장 기술들 중 임의의 것에 기초할 수 있다. 이와 같이, 이 저장소들 각각은 ROM(read-only memory), RAM(random-access memory), DRAM(dynamic RAM), DDR-DRAM(Double-Data-Rate DRAM), SDRAM(synchronous DRAM), SRAM(static RAM), PROM(programmable ROM), EPROM(erasable programmable ROM), EEPROM(electrically erasable programmable ROM), 플래시 메모리, 중합체 메모리(polymer memory)(예컨대, 강유전체 중합체 메모리(ferroelectric polymer memory)), 오보닉 메모리(ovonic memory), 상변화 또는 강유전체 메모리, SONOS(silicon-oxide-nitride-oxide-silicon) 메모리, 자기 또는 광학 카드, 하나 이상의 개별 강자성 디스크 드라이브들, 또는 하나 이상의 어레이들로 구성되는 복수의 저장 디바이스들(예컨대, RAID 어레이(Redundant Array of Independent Disks array)로 구성되는 다수의 강자성 디스크 드라이브들)(이들로 제한되지 않음)을 비롯한 아주 다양한 유형의 저장 디바이스(또는 그 유형들의 조합) 중 임의의 것을 포함할 수 있다. 유의할 점은, 이 저장소들 각각이 단일의 블록으로 도시되어 있지만, 이들 중 하나 이상이 상이한 저장 기술들에 기초할 수 있는 다수의 저장 디바이스들을 포함할 수 있다는 것이다. 이와 같이, 예를 들어, 이 도시된 저장소들 각각 중 하나 이상은 프로그램들 및/또는 데이터가 어떤 형태의 머신 판독 가능 저장 매체 상에 저장되고 전달될 수 있는 광 드라이브 또는 플래시 메모리 카드 판독기, 프로그램들 및/또는 데이터를 비교적 오랜 기간 동안 로컬적으로 저장하는 강자성 디스크 드라이브, 및 프로그램들 및/또는 데이터에의 비교적 신속한 액세스를 가능하게 하는 하나 이상의 휘발성 고체 상태 메모리 디바이스들(예컨대, SRAM 또는 DRAM)의 조합을 나타낼 수 있다. 또한 유의할 점은, 이러한 저장소들 각각이 동일한 저장 기술에 기초하지만 사용에서의 특화(specialization)(예컨대, 일부 DRAM 디바이스들은 주 저장소(main storage)로서 이용되는 반면, 다른 DRAM 디바이스들은 그래픽 제어기의 별도의 프레임 버퍼로서 이용됨)의 결과로서 개별적으로 유지될 수 있는 다수의 저장 구성요소들로 이루어져 있을 수 있다는 것이다.
다양한 실시예들에서, 인터페이스들(390 및 590) 각각은, 기술된 바와 같이, 컴퓨팅 디바이스들이 다른 디바이스들에 결합될 수 있게 하는 아주 다양한 시그널링 기술들 중 임의의 것을 이용할 수 있다. 이 인터페이스들 각각은 이러한 결합을 가능하게 하는 데 필요한 기능 중 적어도 일부를 제공하는 회로부를 포함할 수 있다. 그렇지만, 이 인터페이스들 각각은 또한 적어도 일부가 (예컨대, 프로토콜 스택 또는 다른 특징들을 구현하기 위해) 프로세서 구성요소들 중 대응하는 프로세서 구성요소들에 의해 실행되는 명령어 시퀀스들로 구현될 수 있다. 전기적 및/또는 광학적 전도성 케이블이 이용되는 경우, 이 인터페이스들은, RS-232C, RS-422, USB, 이더넷(IEEE-802.3) 또는 IEEE-1394(이들로 제한되지 않음)를 비롯한, 각종의 산업 표준들 중 임의의 것에 부합하는 시그널링 및/또는 프로토콜들을 이용할 수 있다. 무선 신호 전송의 사용이 수반되는 경우, 이 인터페이스들은, IEEE 802.11a, 802.11b, 802.11g, 802.16, 802.20(흔히 "모바일 광대역 무선 액세스(Mobile Broadband Wireless Access)"라고 함); 블루투스; ZigBee; 또는 GSM/GPRS(GSM with General Packet Radio Service), CDMA/1xRTT, EDGE(Enhanced Data Rates for Global Evolution), EV-DO(Evolution Data Only/Optimized), EV-DV(Evolution For Data and Voice), HSDPA(High Speed Downlink Packet Access), HSUPA(High Speed Uplink Packet Access), 4G LTE와 같은 셀룰러 무선 전화 서비스 등(이들로 제한되지 않음)을 비롯한, 각종의 산업 표준들 중 임의의 것에 부합하는 시그널링 및/또는 프로토콜들을 이용할 수 있다.
도 5는 도 1의 경쟁 상태 디버깅 시스템(1000)의 일 실시예의 일부분의 블록도를 보다 상세히 나타낸 것이다. 보다 구체적으로는, 도 5는 프로세서 구성요소(350)가, 검출 드라이버(140)를 실행할 때, 동일한 데이터 조각에의 2개의 액세스들 간의 경쟁 상태와 연관되어 있을 수 있는 캐시 이벤트들을 검출하는 컴퓨팅 디바이스(300)의 동작 환경의 양태들을 나타낸 것이다. 도 6는 도 2의 경쟁 상태 디버깅 시스템(1000)의 일 실시예의 일부분의 블록도를 보다 상세히 나타낸 것이다. 보다 구체적으로는, 도 6은 프로세서 구성요소들(350a 또는 350b) 중 어느 하나가, 적어도 검출 드라이버(140)를 실행할 때, 동일한 데이터 조각에의 2개의 액세스들 간의 경쟁 상태와 연관되어 있을 수 있는 캐시 이벤트들을 검출하는 컴퓨팅 디바이스(300)의 동작 환경의 양태들을 나타낸 것이다.
도 5 및 도 6 둘 다를 참조하면, 본 기술 분야의 통상의 기술자라면 알 수 있는 바와 같이, 운영 체제(340), 애플리케이션 루틴(들)(370), 검출 드라이버(140) 및 디버깅 루틴(170)(각각을 이루고 있는 그의 구성요소들을 포함함)은 프로세서 구성요소들(350, 350a 또는 350b) 중 적용 가능한 프로세서 구성요소들을 구현하기 위해 선택되는 어떤 유형의 프로세서 또는 프로세서들에서든 동작하도록 선택된다. 다양한 실시예들에서, 각각을 이루고 있는 명령어 시퀀스들은 운영 체제, 디바이스 드라이버들 및/또는 애플리케이션 레벨 루틴들(예컨대, 디스크 매체 상에 제공되는 소위 "소프트웨어 제품군", 원격 서버로부터 획득되는 "애플릿들" 등) 중 하나 이상을 포함할 수 있다. 운영 체제가 포함되는 경우, 운영 체제는 프로세서 구성요소들(350, 350a 또는 350b) 중 어떤 대응하는 프로세서 구성요소들에든 적절한 각종의 이용 가능한 운영 체제들 중 임의의 것일 수 있다. 하나 이상의 디바이스 드라이버들이 포함되는 경우에, 그 디바이스 드라이버들은 컴퓨팅 디바이스(300)의 각종의 다른 구성요소들(하드웨어 구성요소이든 소프트웨어 구성요소이든 관계 없음) 중 임의의 것에 대한 지원을 제공할 수 있다.
검출 드라이버(140)는 동일한 데이터 조각(예컨대, 데이터(330))에의 액세스들 사이의 경쟁 상태들과 연관된 하나 이상의 특정 캐시 이벤트들(예컨대, RFO, HITM 등)을 검출하도록 모니터링 유닛들(354) 중 하나 이상을 구성하기 위해 프로세서 구성요소(350)에 의해 또는 프로세서 구성요소들(350a 및/또는 350b)에 의해 실행 가능한 구성 구성요소(145)를 포함할 수 있다. 보다 구체적으로는, 구성 구성요소(145)의 트리거 구성요소(1455)는 프로세서 구성요소(350) 또는 프로세서 구성요소들(350a 및/또는 350b)의 상태의 다양한 양태들을 포착하는 것으로 응답할 하나 이상의 특정 캐시 이벤트들을 지정하기 위해 모니터링 유닛들 중 하나 이상의 모니터링 유닛들의 레지스터들(3545) 중 하나 이상의 레지스터들을 프로그램한다. 구성 구성요소(145)는 구성 데이터(135)로부터 그 특정 캐시 이벤트들이 무엇인지의 표시들을 검색할 수 있다. 레지스터들(3545)은 프로세서 구성요소(350) 또는 프로세서 구성요소들(350a 및/또는 350b)의 상태의 어느 양태들이 포착되어야 하는지의 선택을 가능하게 할 수 있다. 게다가, 레지스터들(3545)은 모니터링 유닛(들)(354)에 의해 생성된 모니터링 데이터(334)(또는 대안적으로, 도 6에 나타낸 바와 같은, 모니터링 데이터(334a 및334b))가 제공되는 방식에 대한 어떤 제어를 가능하게 할 수 있다.
구성 구성요소(145)의 카운터 구성요소(1454)는 이러한 포착들이 수행되는 빈도수를 감소시키기 위해 지정된 캐시 이벤트의 지정된 간격의 발생들에서(예컨대, 매 "N 번째" 발생에서) 프로세서 구성요소(350) 또는 프로세서 구성요소들(350a 및/또는 350b)의 상태를 포착하도록 모니터링 유닛(들)(354)의 카운터(3544)를 프로그램할 수 있다. 하나 초과의 프로세서 구성요소들(350)(예컨대, 도 6의 프로세서 구성요소들(350a 및 350b))이 있는 실시예들에서, 구성 구성요소(145)는 동일한 빈도수로 그리고/또는 캐시 이벤트의 동일한 발생들에 대해 캐시 이벤트들의 포착을 조율하도록 프로세서 구성요소들 각각의 모니터링 유닛들(354)을 프로그램할 수 있다.
트리거 구성요소(1455)는 또한 하나 이상의 특정 캐시 이벤트들의 검출을 동적으로 인에이블 및/또는 디스에이블시키기 위해 모니터링 유닛들(354) 중 하나 이상의 모니터링 유닛들의 레지스터들(3545) 중 하나 이상의 레지스터들을 동작시킬 수 있다. 구성 구성요소(145)는 운영 체제(340), 디버깅 루틴(170), 및/또는 애플리케이션 루틴들(370) 중 적어도 하나의 애플리케이션 루틴으로부터 수신되는, 애플리케이션 루틴들(370) 중 적어도 하나의 애플리케이션 루틴이 실행되고 있는 때의 표시들에 응답하여 그렇게 할 수 있다.
검출 드라이버(140)는 모니터링 유닛(들)(354)으로부터 모니터링 데이터(334) 또는 모니터링 데이터(334a 및 334b)를 수신하기 위해 프로세서 구성요소(350)에 의해 또는 프로세서 구성요소들(350a 및/또는 350b)에 의해 실행 가능한 필터링 구성요소(144)를 포함할 수 있다. 모니터링 데이터(334) 또는 모니터링 데이터(334a 및 334b)의 수신 시에, 필터링 구성요소(144)는 프로세서 구성요소(350) 또는 프로세서 구성요소들(350a 및/또는 350b)의 상태의 표시들을 파싱하여, 애플리케이션 루틴들(370) 중 하나 이상의 애플리케이션 루틴들의 어떤 부분들(377)이 동일한 데이터 조각에 액세스함에 있어서 경쟁 상태에 관여될 수 있는지를 식별하는 데 밀접한 관계가 있는 것으로 생각되는 그 표시들의 서브셋을 갖는 감소된 데이터(337)를 생성한다. 그렇게 함에 있어서, 필터링 구성요소(144)는 캐시 이벤트들과 연관된 루틴들 및/또는 데이터의 주소들을, 이러한 경쟁 상태들에 책임이 있는 것으로 생각되는 애플리케이션 루틴들(370) 중 하나 이상의 애플리케이션 루틴들의 부분들(377)의 또는 이러한 경쟁 상태들 중에 액세스되고 있는 데이터의 하나 이상의 기지의 주소들 또는 주소 범위들과 비교하는 것에 의해 그렇게 할 수 있다. 하나 초과의 프로세서 구성요소들(350)(예컨대, 도 6의 프로세서 구성요소들(350a 및 350b))이 있는 실시예들에서, 필터링 구성요소는 감소된 데이터(337)를 생성함에 있어서 그 프로세서 구성요소들의 상태의 표시들에서 중복 정보를 제거할 수 있다.
필터링 구성요소(144)는 또한 이러한 경쟁 상태들에 책임이 있는 것으로 생각되는 애플리케이션 루틴들(370) 중 하나 이상의 애플리케이션 루틴들의 임의의 부분(377)을 실행하는 데 관여되어 있지 않은 코어들(355), 프로세스들 및/또는 스레드들 중 임의의 것들의 상태의 표시들을 제거할 수 있다. 이것을 가능하게 하기 위해, 필터링 구성요소(144)는 하나 이상의 애플리케이션 루틴(들)(370)의 부분들(377)을 실행하는 데 관여되어 있는 코어들(355), 프로세스들 및/또는 스레드들의 식별자들을 검색할 수 있다. 필터링 구성요소(144)는, 애플리케이션 루틴(들)(370)의 상이한 부분들(377)에 의해 행해지는 액세스들 사이의 경쟁 상태로부터 발생하는 캐시 이벤트와 연관된 표시들을 다른 캐시 이벤트들과 연관된 표시들과 구별하기 위해, 이러한 식별자들을 표시들에 포함된 유사한 식별자들과 비교할 수 있다. 다양한 실시예들에서, 운영 체제(340)의 아키텍처 및/또는 다른 인자들에 따라, 필터링 구성요소(144)는 (예컨대, 애플리케이션 루틴들(370) 중 하나 이상의 애플리케이션 루틴들이 "디버그 모드"에서 동작하는 결과로서) 애플리케이션 루틴(들)(370)으로부터, 디버깅 루틴(170)으로부터, 또는 운영 체제(340)로부터 직접 이러한 식별자들을 수신할 수 있다. 디버깅 루틴(170)은 이러한 식별자들을 필터링 구성요소(144)로 중계하기 전에 애플리케이션 루틴(들)(370) 또는 운영 체제(340)로부터 그들을 검색할 수 있다.
검출 드라이버(140)는 감소된 데이터(337)를 컴퓨팅 디바이스(300) 또는 다른 컴퓨팅 디바이스(예컨대, 디버깅 디바이스(500)) 중 하나 또는 둘 다 내에서 실행되는 디버깅 루틴으로 중계하기 위해 프로세서 구성요소(350)에 의해 또는 프로세서 구성요소들(350a 및/또는 350b)에 의해 실행 가능한 중계 구성요소(147)를 포함할 수 있다. 감소된 데이터(337)를 컴퓨팅 디바이스(300) 내에서 실행되는 디버깅 루틴(예컨대, 디버깅 루틴(170))으로 중계함에 있어서, 중계 구성요소(147)는 운영 체제(340)를 통해 감소된 데이터(337)를 그렇게 중계할 수 있다. 운영 체제가 디바이스 드라이버들과 다른 루틴들(디버깅 루틴(170) 등) 사이의 추상화 계층을 제공하도록 검출 드라이버(140)가 운영 체제(340)와 유사한 하위 레벨에서 디바이스 드라이버로서 실행되는 실시예들에서 이것이 필요할 수 있다. 감소된 데이터(337)를 다른 컴퓨팅 디바이스 내에서 실행되는 디버깅 루틴으로 중계함에 있어서, 중계 구성요소(147)는 감소된 데이터(337)를 네트워크(예컨대, 네트워크(999))를 통해 다른 컴퓨팅 디바이스(예컨대, 디버깅 디바이스(500))로 전송하기 위해 인터페이스(390)를 이용할 수 있다.
도 7은 논리 흐름(2100)의 일 실시예를 나타낸 것이다. 논리 흐름(2100)은 본 명세서에 기술된 하나 이상의 실시예들에 의해 실행되는 동작들 중 일부 또는 전부를 나타낼 수 있다. 보다 구체적으로는, 논리 흐름(2100)은 적어도 검출 드라이버(140)를 실행할 시에 프로세서 구성요소(350) 또는 프로세서 구성요소들(350a 및/또는 350b)에 의해 수행되는 그리고/또는 컴퓨팅 디바이스(300)의 다른 구성요소(들)에 의해 수행되는 동작들을 나타낼 수 있다.
2110에서, 경쟁 상태 디버깅 시스템의 컴퓨팅 디바이스의 프로세서 구성요소(예컨대, 경쟁 상태 디버깅 시스템(1000)의 컴퓨팅 디바이스(300)의 프로세서 구성요소(350) 또는 프로세서 구성요소들(350a 및/또는 350b))는 하나 이상의 애플리케이션 루틴들(예컨대, 애플리케이션 루틴(들)(370))의 실행의 시작의 표시를 기다린다. 논의된 바와 같이, 이러한 표시는 하나 이상의 애플리케이션 루틴들로부터, 운영 체제(예컨대, 운영 체제(340))를 통해 또는 디버깅 루틴(예컨대, 디버깅 루틴(170))으로부터 직접 전달될 수 있다.
2120에서, 애플리케이션 루틴(들)의 적어도 하나의 부분을 실행하는 프로세서 구성요소의 모니터링 유닛(예컨대, 모니터링 유닛(354))은 동일한 데이터 조각에의 액세스들 간의 경쟁 상태들과 연관된 특정 캐시 이벤트(들)(예컨대, RFO, HITM 등)의 발생들을 검출하도록 그리고 그 발생들에 대해 하나 이상의 애플리케이션 루틴들을 실행하는 프로세서 구성요소의 상태의 표시들을 포착하는 것으로 응답하도록 구성되어 있다. 애플리케이션 루틴(들)의 적어도 하나의 부분을 실행하는 프로세서들 중 하나 이상은 모니터링 유닛을 구성하는 동일한 프로세서 구성요소일 수 있거나 그렇지 않을 수 있다. 이전에 논의된 바와 같이, 액세스들은 읽기 동작과 쓰기 동작의 조합일 수 있거나, 다수의 쓰기 동작들의 조합일 수 있다. 그에 관계없이, 액세스들이, 비록 이 액세스들을 조율하도록 되어 있을지라도 그렇게 하는 데 실패한, 단일의 애플리케이션 루틴의 상이한 부분들, 2개의 상이한 애플리케이션 루틴들의 부분들, 또는 동일한 애플리케이션 루틴의 동일한 부분의 2개의 인스턴스들(예컨대, 단일의 애플리케이션 루틴(370)의 부분들(377) 또는 애플리케이션 루틴들(370) 중 상이한 애플리케이션 루틴들의 부분들(377), 또는 단일의 애플리케이션 루틴(370)의 단일의 부분(377))에 의해 행해질 수 있다. 또한 이전에 논의된 바와 같이, 포착된 표시들은 발생한 캐시 이벤트의 유형의 표시자, 캐시 이벤트를 트리거한 데이터 액세스의 유형의 표시자(예컨대, 읽기 동작 또는 쓰기 동작), 데이터 액세스를 야기한 프로세스 및/또는 실행 스레드의 식별자, 명령어 포인터의 주소의 표시, 프로세서 구성요소의 하나 이상의 레지스터들의 내용 등을 포함할 수 있다.
2130에서, 모니터링 유닛의 카운터가 매 발생마다와 다른 캐시 이벤트(들)의 발생 간격으로 이러한 포착들을 수행하도록 구성된다. 논의된 바와 같이, 이러한 간격은 캐시 이벤트(들)의 매 "N 번째" 발생(매 3 번째 발생, 매 5 번째 발생, 기타 등등)일 수 있다.
2140에서, 하나 이상의 애플리케이션 루틴들의 실행의 종료를 기다린다. 2150에서, 애플리케이션 루틴(들)의 실행의 종료에 대해 캐시 이벤트(들)의 발생이 있는지 모니터링하는 것을 중단하도록 모니터링 유닛을 구성하는 것으로 응답한다. 이러한 방식으로, 캐시 이벤트들의 발생들이 있는지의 모니터링 및 그에 수반하는 포착 동작들이 애플리케이션 루틴(들)이 현재 실행 중인지에 따라 동적으로 인에이블 및 디스에이블될 수 있다.
도 8은 논리 흐름(2200)의 일 실시예를 나타낸 것이다. 논리 흐름(2200)은 본 명세서에 기술된 하나 이상의 실시예들에 의해 실행되는 동작들 중 일부 또는 전부를 나타낼 수 있다. 보다 구체적으로는, 논리 흐름(2200)은 적어도 검출 드라이버(140)를 실행할 시에 프로세서 구성요소(350) 또는 프로세서 구성요소들(350a 및/또는 350b)에 의해 수행되는 그리고/또는 컴퓨팅 디바이스(300)의 다른 구성요소(들)에 의해 수행되는 동작들을 나타낼 수 있다.
2210에서, 경쟁 상태 디버깅 시스템의 컴퓨팅 디바이스의 프로세서 구성요소의 모니터링 유닛(예컨대, 경쟁 상태 디버깅 시스템(1000)의 컴퓨팅 디바이스(300)의 프로세서 구성요소(350) 또는 프로세서 구성요소들(350a 및/또는 350b)의 모니터링 유닛(354))은 지정된 캐시 이벤트의 발생이 있는지 적어도 하나의 애플리케이션 루틴의 적어도 하나의 부분(예컨대, 애플리케이션 루틴들(370) 중 하나의 애플리케이션 루틴의 부분들(377) 중 하나의 부분)을 실행하는 프로세서 구성요소의 하나 이상의 코어들(예컨대, 코어들(355) 중 하나 이상 또는 코어들(355x 및 355y) 중 하나 또는 둘 다)을 모니터링한다. 논의된 바와 같이, 모니터링 유닛은, 읽기 동작과 쓰기 동작 사이의 또는 동일한 데이터 조각을 수반하는 2개의 쓰기 동작들 사이의 경쟁 상태와 같은, 동일한 데이터 조각에의 액세스들 사이의 경쟁 상태들과 연관된 하나 이상의 특정 캐시 이벤트들이 있는지 모니터링하도록 구성되어 있다.
2220에서, 지정된 이벤트의 발생이 검출된다. 2230에서, 모니터링 유닛의 카운터(예컨대, 카운터(3544))에 프로그램된 간격의 끝에 도달했는지를 결정하기 위해 검사가 행해진다. 간격의 끝에 도달하지 않은 경우, 2210에서, 애플리케이션 루틴의 적어도 하나의 부분을 실행하는 프로세서 구성요소의 하나 이상의 코어들이 또다시 모니터링된다.
그렇지만, 간격의 끝에 도달한 경우, 2240에서, 적어도 하나의 애플리케이션 루틴의 적어도 하나의 부분을 실행하는 프로세서 구성요소의 하나 이상의 코어들의 상태가 포착된다. 논의된 바와 같이, 이러한 포착은 코어들 중 하나 이상의 코어들의 레지스터들(예컨대, 레지스터들(3555)) 중 하나 이상의 레지스터들의 상태 및/또는 코어들 중 하나 이상의 코어들의 명령어 포인터가 가리키는 주소를 포착하는 것을 수반할 수 있다. 이러한 포착 후에, 2210에서, 하나 이상의 코어들의 모니터링이 계속된다.
도 9는 논리 흐름(2300)의 일 실시예를 나타낸 것이다. 논리 흐름(2300)은 본 명세서에 기술된 하나 이상의 실시예들에 의해 실행되는 동작들 중 일부 또는 전부를 나타낼 수 있다. 보다 구체적으로는, 논리 흐름(2300)은 적어도 검출 드라이버(140)를 실행할 시에 프로세서 구성요소(350) 또는 프로세서 구성요소들(350a 및/또는 350b)에 의해 수행되는 그리고/또는 컴퓨팅 디바이스(300)의 다른 구성요소(들)에 의해 수행되는 동작들을 나타낼 수 있다.
2310에서, 경쟁 상태 디버깅 시스템의 컴퓨팅 디바이스의 프로세서 구성요소(예컨대, 경쟁 상태 디버깅 시스템(1000)의 컴퓨팅 디바이스(300)의 프로세서 구성요소(350) 또는 프로세서 구성요소(350a 및/또는 350b))는 적어도 하나의 애플리케이션 루틴의 적어도 하나의 부분(예컨대, 애플리케이션 루틴들(370) 중 하나의 애플리케이션 루틴의 부분(377))을 실행하는 데 관여되어 있는 적어도 하나의 코어(예컨대, 코어들(355) 중 하나의 코어), 프로세스 및/또는 스레드의 ID(identity)의 표시들을 수신한다. 논의된 바와 같이, 이러한 표시는 애플리케이션 루틴(들)로부터, 운영 체제(예컨대, 운영 체제(340))를 통해 또는 디버깅 루틴(예컨대, 디버깅 루틴(170))으로부터 직접 전달될 수 있다.
2320에서, 지정된 캐시 이벤트의 발생에 응답하여 포착된 프로세서 구성요소의 하나 이상의 코어들의 상태의 표시들이 수신된다. 논의된 바와 같이, 지정된 캐시 이벤트는 동일한 메모리 부분(piece of memory)에 액세스함에 있어서의 단일의 애플리케이션 루틴의 2개의 부분들 사이의 또는 2개의 상이한(그러나 관련된) 애플리케이션 루틴들의 부분들 사이의 경쟁 상태들의 발생과 연관된 유형의 캐시 이벤트일 수 있다. 경쟁 상태가 존재할 수 있는 액세스들은 읽기 동작과 쓰기 동작의 조합일 수 있거나, 2개 이상의 쓰기 동작들의 조합일 수 있다.
2330에서, 감소된 데이터를 생성하기 위해 애플리케이션 루틴(들)의 임의의 부분을 실행하는 데 관여되어 있지 않은 하나 이상의 코어들, 프로세스들 및/또는 스레드들과 연관된 표시들이 필터링 제거된다. 이러한 필터링은 애플리케이션(들)의 적어도 하나의 부분을 실행하는 데 관여되어 있는 하나 이상의 코어들, 프로세스들 및/또는 스레드들의 ID의 표시들을 이용한다.
2340에서, 적어도 부분적으로 이상의 필터링에 의해 생성되는 감소된 데이터가 디버깅 루틴에 제공된다. 논의된 바와 같이, 디버깅 루틴이 애플리케이션 루틴(들)이 실행되는 동일한 컴퓨팅 디바이스 내에서 실행될 수 있고, 감소된 데이터가 그 컴퓨팅 디바이스의 운영 체제를 통해 디버깅 루틴에 제공될 수 있다. 그렇지 않은 경우, 감소된 데이터가, 네트워크를 통해, 디버깅 루틴이 실행되는 다른 컴퓨팅 디바이스로 전송될 수 있다.
도 10은 이전에 기술된 바와 같은 다양한 실시예들을 구현하는 데 적당한 처리 아키텍처(3000)의 일 실시예를 나타낸 것이다. 보다 구체적으로는, 처리 아키텍처(3000)(또는 그의 변형들)는 컴퓨팅 디바이스들(100, 300 또는 500) 중 하나 이상의 컴퓨팅 디바이스들의 일부로서 구현될 수 있다. 유의할 점은, 마지막 2개의 숫자들이 이 컴퓨팅 디바이스들의 일부로서 이전에 도시되고 기술된 구성요소들 중 적어도 일부의 참조 번호들의 마지막 2개의 숫자들에 대응하게 되어 있는 참조 번호들이 처리 아키텍처(3000)의 구성요소들에 부여되어 있다는 것이다. 이것은 각각의 구성요소들을 상관시키는 보조 수단으로서 행해진다.
처리 아키텍처(3000)는 하나 이상의 프로세서들, 멀티 코어 프로세서들, 코프로세서들, 메모리 유닛들, 칩셋들, 제어기들, 주변 기기들, 인터페이스들, 발진기들, 타이밍 디바이스들, 비디오 카드들, 오디오 카드들, 멀티미디어 입출력(I/O) 구성요소들, 전원들 등(이들로 제한되지 않음)을 비롯한, 디지털 처리에서 흔히 이용되는 다양한 요소들을 포함할 수 있다. 본 출원에서 사용되는 바와 같이, "시스템" 및 "구성요소"라는 용어들은 디지털 처리가 수행되는 컴퓨팅 디바이스의 엔터티를 지칭하기 위한 것이고, 그 엔터티는 하드웨어, 하드웨어 및 소프트웨어의 조합, 소프트웨어, 또는 실행 중인 소프트웨어이고, 그의 예들은 이 도시된 예시적인 처리 아키텍처에 의해 제공된다. 예를 들어, 구성요소는 프로세서 구성요소 상에서 실행 중인 프로세스, 프로세서 구성요소 자체, 광학 및/또는 자기 저장 매체를 이용할 수 있는 저장 디바이스(예컨대, 하드 디스크 드라이브, 어레이 내의 다수의 저장 드라이브들 등), 소프트웨어 객체, 실행 가능 명령어 시퀀스(executable sequence of instructions), 실행 스레드, 프로그램, 및/또는 컴퓨팅 디바이스 전체(예컨대, 컴퓨터 전체)(이들로 제한되지 않음)일 수 있다. 예시로서, 서버 상에서 실행 중인 애플리케이션 및 서버 둘 다가 구성요소일 수 있다. 하나 이상의 구성요소들은 프로세스 및/또는 실행 스레드 내에 존재할 수 있고, 구성요소는 하나의 컴퓨팅 디바이스 상에 로컬화될 수 있고 그리고/또는 2개 이상의 컴퓨팅 디바이스들 간에 분산되어 있을 수 있다. 게다가, 동작들을 조율하기 위해 구성요소들이 다양한 유형의 통신 매체에 의해 서로 통신 연결될 수 있다. 이 조율은 단방향 또는 양방향 정보 교환을 수반할 수 있다. 예를 들면, 구성요소들은 통신 매체를 통해 전달되는 신호들의 형태로 정보를 전달할 수 있다. 정보는 하나 이상의 신호 라인들에 할당된 신호들로서 구현될 수 있다. 메시지(명령, 상태, 주소 또는 데이터 메시지를 포함함)는 이러한 신호들 중 하나일 수 있거나, 복수의 이러한 신호들일 수 있고, 각종의 연결들 및/또는 인터페이스들 중 임의의 것을 통해 직렬로 또는 실질적으로 병렬로 전송될 수 있다.
도시된 바와 같이, 처리 아키텍처(3000)를 구현함에 있어서, 컴퓨팅 디바이스는 적어도 프로세서 구성요소(950), 저장소(960), 하나 이상의 다른 디바이스들에 대한 인터페이스(990), 및 결합부(coupling)(959)를 포함할 수 있다. 설명될 것인 바와 같이, 처리 아키텍처(3000)를 구현하는 컴퓨팅 디바이스의 다양한 양태들(그의 의도된 용도 및/또는 사용 조건들을 포함함)에 따라, 이러한 컴퓨팅 디바이스는 디스플레이 인터페이스(985) 또는 하나 이상의 처리 서브시스템들(900)(이들로 제한되지 않음)과 같은 부가의 구성요소들을 추가로 포함할 수 있다. 처리 아키텍처(3000)를 구현할 수 있는 컴퓨팅 디바이스라면 어느 것에서든지, 회로부로 구현되는 다양한 도시된 구성요소들 중 하나는 개별 구성요소들로 그리고/또는 단일의 또는 비교적 적은 수의 반도체 디바이스들(예컨대, SOC(system on a chip)) 내의 회로부의 블록들로서 구현될 수 있다.
결합부(959)는 적어도 프로세서 구성요소(950)를 저장소(960)에 통신 연결시키는 하나 이상의 버스들, 점대점 상호연결부들, 송수신기들, 버퍼들, 크로스포인트 스위치들, 그리고/또는 다른 도체들 및/또는 로직을 포함할 수 있다. 결합부(959)는 (이들 및/또는 다른 구성요소들 중 어느 것이 또한 존재하는지에 따라) 프로세서 구성요소(950)를 인터페이스(990), 오디오 서브시스템(970) 및 디스플레이 인터페이스(985) 중 하나 이상에 추가로 결합시킬 수 있다. 프로세서 구성요소(950)가 결합부들(959)에 의해 그렇게 결합되는 것에 의해, 프로세서 구성요소(950)는 전술한 컴퓨팅 디바이스들 중 어느 것(들)이 처리 아키텍처(3000)를 구현하든 그에 대해 앞서 상세히 기술된 작업들 중 다양한 작업들을 수행할 수 있다. 결합부(959)는 신호들이 광학적으로 및/또는 전기적으로 전달되는 각종의 기술들 또는 기술들의 조합들 중 임의의 것으로 구현될 수 있다. 게다가, 결합부들(959)의 적어도 일부분들은 AGP(Accelerated Graphics Port), CardBus, E-ISA(Extended Industry Standard Architecture), MCA(Micro Channel Architecture), NuBus, PCI-X(Peripheral Component Interconnect (Extended)), PCI-E(PCI Express), PCMCIA(Personal Computer Memory Card International Association) 버스, HyperTransport™, QuickPath 등(이들로 제한되지 않음)을 비롯한 아주 다양한 산업 표준들 중 임의의 것에 부합하는 타이밍들 및/또는 프로토콜들을 이용할 수 있다.
이전에 논의된 바와 같이, 프로세서 구성요소(950)(프로세서 구성요소들(350 또는 550) 중 하나 이상에 대응함)는, 아주 다양한 기술들 중 임의의 기술을 이용하고 다수의 방식들 중 임의의 방식으로 물리적으로 결합된 하나 이상의 코어들로 구현되는, 아주 다양한 상업적으로 이용 가능한 프로세서들 중 임의의 것을 포함할 수 있다.
이전에 논의된 바와 같이, 저장소(960)(저장소들(360 또는 560) 중 하나 이상에 대응함)는 아주 다양한 기술들 또는 기술들의 조합들 중 임의의 것에 기초하여 하나 이상의 상이한 저장 디바이스들로 이루어져 있을 수 있다. 보다 구체적으로는, 도시된 바와 같이, 저장소(960)는 휘발성 저장소(961)(예컨대, 하나 이상의 형태의 RAM 기술에 기초한 고체 상태 저장소), 비휘발성 저장소(962)(예컨대, 그의 내용을 유지하기 위해 전력의 상시 제공을 필요로 하지 않는 고체 상태, 강자성 또는 다른 저장소), 및 이동식 매체 저장소(963)(예컨대, 그에 의해 컴퓨팅 디바이스들 사이에서 정보가 전달될 수 있는 이동식 디스크 또는 고체 상태 메모리 카드 저장소) 중 하나 이상을 포함할 수 있다. 저장소(960)를 어쩌면 다수의 상이한 유형의 저장소를 포함하는 것으로 이와 같이 기술하는 것은 컴퓨팅 디바이스에서 하나 초과의 유형의 저장 디바이스를 흔히 사용하고 있다는 인식하에 있으며, 이 경우 하나의 유형은 프로세서 구성요소(950)에 의한 데이터의 더욱 신속한 조작을 가능하게 하는(그러나 어쩌면 전력을 상시 필요로 하는 "휘발성" 기술을 사용함) 비교적 빠른 읽기 및 쓰기 능력을 제공하는 반면, 다른 유형은 비교적 높은 밀도의 비휘발성 저장을 제공한다(그러나 비교적 느린 읽기 및 쓰기 능력을 제공할 수 있다).
종종 상이한 저장 디바이스들의 상이한 특성들이 상이한 기술들을 이용하는 경우, 이러한 상이한 저장 디바이스들이 상이한 인터페이스들을 통해 그의 상이한 저장 디바이스들에 결합된 상이한 저장소 제어기들을 통해 컴퓨팅 디바이스의 다른 부분들에 결합되는 일이 또한 흔하다. 예로서, 휘발성 저장소(961)가 존재하고 RAM 기술에 기초하는 경우, 휘발성 저장소(961)가 아마도 행 및 열 어드레싱을 이용하는 휘발성 저장소(961)에 적절한 인터페이스를 제공하는 저장소 제어기(965a)를 통해 결합부(959)에 통신 연결될 수 있고, 여기서 저장소 제어기(965a)는 휘발성 저장소(961) 내에 저장된 정보를 보존하는 데 도움을 주기 위해 행 리프레시(row refreshing) 및/또는 다른 유지 작업들을 수행할 수 있다. 다른 예로서, 비휘발성 저장소(962)가 존재하고 하나 이상의 강자성 및/또는 고체 상태 디스크 드라이브들을 포함하는 경우, 비휘발성 저장소(962)가 아마도 정보의 블록들 및/또는 실린더들 및/ 섹터들의 어드레싱을 이용하는 비휘발성 저장소(962)에 적절한 인터페이스를 제공하는 저장소 제어기(965b)를 통해 결합부(959)에 통신 연결될 수 있다. 또 다른 예로서, 이동식 매체 저장소(963)가 존재하고 하나 이상의 머신 판독 가능 저장 매체(969)를 이용하는 하나 이상의 광 및/또는 고체 상태 디스크 드라이브들을 포함하는 경우, 이동식 매체 저장소(963)가 아마도 정보의 블록들의 어드레싱을 이용하는 이동식 매체 저장소(963)에 적절한 인터페이스를 제공하는 저장소 제어기(965c)를 통해 결합부(959)에 통신 연결될 수 있고, 여기서 저장소 제어기(965c)는 머신 판독 가능 저장 매체(969)의 수명을 연장시키는 것에 관련된 방식으로 읽기, 소거 및 쓰기 동작들을 조율할 수 있다.
휘발성 저장소(961) 또는 비휘발성 저장소(962) 중 하나 또는 다른 하나는, 각각이 기초하는 기술들에 따라, 다양한 실시예들을 구현하기 위해 프로세서 구성요소(950)에 의해 실행 가능한 명령어 시퀀스를 포함하는 루틴이 저장될 수 있는 머신 판독 가능 저장 매체의 형태의 제조 물품을 포함할 수 있다. 예로서, 비휘발성 저장소(962)가 강자성 기반 디스크 드라이브(예컨대, 소위 "하드 드라이브")를 포함하는 경우, 각각의 이러한 디스크 드라이브는 전형적으로 자기 반응 입자(magnetically responsive particle)들의 코팅이 퇴적되고 플로피 디스크와 같은 저장 매체와 유사한 방식으로 명령어 시퀀스와 같은 정보를 저장하기 위해 다양한 패턴들로 자기 배향(magnetically oriented)되는 하나 이상의 회전 플래터(rotating platter)들을 이용한다. 다른 예로서, 비휘발성 저장소(962)는 컴팩트 플래시 카드(compact flash card)와 유사한 방식으로 명령어 시퀀스와 같은 정보를 저장하기 위해 고체 상태 저장 디바이스들의 뱅크들로 이루어져 있을 수 있다. 다시 말하지만, 컴퓨팅 디바이스에서 실행 가능 루틴들 및/또는 데이터를 저장하기 위해 상이한 때에 상이한 유형의 저장 디바이스들을 이용하는 일이 흔하다. 이와 같이, 다양한 실시예들을 구현하기 위해 프로세서 구성요소(950)에 의해 실행될 명령어 시퀀스를 포함하는 루틴은 처음에 머신 판독 가능 저장 매체(969) 상에 저장될 수 있고, 이동식 매체 저장소(963)가 이어서 그 루틴을 보다 장기간 저장을 위해 비휘발성 저장소(962)로 복사하는 데 이용될 수 있으며, 따라서 그 루틴이 실행될 때 프로세서 구성요소(950)에 의한 보다 빠른 액세스를 가능하게 하기 위해 머신 판독 가능 저장 매체(969) 및/또는 휘발성 저장소(961)가 계속 존재할 필요가 없다.
이전에 논의된 바와 같이, 인터페이스(990)(어쩌면 인터페이스들(390 또는 590) 중 하나 이상에 대응함)는 컴퓨팅 디바이스를 하나 이상의 다른 디바이스들에 통신 연결시키는 데 이용될 수 있는 각종의 통신 기술들 중 임의의 것에 대응하는 각종의 시그널링 기술들 중 임의의 것을 이용할 수 있다. 다시 말하지만, 프로세서 구성요소(950)가 입출력 디바이스들(예컨대, 도시된 예시적인 키보드(920) 또는 프린터(925)) 및/또는 다른 컴퓨팅 디바이스들과, 어쩌면 네트워크(예컨대, 네트워크(999)) 또는 상호연결된 네트워크들의 세트를 통해, 상호작용할 수 있게 하기 위해 다양한 형태의 유선 또는 무선 시그널링 중 하나 또는 둘 다가 이용될 수 있다. 종종 임의의 하나의 컴퓨팅 디바이스에 의해 지원되어야만 하는 다수의 유형의 시그널링 및/또는 프로토콜들의 종종 크게 상이한 특성을 인식하여, 인터페이스(990)는 다수의 상이한 인터페이스 제어기들(995a, 995b 및 995c)을 포함하는 것으로 도시되어 있다. 인터페이스 제어기(995a)는 도시된 키보드(920)와 같은 사용자 입력 디바이스들로부터 직렬 전송되는 메시지들을 수신하기 위해 각종의 유형의 유선 디지털 직렬 인터페이스 또는 무선 주파수 무선 인터페이스 중 임의의 것을 이용할 수 있다. 인터페이스 제어기(995b)는 도시된 네트워크(999)(아마도 하나 이상의 링크들로 이루어진 네트워크, 소규모 네트워크들, 또는 아마도 인터넷)를 통해 다른 컴퓨팅 디바이스들에 액세스하기 위해 각종의 케이블 기반 또는 무선 시그널링, 타이밍들 및/또는 프로토콜들 중 임의의 것을 이용할 수 있다. 인터페이스(995c)는 데이터를 도시된 프린터(925)로 전달하기 위해 직렬 또는 병렬 신호 전송 중 어느 하나의 사용을 가능하게 하는 각종의 전기 전도성 케이블 중 임의의 것을 이용할 수 있다. 인터페이스(990)의 하나 이상의 인터페이스 제어기들을 통해 통신 연결될 수 있는 디바이스들 중 다른 예들은 마이크로폰, 리모콘, 스타일러스 펜, 카드 판독기, 지문 판독기, 가상 현실 상호작용 글러브, 그래픽 입력 태블릿, 조이스틱, 다른 키보드, 망막 스캐너, 터치 스크린의 터치 입력 구성요소, 트랙볼, 다양한 센서들, 제스처 및/또는 얼굴 표정을 통해 사람들에 의해 신호되는 명령 및/또는 데이터를 받기 위해 그 사람들의 움직임을 모니터링하는 카메라 또는 카메라 어레이, 레이저 프린터, 잉크젯 프린터, 기계적 로봇, 밀링 머신 등(이들로 제한되지 않음)을 포함한다.
컴퓨팅 디바이스가 디스플레이(예컨대, 디스플레이(580)에 대응하는, 도시된 예시적인 디스플레이(980))에 통신 연결되어 있는(또는 아마도 디스플레이를 실제로 포함하는) 경우, 처리 아키텍처(3000)를 구현하는 이러한 컴퓨팅 디바이스는 또한 디스플레이 인터페이스(985)를 포함할 수 있다. 디스플레이에 통신 연결함에 있어서 보다 일반화된 유형의 인터페이스가 이용될 수 있지만, 다양한 형태의 콘텐츠를 디스플레이 상에 시각적으로 디스플레이하는 데 종종 필요한 얼마간 특수한 부가 처리는 물론, 사용되는 케이블링 기반 인터페이스들의 얼마간 특수한 특성으로 인해, 종종 별도의 디스플레이 인터페이스를 제공하는 것이 바람직하게 된다. 디스플레이(980)의 통신 연결에서 디스플레이 인터페이스(985)에 의해 이용될 수 있는 유선 및/또는 무선 시그널링 기술들은 각종의 아날로그 비디오 인터페이스들, DVI(Digital Video Interface), DisplayPort 등 중 임의의 것(이들로 제한되지 않음)을 비롯한 각종의 산업 표준들 중 임의의 것에 부합하는 시그널링 및/또는 프로토콜들을 사용할 수 있다.
보다 일반적으로, 본원에 기술되고 도시된 컴퓨팅 디바이스들의 다양한 요소들은 다양한 하드웨어 요소들, 소프트웨어 요소들, 또는 이 둘의 조합을 포함할 수 있다. 하드웨어 요소들의 예들은 디바이스, 논리 디바이스, 구성요소, 프로세서, 마이크로프로세서, 회로, 프로세서 구성요소, 회로 요소(예컨대, 트랜지스터, 저항기, 커패시터, 인덕터 등), 집적 회로, ASIC(application specific integrated circuit), PLD(programmable logic device), DSP(digital signal processor), FPGA(field programmable gate array), 메모리 유닛, 논리 게이트, 레지스터, 반도체 디바이스, 칩, 마이크로칩, 칩셋 등을 포함할 수 있다. 소프트웨어 요소들의 예들은 소프트웨어 구성요소, 프로그램, 애플리케이션, 컴퓨터 프로그램, 애플리케이션 프로그램, 시스템 프로그램, 소프트웨어 개발 프로그램, 머신 프로그램, 운영 체제 소프트웨어, 미들웨어, 펌웨어, 소프트웨어 모듈, 루틴, 서브루틴, 함수, 메소드(method), 프로시저, 소프트웨어 인터페이스, API(application program interface), 명령어 세트, 컴퓨팅 코드, 컴퓨터 코드, 코드 세그먼트, 컴퓨터 코드 세그먼트, 워드, 값, 심볼, 또는 이들의 임의의 조합을 포함할 수 있다. 그렇지만, 일 실시예가 하드웨어 요소들 및/또는 소프트웨어 요소들을 사용하여 구현되는지를 결정하는 것은, 주어진 구현에 대해 원하는 바에 따라, 원하는 계산 속도, 전력 레벨, 열 허용 오차, 처리 사이클 버짓(processing cycle budget), 입력 데이터 레이트, 출력 데이터 레이트, 메모리 자원, 데이터 버스 속도 및 다른 설계 또는 성능 제약조건들과 같은 임의의 수의 인자들에 따라 달라질 수 있다.
일부 실시예들은 "하나의 실시예" 또는 "일 실시예"라는 표현을 그의 파생어들과 함께 사용하여 기술될 수 있다. 이 용어들은 그 실시예와 관련하여 기술된 특정의 특징, 구조 또는 특성이 적어도 하나의 실시예에 포함되어 있다는 것을 의미한다. 본 명세서의 여러 곳에서 나오는 "일 실시예에서"라는 문구가 모두 꼭 동일한 실시예를 말하는 것은 아니다. 게다가, 일부 실시예들은 "결합된" 및 "연결된"이라는 표현을 그의 파생어들과 함께 사용하여 기술될 수 있다. 이들 용어가 서로에 대해 꼭 동의어로서 의도된 것은 아니다. 예를 들어, 일부 실시예들이, 2개 이상의 요소들이 서로 물리적 또는 전기적으로 직접 접촉하고 있음을 나타내기 위해, 용어 "연결된" 및/또는 "결합된"을 사용하여 기술될 수 있다. 그렇지만, "결합된"이라는 용어는 또한 2개 이상의 요소들이 서로 직접 접촉하고 있지 않지만 여전히 서로 협력하거나 상호작용하는 것도 의미할 수 있다. 게다가, 상이한 실시예들로부터의 요소들의 양태들이 결합될 수 있다.
읽는 사람이 기술적 개시 내용의 본질을 신속하게 확인할 수 있게 하기 위해 본 개시 내용의 요약서가 제공되어 있다는 것을 강조한다. 이 요약서는 청구항들의 범주 또는 의미를 해석하거나 제한하는 데 사용되지 않는다는 이해 하에 제공된 것이다. 그에 부가하여, 이상의 발명을 실시하기 위한 구체적인 내용에서, 본 개시 내용을 간소화하기 위해 다양한 특징들이 단일의 실시예에 함께 그룹화되어 있다는 것을 잘 알 것이다. 이러한 개시 방법이 청구된 실시예들이 각각의 청구항에 명확하게 인용되어 있는 것보다 더 많은 특징들을 필요로 한다는 의도를 반영하는 것으로 해석되어서는 안된다. 오히려, 이하의 청구항들이 반영하는 바와 같이, 본 발명의 발명 요지가 단일의 개시된 실시예의 특징들 전부가 아닌 일부에 있다. 따라서, 이하의 청구항들은 이로써 발명을 실시하기 위한 구체적인 내용에 포함되며, 각각의 청구항은 그 자체로서 개별적인 실시예로서의 지위를 갖는다. 첨부된 청구항들에서, 용어 "포함하는(including)" 및 "여기서(in which)"는 각자의 용어 "포함하는(comprising)" 및 "여기서(wherein)"의 평이한 영어 동등어로서 사용된다. 더욱이, 용어 "제1", "제2" 및 "제3" 등은 단순히 수식어로서 사용되고, 그의 대상물들에 대한 수치적 요구사항을 부과하기 위한 것이 아니다.
앞서 기술된 것은 개시된 아키텍처의 예들을 포함한다. 물론, 구성요소들 및/또는 방법들의 모든 생각할 수 있는 조합을 기술하는 것이 가능하지 않지만, 본 기술 분야의 통상의 기술자는 많은 추가의 조합들 및 치환들이 가능하다는 것을 인식할 수 있다. 그에 따라, 신규의 아키텍처는 첨부된 청구항들의 사상 및 범주 내에 속하는 모든 이러한 변경들, 수정들 및 변형들을 포함하기 위한 것이다. 상세한 개시 내용은 이제부터 추가적인 실시예들에 관한 예들을 제공하는 것으로 넘어간다. 이하에 제공된 예들은 제한하기 위한 것이 아니다.
예 1에서, 경쟁 상태(race condition)를 검출하는 장치는 모니터링 유닛을 포함하는 프로세서 구성요소, 데이터 조각(piece of data)에의 액세스들 간의 경쟁 상태와 연관된 캐시 이벤트를 검출하도록 그리고 캐시 이벤트의 발생에 응답하여 모니터링 데이터를 생성하기 위해 프로세서 구성요소의 상태의 표시를 포착하도록 모니터링 유닛을 구성하기 위해 프로세서 구성요소에 의해 실행하기 위한 트리거 구성요소, 및 캐시 이벤트의 모든 발생보다 더 적은 빈도수로 프로세서 구성요소의 상태의 표시의 포착을 인에이블시키도록 모니터링 유닛의 카운터를 구성하기 위해 프로세서 구성요소에 의해 실행하기 위한 카운터 구성요소를 포함한다.
예 1의 발명 요지를 포함하는 예 2에서, 트리거 구성요소는 프로세서 구성요소에 의한 동시 실행을 위한 다수의 부분들을 포함하는 애플리케이션 루틴이 프로세서 구성요소에 의해 현재 실행되는지에 기초하여 표시의 포착을 동적으로 인에이블시킬 수 있다.
예 1 및 예 2 중 임의의 예의 발명 요지를 포함하는 예 3에서, 본 장치는, 모니터링 데이터의 프로세서 구성요소의 상태의 다수의 표시들의 서브셋을 포함하는 감소된 데이터를 생성하기 위해, 캐시 이벤트가 프로세서 구성요소에 의해 실행되는 애플리케이션 루틴의 제1 부분에 의한 데이터 조각에의 제1 액세스와 애플리케이션 루틴의 제2 부분에 의한 데이터 조각에의 제2 액세스 사이의 경쟁 상태로부터 발생하지 않는 것에 기초하여, 모니터링 데이터로부터 표시를 제거하기 위해 프로세서 구성요소에 의해 실행하기 위한 필터 구성요소를 포함할 수 있고, 제1 액세스는 쓰기 동작을 포함할 수 있고, 제2 액세스는 읽기 동작 및 쓰기 동작 중 하나를 포함할 수 있다.
예 1 내지 예 3 중 임의의 예의 발명 요지를 포함하는 예 4에서, 필터 구성요소는, 제1 부분, 제2 부분, 제1 부분 및 제2 부분 중 하나의 부분을 실행하는 프로세서 구성요소의 코어, 또는 제1 부분 및 제2 부분 중 하나의 부분의 실행 스레드(thread of execution) 중 적어도 하나에 대한 식별자에 기초하여, 캐시 이벤트가 제1 액세스와 제2 액세스 사이의 경쟁 상태로부터 발생하는지를 결정할 수 있다.
예 1 내지 예 4 중 임의의 예의 발명 요지를 포함하는 예 5에서, 본 장치는 프로세서 구성요소를 네트워크에 결합시키는 인터페이스, 및 감소된 데이터를 디버깅 디바이스로 전송하도록 인터페이스를 동작시키기 위해 프로세서 구성요소에 의해 실행하기 위한 중계 구성요소(relaying component)를 포함할 수 있다.
예 1 내지 예 5 중 임의의 예의 발명 요지를 포함하는 예 6에서, 경쟁 상태는 데이터 조각을 읽기 위해 제1 실행 스레드에서 프로세서 구성요소에 의해 실행되는 제1 애플리케이션 루틴의 읽기 동작과 데이터 조각에 쓰기 위해 제2 실행 스레드에서 프로세서 구성요소에 의해 실행되는 제2 애플리케이션 루틴의 쓰기 동작 사이의 경쟁 상태를 포함한다.
예 1 내지 예 6 중 임의의 예의 발명 요지를 포함하는 예 7에서, 표시는 프로세서 구성요소의 레지스터의 내용, 프로세서 구성요소의 명령어 포인터의 주소, 어떤 액세스 동작이 캐시 이벤트를 트리거했는지의 표시, 캐시 이벤트의 유형, 캐시 이벤트를 트리거한 액세스 동작을 실행한 프로세서의 코어의 식별자, 또는 캐시 이벤트를 트리거한 액세스 동작이 실행된 실행 스레드의 식별자 중 적어도 하나를 포함할 수 있다.
예 1 내지 예 7 중 임의의 예의 발명 요지를 포함하는 예 8에서, 캐시 이벤트는 프로세서 구성요소의 캐시를 관여시킬 수 있고 RFO(read-for-ownership) 캐시 이벤트 또는 HITM(hit-modified) 캐시 이벤트 중 적어도 하나를 포함할 수 있다.
예 1 내지 예 8 중 임의의 예의 발명 요지를 포함하는 예 9에서, 본 장치는 다른 프로세서 구성요소를 포함할 수 있고, 트리거 구성요소는 캐시 이벤트를 검출하도록 그리고 캐시 이벤트의 발생에 응답하여 다른 프로세서 구성요소의 상태의 표시를 다른 모니터링 데이터로서 포착하도록 다른 프로세서 구성요소의 모니터링 유닛을 구성한다.
예 1 내지 예 9 중 임의의 예의 발명 요지를 포함하는 예 10에서, 필터 구성요소는, 모니터링 데이터의 프로세서 구성요소의 상태의 다수의 표시들의 서브셋 및 다른 모니터링 데이터의 다른 프로세서 구성요소의 상태의 다수의 표시들의 서브셋을 포함하는 감소된 데이터를 생성하기 위해, 캐시 이벤트가 애플리케이션 루틴의 제1 부분의 읽기 동작과 애플리케이션 루틴의 제2 부분의 쓰기 동작 사이의 경쟁 상태로부터 발생하지 않는 것에 기초하여, 다른 모니터링 데이터로부터 다른 프로세서 구성요소의 상태의 표시를 제거할 수 있다.
예 11에서, 경쟁 상태를 검출하는 장치는 제1 프로세서 구성요소; 제2 프로세서 구성요소; 데이터 조각에의 액세스들 간의 경쟁 상태와 연관된 캐시 이벤트를 검출하도록 그리고 캐시 이벤트의 발생에 응답하여 제1 프로세서 구성요소의 상태의 제1 표시를 제1 모니터링 데이터로서 포착하도록 제1 프로세서 구성요소의 모니터링 유닛을 구성하고, 캐시 이벤트를 검출하도록 그리고 캐시 이벤트의 발생에 응답하여 제2 프로세서 구성요소의 상태의 제2 표시를 제2 모니터링 데이터로서 포착하도록 제2 프로세서 구성요소의 모니터링 유닛을 구성하는 트리거 구성요소; 및 제1 표시와 제2 표시를 비교하고 제1 표시에 대한 제2 표시의 중복성에 기초하여 제1 표시는 포함하고 제2 표시는 포함하지 않는 감소된 데이터를 생성하는 필터 구성요소를 포함할 수 있다.
예 11의 발명 요지를 포함하는 예 12에서, 트리거 구성요소는 제1 프로세서 구성요소 및 제2 프로세서 구성요소 중 적어도 하나에 의한 동시 실행을 위한 다수의 부분들을 포함하는 애플리케이션 루틴이 제1 프로세서 구성요소 및 제2 프로세서 구성요소 중 적어도 하나에 의해 현재 실행되는지에 기초하여 제1 표시 및 제2 표시의 포착을 동적으로 인에이블시킬 수 있다.
예 11 및 예 12 중 임의의 예의 발명 요지를 포함하는 예 13에서, 본 장치는 캐시 이벤트의 모든 발생보다 더 적은 빈도수로 제1 표시 및 제2 표시의 포착을 인에이블시키도록 제1 프로세서 구성요소 및 제2 프로세서 구성요소 각각의 모니터링 유닛의 카운터를 구성하는 카운터 구성요소를 포함할 수 있다.
예 11 내지 예 13 중 임의의 예의 발명 요지를 포함하는 예 14에서, 카운터 구성요소는 제1 표시의 포착과 제2 표시의 포착을 동기화하도록 제1 프로세서 구성요소의 모니터링 유닛의 카운터 및 제2 프로세서 구성요소의 모니터링 유닛의 카운터를 구성할 수 있다.
예 11 내지 예 14 중 임의의 예의 발명 요지를 포함하는 예 15에서, 필터 구성요소는, 캐시 이벤트가 제1 프로세서 구성요소 및 제2 프로세서 구성요소 중 하나에 의해 실행되는 애플리케이션 루틴의 제1 부분에 의한 데이터 조각에의 액세스와 제1 프로세서 구성요소 및 제2 프로세서 구성요소 중 하나에 의해 실행되는 애플리케이션 루틴의 제2 부분에 의한 데이터 조각에의 액세스 사이의 경쟁 상태로부터 발생하지 않는 것에 기초하여, 제1 표시 및 제2 표시 중 적어도 하나를 감소된 데이터에 포함시키는 것을 조절(condition)할 수 있다.
예 11 내지 예 15 중 임의의 예의 발명 요지를 포함하는 예 16에서, 필터 구성요소는, 제1 부분, 제2 부분, 제1 부분 및 제2 부분 중 하나의 부분을 실행하는 제1 프로세서 구성요소의 코어, 제1 부분 및 제2 부분 중 하나의 부분을 실행하는 제2 프로세서 구성요소의 코어, 또는 제1 부분 및 제2 부분 중 하나의 부분의 실행 스레드 중 적어도 하나에 대한 식별자에 기초하여, 캐시 이벤트가 애플리케이션 루틴의 제1 부분과 제2 부분 사이의 경쟁 상태로부터 발생하는지를 결정할 수 있다.
예 11 내지 예 16 중 임의의 예의 발명 요지를 포함하는 예 17에서, 본 장치는 제1 프로세서 구성요소 및 제2 프로세서 구성요소 중 적어도 하나를 네트워크에 결합시키는 인터페이스, 및 감소된 데이터를 디버깅 디바이스로 전송하도록 인터페이스를 동작시키는 중계 구성요소를 포함할 수 있다.
예 11 내지 예 17 중 임의의 예의 발명 요지를 포함하는 예 18에서, 경쟁 상태는 데이터 조각을 읽기 위해 제1 실행 스레드에서 제1 프로세서 구성요소 및 제2 프로세서 구성요소 중 하나에 의해 실행되는 애플리케이션 루틴의 제1 부분의 읽기 동작과 데이터 조각에 쓰기 위해 제2 실행 스레드에서 제1 프로세서 구성요소 및 제2 프로세서 구성요소 중 하나에 의해 실행되는 애플리케이션 루틴의 제2 부분의 쓰기 동작 사이의 경쟁 상태를 포함할 수 있다.
예 11 내지 예 18 중 임의의 예의 발명 요지를 포함하는 예 19에서, 제1 표시는 제1 프로세서 구성요소의 레지스터의 내용, 제1 프로세서 구성요소의 명령어 포인터의 주소, 어떤 액세스 동작이 캐시 이벤트를 트리거했는지의 표시, 캐시 이벤트의 유형, 캐시 이벤트를 트리거한 액세스 동작을 실행한 제1 프로세서의 코어의 식별자, 또는 캐시 이벤트를 트리거한 액세스 동작이 실행된 실행 스레드의 식별자 중 적어도 하나를 포함할 수 있다.
예 11 내지 예 19 중 임의의 예의 발명 요지를 포함하는 예 20에서, 캐시 이벤트는 제1 프로세서 구성요소의 제1 캐시 또는 제2 프로세서 구성요소의 제2 캐시 중 적어도 하나를 관여시킬 수 있고, 캐시 이벤트는 RFO(read-for-ownership) 캐시 이벤트 또는 HITM(hit-modified) 캐시 이벤트 중 적어도 하나를 포함할 수 있다.
예 21에서, 경쟁 상태를 검출하는 컴퓨팅에 의해 구현되는 방법은, 프로세서 구성요소에 의해 실행되는 적어도 하나의 애플리케이션 루틴에 의한 데이터 조각에의 액세스들 간의 경쟁 상태와 연관된 캐시 이벤트를 검출하는 단계, 및 캐시 이벤트의 다수의 발생들 중 선택된 간격에서의 캐시 이벤트의 발생에 응답하여 프로세서 구성요소의 상태의 표시를 모니터링 데이터로서 반복하여 포착하는 단계를 포함할 수 있다.
예 21의 발명 요지를 포함하는 예 22에서, 본 방법은 애플리케이션 루틴이 프로세서 구성요소에 의해 현재 적어도 부분적으로 실행되는지에 기초하여 표시의 포착을 동적으로 인에이블시키는 단계를 포함할 수 있다.
예 21 및 예 22 중 임의의 예의 발명 요지를 포함하는 예 23에서, 본 방법은, 모니터링 데이터의 프로세서 구성요소의 상태의 다수의 표시들의 서브셋을 포함하는 감소된 데이터를 생성하기 위해, 캐시 이벤트가 애플리케이션 루틴의 제1 부분의 읽기 동작과 애플리케이션 루틴의 제2 부분의 쓰기 동작 사이의 경쟁 상태로부터 발생하지 않는 것에 기초하여, 모니터링 데이터로부터 표시를 제거하는 단계를 포함할 수 있다.
예 21 내지 예 23 중 임의의 예의 발명 요지를 포함하는 예 24에서, 본 방법은 제1 부분, 제2 부분, 제1 부분 및 제2 부분 중 하나의 부분을 실행하는 프로세서 구성요소의 코어, 또는 제1 부분 및 제2 부분 중 하나의 부분의 실행 스레드 중 적어도 하나에 대한 식별자에 기초하여, 캐시 이벤트가 읽기 동작과 쓰기 동작 사이의 경쟁 상태로부터 발생하는지를 결정하는 단계를 포함할 수 있다.
예 21 내지 예 24 중 임의의 예의 발명 요지를 포함하는 예 25에서, 본 방법은 감소된 데이터를 네트워크를 통해 디버깅 디바이스로 전송하는 단계를 포함할 수 있다.
예 21 내지 예 25 중 임의의 예의 발명 요지를 포함하는 예 26에서, 경쟁 상태는 데이터 조각에 쓰기 위해 제1 실행 스레드에서 프로세서 구성요소에 의해 실행되는 애플리케이션 루틴의 제1 쓰기 동작과 데이터 조각에 쓰기 위해 제2 실행 스레드에서 프로세서 구성요소에 의해 실행되는 다른 애플리케이션 루틴의 제2 쓰기 동작 사이의 경쟁 상태를 포함할 수 있다.
예 21 내지 예 26 중 임의의 예의 발명 요지를 포함하는 예 27에서, 표시는 프로세서 구성요소의 레지스터의 내용, 프로세서 구성요소의 명령어 포인터의 주소, 어떤 액세스 동작이 캐시 이벤트를 트리거했는지의 표시, 캐시 이벤트의 유형, 캐시 이벤트를 트리거한 액세스 동작을 실행한 프로세서의 코어의 식별자, 또는 캐시 이벤트를 트리거한 액세스 동작이 실행된 실행 스레드의 식별자 중 적어도 하나를 포함할 수 있다.
예 21 내지 예 27 중 임의의 예의 발명 요지를 포함하는 예 28에서, 캐시 이벤트는 프로세서 구성요소의 캐시를 관여시킬 수 있고 RFO(read-for-ownership) 캐시 이벤트 또는 HITM(hit-modified) 캐시 이벤트 중 적어도 하나를 포함할 수 있다.
예 21 내지 예 28 중 임의의 예의 발명 요지를 포함하는 예 29에서, 본 방법은 캐시 이벤트의 다수의 발생들 중 선택된 간격에서의 캐시 이벤트의 발생에 응답하여 다른 프로세서 구성요소의 상태의 표시를 다른 모니터링 데이터로서 포착하는 단계를 포함할 수 있다.
예 21 내지 예 29 중 임의의 예의 발명 요지를 포함하는 예 30에서, 본 방법은, 모니터링 데이터의 프로세서 구성요소의 상태의 다수의 표시들의 서브셋 및 다른 모니터링 데이터의 다른 프로세서 구성요소의 상태의 다수의 표시들의 서브셋을 포함하는 감소된 데이터를 생성하기 위해, 캐시 이벤트가 애플리케이션 루틴의 제1 부분에 의한 데이터 조각에의 제1 액세스와 애플리케이션 루틴의 제2 부분에 의한 데이터 조각에의 제2 액세스 사이의 경쟁 상태로부터 발생하지 않는 것에 기초하여, 다른 모니터링 데이터로부터 다른 프로세서 구성요소의 상태의 표시를 제거하는 단계를 포함할 수 있다.
예 31에서, 적어도 하나의 머신 판독 가능 저장 매체는, 프로세서 구성요소에 의해 실행될 때, 프로세서 구성요소 디바이스로 하여금 프로세서 구성요소에 의해 실행되는 적어도 하나의 애플리케이션 루틴에 의한 데이터 조각에의 액세스들 간의 경쟁 상태와 연관된 캐시 이벤트를 검출하게 하고, 캐시 이벤트의 다수의 발생들 중 선택된 간격에서의 캐시 이벤트의 발생에 응답하여 프로세서 구성요소의 상태의 표시를 모니터링 데이터로서 반복하여 포착하게 하는 명령어들을 포함한다.
예 31의 발명 요지를 포함하는 예 32에서, 프로세서 구성요소는 애플리케이션 루틴이 프로세서 구성요소에 의해 현재 적어도 부분적으로 실행되는지에 기초하여 표시의 포착을 동적으로 인에이블시키도록 되어 있을 수 있다.
예 31 및 예 32 중 임의의 예의 발명 요지를 포함하는 예 33에서, 프로세서 구성요소는, 모니터링 데이터의 프로세서 구성요소의 상태의 다수의 표시들의 서브셋을 포함하는 감소된 데이터를 생성하기 위해, 캐시 이벤트가 애플리케이션 루틴의 제1 부분의 제1 쓰기 동작과 애플리케이션 루틴의 제2 부분의 제2 쓰기 동작 사이의 경쟁 상태로부터 발생하지 않는 것에 기초하여, 모니터링 데이터로부터 표시를 제거하도록 되어 있을 수 있다.
예 31 내지 예 33 중 임의의 예의 발명 요지를 포함하는 예 34에서, 프로세서 구성요소는, 제1 부분, 제2 부분, 제1 부분 및 제2 부분 중 하나의 부분을 실행하는 프로세서 구성요소의 코어, 또는 제1 부분 및 제2 부분 중 하나의 부분의 실행 스레드 중 적어도 하나에 대한 식별자에 기초하여, 캐시 이벤트가 제1 쓰기 동작과 제2 쓰기 동작 사이의 경쟁 상태로부터 발생하는지를 결정하도록 되어 있을 수 있다.
예 31 내지 예 34 중 임의의 예의 발명 요지를 포함하는 예 35에서, 프로세서 구성요소는 감소된 데이터를 네트워크를 통해 디버깅 디바이스로 전송하도록 되어 있을 수 있다.
예 31 내지 예 35 중 임의의 예의 발명 요지를 포함하는 예 36에서, 경쟁 상태는 데이터 조각을 읽기 위해 제1 실행 스레드에서 프로세서 구성요소에 의해 실행되는 애플리케이션 루틴의 읽기 동작과 데이터 조각에 쓰기 위해 제2 실행 스레드에서 프로세서 구성요소에 의해 실행되는 다른 애플리케이션 루틴의 쓰기 동작 사이의 경쟁 상태를 포함할 수 있다.
예 31 내지 예 36 중 임의의 예의 발명 요지를 포함하는 예 37에서, 표시는 프로세서 구성요소의 레지스터의 내용, 프로세서 구성요소의 명령어 포인터의 주소, 어떤 액세스 동작이 캐시 이벤트를 트리거했는지의 표시, 캐시 이벤트의 유형, 캐시 이벤트를 트리거한 액세스 동작을 실행한 프로세서의 코어의 식별자, 또는 캐시 이벤트를 트리거한 액세스 동작이 실행된 실행 스레드의 식별자 중 적어도 하나를 포함할 수 있다.
예 31 내지 예 37 중 임의의 예의 발명 요지를 포함하는 예 38에서, 캐시 이벤트는 프로세서 구성요소의 캐시를 관여시킬 수 있고 RFO(read-for-ownership) 캐시 이벤트 또는 HITM(hit-modified) 캐시 이벤트 중 적어도 하나를 포함할 수 있다.
예 31 내지 예 38 중 임의의 예의 발명 요지를 포함하는 예 39에서, 프로세서 구성요소는 캐시 이벤트의 다수의 발생들 중 선택된 간격에서의 캐시 이벤트의 발생에 응답하여 다른 프로세서 구성요소의 상태의 표시를 다른 모니터링 데이터로서 포착하도록 되어 있을 수 있다.
예 31 내지 예 39 중 임의의 예의 발명 요지를 포함하는 예 40에서, 프로세서 구성요소는, 모니터링 데이터의 프로세서 구성요소의 상태의 다수의 표시들의 서브셋 및 다른 모니터링 데이터의 다른 프로세서 구성요소의 상태의 다수의 표시들의 서브셋을 포함하는 감소된 데이터를 생성하기 위해, 캐시 이벤트가 애플리케이션 루틴의 제1 부분에 의한 데이터 조각에의 제1 액세스와 애플리케이션 루틴의 제2 부분에 의한 데이터 조각에의 제2 액세스 사이의 경쟁 상태로부터 발생하지 않는 것에 기초하여, 다른 모니터링 데이터로부터 다른 프로세서 구성요소의 상태의 표시를 제거하도록 되어 있을 수 있다.
예 41에서, 명령들을 수신하는 장치는 프로세서 구성요소에 의해 실행되는 적어도 하나의 애플리케이션 루틴에 의한 데이터 조각에의 액세스들 간의 경쟁 상태와 연관된 캐시 이벤트를 검출하고, 캐시 이벤트의 다수의 발생들 중 선택된 간격에서의 캐시 이벤트의 발생에 응답하여 프로세서 구성요소의 상태의 표시를 모니터링 데이터로서 반복하여 포착하는 수단을 포함한다.
예 41의 발명 요지를 포함하는 예 42에서, 본 장치는 애플리케이션 루틴이 프로세서 구성요소에 의해 현재 적어도 부분적으로 실행되는지에 기초하여 표시의 포착을 동적으로 인에이블시키는 수단을 포함할 수 있다.
예 41 및 예 42 중 임의의 예의 발명 요지를 포함하는 예 43에서, 본 장치는, 모니터링 데이터의 프로세서 구성요소의 상태의 다수의 표시들의 서브셋을 포함하는 감소된 데이터를 생성하기 위해, 캐시 이벤트가 애플리케이션 루틴의 제1 부분의 읽기 동작과 애플리케이션 루틴의 제2 부분의 쓰기 동작 사이의 경쟁 상태로부터 발생하지 않는 것에 기초하여, 모니터링 데이터로부터 표시를 제거하는 수단을 포함할 수 있다.
예 41 내지 예 43 중 임의의 예의 발명 요지를 포함하는 예 44에서, 본 장치는 제1 부분, 제2 부분, 제1 부분 및 제2 부분 중 하나의 부분을 실행하는 프로세서 구성요소의 코어, 또는 제1 부분 및 제2 부분 중 하나의 부분의 실행 스레드 중 적어도 하나에 대한 식별자에 기초하여, 캐시 이벤트가 읽기 동작과 쓰기 동작 사이의 경쟁 상태로부터 발생하는지를 결정하는 수단을 포함할 수 있다.
예 41 내지 예 44 중 임의의 예의 발명 요지를 포함하는 예 45에서, 본 장치는 감소된 데이터를 네트워크를 통해 디버깅 디바이스로 전송하는 수단을 포함할 수 있다.
예 41 내지 예 45 중 임의의 예의 발명 요지를 포함하는 예 46에서, 경쟁 상태는 데이터 조각에 쓰기 위해 제1 실행 스레드에서 프로세서 구성요소에 의해 실행되는 애플리케이션 루틴의 제1 쓰기 동작과 데이터 조각에 쓰기 위해 제2 실행 스레드에서 프로세서 구성요소에 의해 실행되는 다른 애플리케이션 루틴의 제2 쓰기 동작 사이의 경쟁 상태를 포함할 수 있다.
예 41 내지 예 46 중 임의의 예의 발명 요지를 포함하는 예 47에서, 표시는 프로세서 구성요소의 레지스터의 내용, 프로세서 구성요소의 명령어 포인터의 주소, 어떤 액세스 동작이 캐시 이벤트를 트리거했는지의 표시, 캐시 이벤트의 유형, 캐시 이벤트를 트리거한 액세스 동작을 실행한 프로세서의 코어의 식별자, 또는 캐시 이벤트를 트리거한 액세스 동작이 실행된 실행 스레드의 식별자 중 적어도 하나를 포함할 수 있다.
예 41 내지 예 47 중 임의의 예의 발명 요지를 포함하는 예 48에서, 캐시 이벤트는 프로세서 구성요소의 캐시를 관여시킬 수 있고 RFO(read-for-ownership) 캐시 이벤트 또는 HITM(hit-modified) 캐시 이벤트 중 적어도 하나를 포함할 수 있다.
예 41 내지 예 48 중 임의의 예의 발명 요지를 포함하는 예 49에서, 본 장치는 캐시 이벤트의 다수의 발생들 중 선택된 간격에서의 캐시 이벤트의 발생에 응답하여 다른 프로세서 구성요소의 상태의 표시를 다른 모니터링 데이터로서 포착하는 수단을 포함할 수 있다.
예 41 내지 예 49 중 임의의 예의 발명 요지를 포함하는 예 50에서, 본 장치는, 모니터링 데이터의 프로세서 구성요소의 상태의 다수의 표시들의 서브셋 및 다른 모니터링 데이터의 다른 프로세서 구성요소의 상태의 다수의 표시들의 서브셋을 포함하는 감소된 데이터를 생성하기 위해, 캐시 이벤트가 애플리케이션 루틴의 제1 부분에 의한 데이터 조각에의 제1 액세스와 애플리케이션 루틴의 제2 부분에 의한 데이터 조각에의 제2 액세스 사이의 경쟁 상태로부터 발생하지 않는 것에 기초하여, 다른 모니터링 데이터로부터 다른 프로세서 구성요소의 상태의 표시를 제거하는 수단을 포함할 수 있다.
예 51에서, 적어도 하나의 머신 판독 가능 저장 매체는, 프로세서 구성요소에 의해 실행될 때, 프로세서 구성요소로 하여금 상기한 것들 중 임의의 것을 수행하게 하는 명령어들을 포함할 수 있다.
예 52에서, 경쟁 상태를 검출하는 장치는 상기한 것들 중 임의의 것을 수행하는 수단을 포함할 수 있다.