스레드 뷰(병렬 성능)

스레드 뷰는 Concurrency 시각화에서 가장 자세하며 다양한 기능을 제공하는 뷰입니다. 이 보기를 사용하면 동기화, I/O 또는 기타 이유로 인해 스레드가 차단되는지 아니면 실행되고 있는지를 확인할 수 있습니다.

프로필 분석 중에 Concurrency 시각화는 각 응용 프로그램 스레드에 대해 모든 운영 체제 컨텍스트 전환 이벤트를 검사합니다. 컨텍스트 전환은 다음과 같은 여러 가지 이유로 인해 발생할 수 있습니다.

  • 스레드가 동기화 기본 형식에서 차단되는 경우

  • 스레드의 퀀텀이 만료된 경우

  • 스레드가 차단 I/O 요청을 하는 경우

    스레드 뷰는 스레드 실행이 중지될 때 각 컨텍스트 전환에 범주를 할당합니다. 범주는 뷰 왼쪽 아래의 범례에 표시됩니다. Concurrency 시각화는 스레드의 호출 스택에서 잘 알려진 차단 API를 검색하여 컨텍스트 전환 이벤트를 분류합니다. 일치하는 호출 스택이 없으면 창에서 제공하는 대기 원인이 사용됩니다. 그러나 창 범주는 구현 정보를 기반으로 할 수 있으며 사용자의 의도를 반영하지 않을 수도 있습니다. 예를 들어 창에서는 기본 슬림 판독기/기록기 잠금에 대한 차단의 대기 원인을 동기화가 아닌 I/O로 보고합니다. 대부분의 경우에는 컨텍스트 전환 이벤트에 해당하는 호출 스택을 검사하면 차단 이벤트의 근본 원인을 파악할 수 있습니다.

    스레드 보기에는 스레드 간의 종속성도 표시됩니다. 예를 들어 동기화 개체에서 차단되는 스레드가 확인되는 경우 해당 스레드의 차단을 해제한 스레드를 찾을 수 있으며, 이 스레드가 다른 스레드의 차단을 해제한 지점에서 해당 스레드에 대해 호출 스택의 작업을 검사할 수 있습니다.

    스레드가 실행 중이면 Concurrency 시각화가 샘플을 수집합니다. 스레드 뷰에서는 실행 세그먼트 중에 하나 이상의 스레드가 실행한 코드를 분석할 수 있습니다. 차단 보고서 및 호출 스택 트리 실행을 프로파일링하는 보고서도 검사할 수 있습니다.

용도

다음은 스레드 뷰를 사용할 수 있는 몇 가지 방법입니다.

  • 특정 실행 단계 중에 앱의 UI(사용자 인터페이스)가 응답하지 않는 원인을 파악합니다.

  • 동기화, I/O, 페이지 폴트 및 기타 이벤트에서 차단에 소요된 시간을 파악합니다.

  • 시스템에서 실행되고 있는 다른 프로세스의 간섭 정도를 파악합니다.

  • 병렬 실행에 대한 부하 분산 문제를 파악합니다.

  • 확장성이 최적 상태가 아니거나 없는 원인(예: 논리 코어를 더 사용할 수 있는데 병렬 앱의 성능이 개선되지 않는 이유)을 파악합니다.

  • 병렬화에 도움이 되는 앱의 동시성 수준을 이해합니다.

  • 작업자 스레드 및 중요한 실행 경로 간의 종속성을 이해합니다.

특정 시간 간격 및 스레드 검사

