다음을 통해 공유


부동 스레드

이 항목을 사용하여 코어 사이에 부동하는 스레드를 찾는 방법을 알 수 있습니다. 코어 사이에 부동하는 스레드에 의해 중요한 프로세스가 더 이상 사용되지 않을 수 있습니다.

스레드의 선호도는 OS가 스레드를 실행하도록 예약할 수 있는 CPU 코어를 나타냅니다. 기본적으로 스레드는 CPU 코어에서 실행하도록 예약할 수 있습니다. 스레드가 꺼진 경우 스레드가 다시 전환될 때 다른 CPU 코어에서 실행될 수 있습니다(즉, 다른 코어에 대해 부동인 경우). 경우에 따라 이 동작은 작업 부하를 조정하고 다른 코어를 사용할 수 있는 경우 스레드가 기다리지 못하게 할 수 있기 때문에 더 좋습니다. 그러나 이 경우 타이틀 성능에 부정적인 영향을 줄 수 있습니다. 다음 예를 살펴보세요.

  • 스레드가 타이틀에 중요한 코어로 부동할 수 있습니다. 예를 들어 타이틀이 렌더링 스레드를 코어 1에 잠그면 작업자 스레드가 코어 1로 부동하는 다음 렌더링 스레드를 중단할 수 있습니다.
  • 캐시에 거의 언제나 잘못된 데이터가 있습니다. 이로 인해 많은 캐시 누락이 발생합니다.

PIX

PIX에서 코어 사이에 스레드가 움직이는지 쉽게 확인할 수 있습니다. 스레드 시간 표시 막대에는 각 이벤트에 대해 각 스레드가 실행되는 코어가 표시됩니다.

PIX를 사용하여 스레드가 코어 사이에서 부동하는지 확인

  1. 타이밍 캡처를 생성합니다. 자세한 내용은 일반 단계를 참조하세요.

  2. 스레드 시간 표시 막대에서 문제의 원인이 될 수 있는 섹션을 확대합니다. 예제는 그림 1을 참조합니다.

  3. 각 스레드의 타임라인에는 가로줄이 두 개 있습니다. 아래쪽 줄은 활성 PIX 이벤트를 나타내고 위쪽 줄은 스레드가 실행 중인 CPU 코어를 나타냅니다.

    그림 1. 코어 사이에 부동 스레드 836이 표시하는 PIX 스레드 시간 표시 막대의 확대된 보기

    코어 사이에 부동 스레드 836이 표시하는 PIX 스레드 시간 표시 막대의 확대된 보기 스크린샷

  4. 그림 1에서 스레드 836을 고려합니다. 녹색 코어(코어 1)와 밝은 파랑(코어 2)에서 실행되는지 알 수 있습니다. 마우스를 위쪽 이벤트 줄로 이동하여 구역을 강조 표시하고 해당 구역을 나타내는 코어를 알려줄 팝업 창이 표시됩니다.

  5. 스레드 836는 스레드 972 및 976가 이미 실행 중인 코어 1과 2 사이에 떠 있습니다(그림 2 참조). 선택한 컨텍스트 스위치와 화살표를 살펴보세요. 스레드 976은 작업이 끝날 때 스레드 972에 의해 준비되었습니다. 그러나 스레드 976의 효율성은 코어 2에서만 실행됩니다. 따라서 836에서 나중에 58 μs에서 전환해야 합니다(그 당시 코어 2를 사용 중). 이 예제는 부동 스레드가 다른 스레드의 성능에 어떤 영향을 줄 수 있는지 보여 주는 몇 가지 사소한 예제입니다.

    그림 2. 그림 1에서 선택된 컨텍스트 스위치의 요소 세부 정보

    그림 1에서 선택된 컨텍스트 스위치의 요소 세부 정보 스크린샷

WPA(Windows Performance Analyzer)

WPA에서 프로세스, 타임라인, 스레드별 CPU 사용량 (정밀) 창(ThreadFloating.wpaProfileWPA 프로필의 일부)은 타이틀 스레드가 코어간에 부동되는지 여부를 확인하는 데 필요한 모든 정보를 제공합니다.

WPA를 사용하여 부동 스레드 찾기

  1. 이벤트 추적 로그(ETL) 파일을 생성합니다. 자세한 내용은 일반 단계를 참조하세요.

  2. 일반 단계에 설명된 대로 ThreadFloating.wpaProfileWPA 프로필을 적용합니다. 그림 3은 새 분석 탭의 모양을 보여줍니다.

    그림 3. WPA 프로필 스레드의 기본값 보기

    WPA 프로필 스레드의 기본값 보기를 보여주는 스크린샷

  3. 이 WPA 프로필을 사용할 경우 CPU 열이 각 줄에 대한 고유한 개수를 표시하도록 설정되어 있습니다(그림 4 참조). 그러면 해당 프로세스 및 스레드에 대해 보고된 ETL 이벤트의 고유 CPU 값 개수를 확인할 수 있습니다. 하나 이상의 값은 표시되는 기간 동안 CPU 코어 간에 스레드가 한 번 이상 떠 있는 경우를 나타냅니다.

    그림 4. 스레드의 고유 CPU 값, 스레드 800 및 836은 6개의 서로 다른 코어에서 실행되고 있습니다.

    6개의 서로 다른 코어에서 실행되는 스레드 800 및 836을 보여주는 스크린샷

  4. 중요 코어로 부동하는 스레드를 찾을 수 있습니다. 이렇게하려면 CPU 열을 마우스 오른쪽 단추로 클릭한 다음 열에서 찾기...를 선택합니다 그러면 해당 특정 코어에 부동 소수점이 있는 모든 스레드가 검색됩니다.

    그림 5. 검색 기능을 사용하여 캡처 중에 코어 1에서 실행된 모든 스레드를 찾습니다.

    캡처하는 동안 코어 1에서 실행된 모든 스레드를 찾기 위해 검색 기능을 사용하는 방법을 보여주는 스크린샷