다음을 통해 공유


코어 사용률: 회전

이 항목을 사용하여 코어가 회전하고 유용한 작업을 수행하지 않는 영역을 찾을 수 있습니다. 매우 짧은 시간 동안의 회전은 매우 짧은 시간 동안 사용할 수 있는 데이터를 기다리는 것과 같은 특정 상황에서 유용합니다. 그러나 장시간 회전은 유용한 작업을 수행해야 할 때는 낭비를 초래합니다.

PIX(Xbox용 성능 조사자)

회전할 수 있는 모든 코드 섹션에 대해 Xbox용 성능 조사자(PIX) 이벤트를 만드는 것이 유용합니다. 스핀 블록 주변의 코드에서 PixBeginEventPixEndEvent를 사용하여 이를 수행할 수 있습니다.

다음 단계를 사용하여 PIX에서 스핀 스레드를 조사합니다.

  1. 일반 단계 항목에 있는 정보로 시작하여 타이밍 캡처를 만듭니다.

  2. 범위 세부 정보에 초점을 맞추고 표시할 항목PIX 이벤트(CPU)로 설정되어 있는지 확인합니다.

  3. 범위 세부 정보 상단의 검색 상자를 사용하여 스핀 이벤트만 필터링합니다. 이 경우 그림 1에 표시된 것처럼 Spin 레이블이 지정됩니다.

    그림 1. 타이틀이 회전할 때 PIX 표식 추가 후 나타나는 이벤트 목록 표시

    타이틀이 회전할 때 PIX 표식 추가 후 나타나는 이벤트 목록 스크린샷

  4. 각 인스턴스에 대한 기간실행 열을 검토합니다. 열의 타이틀을 선택하면 해당 값별로 이벤트가 정렬됩니다.

  5. 그림 1에서 강조 표시된 이벤트의 기간은 219 ms 이고 111 마이크로초(μs)를 실행합니다.

  • 기간은 스레드가 제한된 시간을 포함하여 이벤트가 활성화된 총 시간입니다.
  • 실행은 이벤트가 활성 상태인 총 시간으로, 스레드가 코어에서 실행된 시간입니다.
  • 중단됨은 스레드가 실행하지 않는 데 소비한 이벤트 기간을 확인하는 또 다른 방법입니다.
  1. 더 나쁜 경우는 그림 1의 상단에 표시된 Spin 이벤트입니다. 이 이벤트는 344ms 중단과 함께 86ms 동안 실행되었습니다. CPU 코어는 전체 86 ms에 대한 스핀 루프에서 실행되었습니다. 이러한 상황은 다른 작업을 수행하는 데 소요된 시간 낭비가 될 수 있습니다.

WPA(Windows Performance Analyzer)

WPA(Windows Performance Analyzer)에서 타이틀이 회전할 수 있는 영역을 확인하려면 코드가 회전할 수 있는 모든 위치를 빌드 프로파일링을 위한 비 인라인 함수에 배치해야합니다. 이렇게 하면 회전에 너무 많은 시간이 소요되는지 쉽게 확인할 수 있습니다. 타이틀이 회전 중이고 컨텍스트 전환을 수행하지 못하기 때문에 샘플링된 데이터를 사용해야 합니다. 타이틀이 SwitchToThread를 사용하여 스레드 간에 빠르게 전환하여 회전 중인 경우 높은 컨텍스트 전환 속도 항목에 제공된 단계를 따릅니다.

  1. ETL(이벤트 추적 로그) 파일을 만들기 위해 일반 단계 항목에 있는 정보로 시작합니다.

  2. 일반 단계 항목에 설명된 대로 ThreadSpinning.wpaProfile WPA 프로필을 사용하세요. 그림 2는 새 분석 탭의 모양을 보여줍니다.

    그림 2. ThreadSpinning WPA 프로필의 기본값 보기 표시

    ThreadSpinning WPA 프로필의 기본값 보기 스크린샷

  3. % 가중치 열은 데이터 테이블의 각 라인에 대한 샘플 비율을 보여줍니다. 이는 그림 3에 표시된 같이 함수에 소요된 총 시간과 깊은 관련이 있습니다.

    그림 3. 프로세스, 스택 창의 CPU 사용률(샘플링된) 사용률을 보여 줍니다. 이 창에서 FindingThreadingIssues 프로세스에는 83%의 샘플링된 데이터가 있습니다.

    CPU 사용량 샘플링된 프로세스별 사용률, 스택 창의 스크린샷

  4. 데이터 테이블 스택 열의 컨텍스트 메뉴에서 열에서 찾기... 명령을 사용하여 열을 마우스 오른쪽 단추로 클릭하여 회전하는 것으로 알려진 함수를 찾습니다. % 가중치 열을 검토하여 그림 4와 같이 회전하는 데 너무 많은 시간이 소요되는지 확인합니다.

    그림 4. 샘플의 37%를 담당하는 스핀 함수SpinFunc에 대한 호출 스택을 설명하는 내용을 보여줍니다.

    스핀 함수를 위한 호출 스택을 쌓아가고 있는 스크린샷