스레드 뷰에는 시간 표시 막대가 표시됩니다. 시간 표시 막대 내에서 확대/축소 및 이동하여 응용 프로그램의 특정 간격 및 스레드를 검사할 수 있습니다. x축에는 시간이 표시되고 y축에는 여러 채널이 표시됩니다.

  • 시스템의 각 디스크 드라이브에 해당하는 2개 I/O 채널(쓰기용 채널과 읽기용 채널 1개씩)

  • 프로세스의 각 스레드에 해당하는 채널

  • 추적에 표식 이벤트가 있는 경우 표식 채널. 표식 채널은 처음에는 해당 이벤트를 생성한 스레드 채널 아래에 표시됩니다.

  • GPU 채널

    아래 그림에 스레드 뷰가 나와 있습니다.

    스레드 뷰
    스레드 뷰

    초기에는 스레드가 만들어진 순서로 정렬되므로 주 응용 프로그램 스레드가 맨 먼저 표시됩니다. 뷰의 왼쪽 위에 있는 정렬 옵션을 사용하여 실행 작업이 가장 많이 수행된 순서대로 스레드를 정렬하는 등 다른 기준에 따라 스레드를 정렬할 수 있습니다.

    왼쪽의 열에서 스레드 이름을 선택하고 도구 모음에서 선택한 스레드를 숨깁니다. 단추를 선택하여 작업을 수행하고 있지 않은 스레드를 숨길 수 있습니다. 통계가 관련성이 없으며 보고서에 불필요하게 포함되므로 완전히 차단된 스레드를 숨기는 것이 좋습니다.

    추가로 숨길 스레드를 확인하려면 활성 범례에서 프로필 보고서 탭의 스레드 단위 요약 보고서를 선택합니다. 그러면 현재 선택한 시간 간격의 스레드 상태를 보여 주는 실행 분석 그래프가 표시됩니다. 특정 확대/축소 수준에서 표시되지 않는 스레드도 있습니다. 이 경우 오른쪽에 줄임표가 표시됩니다.

    시간 간격 및 해당 간격에 포함된 스레드를 선택하고 나면 성능 분석을 시작할 수 있습니다.

분석 도구

이 섹션에서는 보고서 및 기타 분석 도구에 대해 설명합니다.

스레드 차단 정보

스레드의 특정 영역에서 차단 이벤트에 대한 정보를 가져오려면 해당 영역 위에 포인터를 놓습니다. 그러면 도구 설명이 표시됩니다. 이 도구 설명에는 범주, 영역 시작 시간, 차단 기간, 차단 API(있는 경우) 등의 정보가 포함되어 있습니다. 차단 영역을 선택하면 도구 설명에 표시되는 것과 같은 정보와 함께 해당 시점의 스택이 아래쪽 창에 표시됩니다. 호출 스택을 검사하면 스레드 차단 이벤트의 기본 원인을 확인할 수 있습니다. 세그먼트를 선택하고 현재 탭을 확인하면 추가 프로세스 및 스레드 정보를 찾을 수 있습니다.

실행 경로에는 여러 차단 이벤트가 있을 수 있습니다. 차단 범주별로 이러한 이벤트를 조사하면 문제 영역을 보다 빠르게 찾을 수 있습니다. 이렇게 하려면 왼쪽의 범례에서 차단 범주 중 하나를 선택합니다.

스레드 간 종속성

Concurrency 시각화는 프로세스의 스레드 간 종속성을 표시할 수 있습니다. 따라서 차단된 스레드가 수행하려던 작업과, 해당 스레드가 작업을 수행할 수 있도록 한 다른 스레드를 확인할 수 있습니다. 다른 스레드의 차단을 해제한 스레드를 확인하려면 관련 차단 세그먼트를 선택합니다. Concurrency 시각화는 차단 해제 스레드를 확인할 수 있으면 차단 해제 스레드와 차단 스레드 뒤에 오는 실행 세그먼트 사이에 선을 그립니다. 또한 차단 해제 스택 탭에 관련 호출 스택이 표시됩니다.

스레드 실행 정보

스레드의 시간 표시 막대 그래프에서 녹색 세그먼트에는 스레드가 코드를 실행했던 시간이 표시됩니다. 실행 세그먼트와 관련된 자세한 정보를 확인할 수 있습니다.

실행 세그먼트에서 특정 지점을 선택하면 Concurrency 시각화는 관련 호출 스택에서 해당 시점을 찾은 다음 실행 세그먼트의 선택한 지점 위에 검은색 캐럿을 표시하고 현재 스택 탭에는 호출 스택 자체를 표시합니다. 실행 세그먼트에서 여러 지점을 선택할 수 있습니다.

