2017-12-01 16 views
1

시스템 전체 (exclude_kernel == 0) PEBS 샘플을 모니터링하기 위해 Linux perf 도구를 사용하고 있습니다. PEBS 샘플이 인터럽트 컨텍스트에서 발생하는지 (즉, 인터럽트가 인터럽트 핸들러에 의해 처리되는 동안) 발생할 수 있는지 궁금합니다. 가능한 경우 PEBS 샘플 (즉, 레지스터 비트)의 컨텍스트 (예 : 프로세스 컨텍스트, 인터럽트 컨텍스트)를 결정할 수있는 방법이 있습니까?Intel PEBS 예제 컨텍스트

답변

0

인터럽트가 처리 될 때 PEBS 샘플링이 발생하지 않습니다.. PEBS Data Store Save Area

PEBS는 위의 버퍼링 메커니즘을 사용하여 레코드를 저장합니다. PEBS buffer basePEBS interrupt thresholdPEBS 인터럽트과 같은 모든 PEBS 관련 필드가 명확하게 표시됩니다. PEBS buffer indexPEBS interrupt threshold과 일치 할 때 발생합니다.

PEBS 인터럽트 처리기는 PEBS Buffer IndexPEBS buffer base의 시작 부분으로 다시 설정합니다. PEBS 샘플링이 계속되면 PEBS는 DS 버퍼에 액세스하여 PEBS Buffer Index을 증가시킵니다. 따라서 PEBS 인터럽트와 PEBS는 모두 동일한 DS 저장 영역에 쓰기를 시도합니다. 이것은 분명히 경쟁 조건 PEBS 인터럽트 처리기와 PEBS 모듈 사이에 가리 킵니다.

이 경쟁 조건을 피하려면 PEBS 샘플링을 비활성화해야합니다 (IA32_PEBS_ENABLE msr 레지스터의 플래그를 비활성화하여). 또한 모든 이벤트 카운터는 인터럽트 핸들러에 의해 비활성화되어야합니다. 이것은 커널에 proof입니다. 원인은 너무 많이 CPU에 조절PEBS 인터럽트 경우

그러나, 당신은 PERF_RECORD_THROTTLE 이벤트를 가질 수 있지만, 이것은 물론 오히려 아닌 PEBS_SAMPLE 이벤트하지만 PERF_RECORD 이벤트입니다.

+0

귀하의 의견에서 PEBS 인터럽트 처리기가 제공 될 때 PEBS를 비활성화해야하는 것으로 보입니다. PEBS는 다른 인터럽트 핸들러와 충돌이 없으며 경쟁없이 인터럽트 컨텍스트에서 샘플을 생성 할 수 있습니다. 내가 틀렸다면 나를 바로 잡아라. –

+0

PEBS는 다른 인터럽트 처리기와 충돌하지 않습니다. 내가 아는 한, PEBS 중 데이터 저장소 저장은 INIT, 프로세서 재설정 및 SMM (시스템 관리 모드) 또는 ia-32 모드로 이동할 때만 피할 수 있습니다. –