연습 4 - MXA를 사용하여 오디오 결함 분석
이 랩에서는 오디오 결함을 분석합니다. 오디오 결함은 종종 다음 문제 중 하나로 인해 발생합니다.
1밀리초보다 오래 실행되는 DPC(지연 프로시저 호출) 또는 ISR(인터럽트 서비스 루틴).
디스패치 수준에서 1밀리초 이상 실행되는 드라이버 또는 커널 스레드.
디스크에서 데이터를 읽을 수 없거나 디스크 또는 네트워크 사용률이 높기 때문에 네트워크가 충분히 빠르지 않은 경우.
하드웨어 또는 소프트웨어 디코더가 스트림을 실시간보다 빠르게 디코딩하고 처리할 수 없는 경우.
1단계: MXA에서 추적을 열고 관련 데이터 세트를 패널로 끌기
Windows ADK의 일부인 MXA(Media eXperience Analyzer)를 설치합니다.
시작 메뉴를 마우스 오른쪽 단추로 클릭하고 명령 프롬프트(관리자)를 클릭합니다.
MXA를 설치한 폴더로 이동합니다.
PC에서 MXA 기호 경로를 설정합니다.
여기에서 AudioGlitches_ThreadsAtDispatchLevel.etl을 다운로드합니다.
다음 명령을 입력하여 AudioGlitches_ThreadsAtDispatchLevel.etl 추적 파일을 엽니다.
xa.exe -i <AudioGlitches_ThreadsAtDispatchLevel.etl location>\AudioGlitches_ThreadsAtDispatchLevel.etl
예를 들어 AudioGlitches_ThreadsAtDispatchLevel.etl을 C:\Performance\Media에 다운로드한 경우 다음 명령을 입력합니다.
xa.exe -i C:\Performance\Media\AudioGlitches_ThreadsAtDispatchLevel.etl
MXA 시작 화면에서 기호 해제 단추를 눌러 기호 조회를 비활성화합니다.
추적이 로드되면 각 패널의 이름 옆에 있는 작은 X를 눌러 애플리케이션 중앙에 표시되는 모든 열려 있는 패널을 닫습니다.
새 패널 3개를 추가합니다. 보기>새 패널을 클릭하거나 Ctrl+N을 누릅니다.
미디어 노드 아래의 오디오 결함 클래식 데이터 세트를 맨 위 패널로 끌어서 놓습니다.
CPU 노드 아래의 Scheduler 데이터 세트를 맨 위에서 두 번째 패널로 끌어서 놓습니다.
CPU 노드 아래의 샘플링된 프로필 데이터 세트를 맨 위에서 세 번째 패널로 끌어서 놓습니다.
다른 스레드 작업을 더 명확하게 볼 수 있도록 보기에서 유휴 프로세스를 필터링합니다. 데이터 세트 트리의 CPU 노드에서 Scheduler 데이터 세트를 확장하고 유휴 상태 스레드 노드 확인란을 두 번 클릭하여 선택을 취소합니다. 확인란을 한 번 클릭하면 그래프의 데이터가 강조 표시되고, 두 번 클릭하면 선택이 취소됩니다.
2단계: 오디오 결함이 발생한 추적 영역 식별
이벤트 추적 로그(.etl) 파일의 오디오 엔진 데이터를 확인하여 이러한 결함이 발생한 시점의 시각적 타임라인을 확인하고 타임라인을 다른 데이터 세트와 비교하여 패턴을 찾을 수 있습니다.
맨 위의 오디오 결함 클래식 패널에서 막대 중 하나를 클릭한 채 마우스를 끌어 오디오 결함을 확대합니다.
두 번째 패널의 Scheduler 데이터 세트에 있는 iexplore.exe 프로세스가 오디오 결함 직전에 오랫동안(~20-35ms) 실행되었습니다.
이스케이프를 눌러 100% 축소한 다음, 이전 두 단계를 반복하여 모든 오디오 결함 이전에 iexplore.exe 프로세스가 장시간(~20-35ms) 실행되는 패턴을 확인합니다.
패널 내의 시간을 측정하려면 Shift 키를 누른 채 iexplore.exe 프로세스 표시줄의 한쪽 끝에서 다른 쪽 끝으로 마우스를 끕니다. 마우스 커서 위에 있는 도구 설명은 타임라인에서 측정할 시간(밀리초)을 보여 줍니다. 아래 MXA 스크린샷에서 프로세스가 약 35밀리초 동안 실행되었습니다.
3단계: 파이프라인 지연의 원인 식별
이 오디오 결함 이전에는 오랫동안 실행되는 iexplore.exe 프로세스가 코어 중 하나에서 실행되었습니다. iexplore.exe 스레드가 오디오 파이프라인을 중단하는 방법을 알아보려면 CPU 노드에서 해당 샘플링된 프로필 데이터 세트를 확인할 수 있습니다.
MXA 창에 CallStack 데이터 뷰어가 표시되지 않는 경우 보기>데이터 뷰어>CallStack을 클릭하여 엽니다.
샘플링된 프로필 패널(맨 위에서 세 번째)에서 장시간 실행 중인 iexplore.exe 스레드의 동일한 색과 일치하는 샘플 프로필 이벤트를 마우스로 가리킵니다.
CallStack 창에는 각 샘플에 대한 호출 스택이 표시됩니다. iexplore.exe를 실행 중인 코어의 샘플 대부분을 마우스로 가리키면 특정 드라이버(ImageRAMONA.sys)가 CallStack의 맨 위에 있는 것을 알 수 있습니다.
audiodg.exe 스레드가 iexplore.exe 스레드(우선 순위 19)보다 높은 우선 순위(우선 순위 22)로 실행되고 있지만 iexplore.exe 스레드는 드라이버( ImageRAMONA.sys)를 호출하여 프로세서의 IRQL 수준을 높입니다. 따라서 디스패처가 보유한 DPC에서 대기 중인 audiodg.exe는 일반적인 10ms 주기에서 실행될 기회가 없어 오디오 결함이 발생합니다.
Shift 키를 누른 채 CallStack 및 속성 데이터 뷰어를 고정하고 마우스를 CallStack으로 이동합니다. 복사를 누릅니다.