참고

Concurrency 시각화는 실행 세그먼트에서 선택한 지점을 확인하지 못할 수도 있습니다. 일반적으로는 세그먼트의 기간이 1밀리초보다 짧은 경우 이러한 현상이 발생합니다.

현재 선택한 시간 범위에서 사용하도록 설정된(숨겨지지 않은) 모든 스레드의 실행 프로필을 가져오려면 활성 범례에서 실행 단추를 선택합니다.

시간 표시 막대 그래프

시간 표시 막대 그래프에는 호스트 컴퓨터의 모든 물리적 디스크 장치와 프로세스에 있는 모든 스레드의 작업이 표시됩니다. 또한 GPU 작업 및 표식 이벤트도 표시됩니다. 확대하여 자세한 정보를 확인하거나 축소하여 더 긴 시간 간격의 정보를 확인할 수 있습니다. 그래프에서 점을 선택하여 범주, 시작 시간, 기간 및 호출 스택 상태에 대한 정보를 확인할 수도 있습니다.

시간 표시 막대 그래프에서 색은 지정된 시간의 스레드 상태를 나타냅니다. 예를 들어 녹색 세그먼트는 실행 중이었던 스레드, 빨간색 세그먼트는 동기화를 위해 차단되었던 스레드, 노란색 세그먼트는 선점된 스레드, 자주색 세그먼트는 장치 I/O에 사용되었던 스레드를 나타냅니다. 이 뷰를 사용하여 병렬 루프 또는 동시 작업에 사용되는 스레드 간의 작업 균형을 조사할 수 있습니다. 특정 스레드를 완료하는 데 다른 스레드보다 시간이 오래 걸리면 작업이 불균형하게 분산되었을 수 있습니다. 이 정보를 사용하여 작업을 스레드 간에 보다 균일하게 분산시키면 프로그램의 성능을 개선할 수 있습니다.

특정 시점에 녹색(실행 중)인 스레드가 하나뿐이면 앱이 시스템의 동시성을 완전하게 활용하고 있지 않은 것일 수 있습니다. 시간 표시 막대 그래프를 사용하여 스레드 간의 종속성과 차단하는 스레드 및 차단되는 스레드 간의 임시 관계를 조사할 수 있습니다. 스레드를 다시 정렬하려면 스레드를 선택하고 도구 모음에서 위쪽 또는 아래쪽 단추를 선택합니다. 스레드를 숨기려면 스레드를 선택한 다음 스레드 숨기기 단추를 선택합니다.

프로필 보고서

시간 표시 막대 그래프 아래에는 여러 보고서의 탭이 있는 창과 시간 표시 막대 프로필이 표시됩니다. 스레드 뷰를 변경하면 보고서는 자동으로 업데이트됩니다. 대규모 추적의 경우에는 업데이트를 계산하는 동안 보고서 창을 사용하지 못할 수도 있습니다. 각 보고서에는 두 가지 필터 조정 항목(노이즈 감소 및 내 코드만)이 있습니다. 시간이 거의 소요되지 않은 트리 항목을 필터링하려면 노이즈 감소를 사용합니다. 기본 필터 값은 2%이지만 0%에서 99% 사이의 값으로 조정할 수 있습니다. 내 코드에 대한 호출 트리만 보려면 내 코드만 확인란을 선택합니다. 모든 호출 트리를 보려면 확인란 선택을 취소합니다.

프로필 보고서

이 탭에는 활성 범례의 항목에 해당하는 보고서가 표시됩니다. 보고서를 표시하려면 항목 중 하나를 선택합니다.

현재 스택

이 탭에는 시간 표시 막대 그래프의 스레드 세그먼트에서 선택한 점에 대한 호출 스택이 표시됩니다. 호출 스택은 프로그램과 관련된 작업만 표시하도록 잘립니다.

차단 해제 스택

선택한 스레드의 차단을 해제한 스레드 및 차단이 해제된 코드 줄을 확인하려면 차단 해제 스택 탭을 선택합니다.

실행

실행 보고서에는 응용 프로그램의 실행에 소요된 시간을 분석한 정보가 표시됩니다.

실행 시간이 소요된 코드 줄을 찾으려면 호출 트리를 확장하고 호출 트리 항목의 바로 가기 메뉴에서 소스 보기 또는 호출 사이트 보기를 선택합니다. 소스 보기를 선택하면 실행된 코드 줄을 찾습니다. 호출 사이트 보기를 선택하면 실행된 코드 줄을 호출한 코드 줄을 찾습니다. 호출 사이트가 하나뿐이면 해당 코드 줄이 강조 표시됩니다. 호출 사이트가 여러 개인 경우 표시되는 대화 상자에서 원하는 사이트를 선택한 다음 소스로 이동 단추를 선택하여 호출 사이트 코드를 강조 표시할 수 있습니다. 이러한 기능은 인스턴스가 가장 많거나, 시간이 가장 길거나, 인스턴스도 가장 많고 시간도 가장 긴 호출 사이트를 찾는 데 매우 유용한 경우가 많습니다. 자세한 내용은 실행 프로필 보고서를 참조하세요.

동기화

동기화 보고서에는 동기화 블록을 처리하는 호출과 각 호출 스택의 집계 차단 시간이 표시됩니다. 자세한 내용은 동기화 시간을 참조하세요.

I/O

I/O 보고서에는 I/O 블록을 처리하는 호출과 각 호출 스택의 집계 차단 시간이 표시됩니다. 자세한 내용은 I/O 시간(스레드 뷰)를 참조하세요.

Sleep

절전 모드 보고서에는 절전 모드 블록을 처리하는 호출과 각 호출 스택의 집계 차단 시간이 표시됩니다. 자세한 내용은 절전 모드 시간을 참조하세요.

메모리 관리

메모리 관리 보고서에는 메모리 관리 블록이 나온 호출 및 각 호출 스택의 집계 차단 시간이 표시됩니다. 이 정보를 사용하여 과도한 페이징 또는 가비지 수집 문제가 발생하는 영역을 확인할 수 있습니다. 자세한 내용은 메모리 관리 시간을 참조하세요.

선점

선점 보고서에는 시스템의 프로세스가 현재 프로세스를 선점한 인스턴스 및 현재 프로세스의 스레드와 대체된 개별 스레드가 표시됩니다. 이 정보를 사용하여 가장 많은 선점을 한 프로세스와 스레드를 확인할 수 있습니다. 자세한 내용은 선점 시간을 참조하세요.

UI 처리

UI 처리 보고서에는 UI 처리 블록을 처리하는 호출과 각 호출 스택의 집계 차단 시간이 표시됩니다. 자세한 내용은 UI 처리 시간을 참조하세요.

스레드 단위 요약

이 탭에는 각 스레드가 실행, 차단, I/O 및 기타 상태에서 소요한 총 시간을 나타내는 색으로 구분된 열 뷰가 표시됩니다. 열 아래쪽에 레이블이 지정되어 있습니다. 시간 표시 막대 그래프에서 확대/축소 수준을 조정하면 이 탭은 자동으로 업데이트됩니다. 특정 확대/축소 수준에서 표시되지 않는 스레드도 있습니다. 이 경우 오른쪽에 줄임표가 표시됩니다. 확인하려는 스레드가 표시되지 않으면 다른 스레드를 숨길 수 있습니다. 자세한 내용은 스레드 단위 요약 보고서를 참조하세요.

디스크 작업

이 탭에는 현재 프로세스를 대신하여 디스크 I/O에서 사용된 프로세스와 스레드, 이러한 스레드와 프로세스가 사용한 파일(예: 로드된 DLL), 읽은 바이트 수 및 기타 정보가 표시됩니다. 이 보고서를 사용하면 특히 프로세스가 I/O에 바인딩된 것으로 보이는 경우 실행 중에 파일에 액세스하는 데 소요된 시간을 평가할 수 있습니다. 자세한 내용은 디스크 작업 보고서를 참조하세요.

참고 항목

Concurrency 시각화