스레드 뷰(병렬 성능)Threads View (Parallel Performance)

스레드 뷰는 Concurrency 시각화에서 가장 자세하며 다양한 기능을 제공하는 뷰입니다.Threads View is the most detailed and feature-rich view in the Concurrency Visualizer. 이 보기를 사용하면 동기화, I/O 또는 기타 이유로 인해 스레드가 차단되는지 아니면 실행되고 있는지를 확인할 수 있습니다.By using this view, you can identify whether the threads are executing or blocking because of synchronization, I/O, or some other reason.

프로필 분석 중에 Concurrency 시각화는 각 응용 프로그램 스레드에 대해 모든 운영 체제 컨텍스트 전환 이벤트를 검사합니다.During profile analysis, the Concurrency Visualizer examines all operating system context-switch events for each application thread. 컨텍스트 전환은 다음과 같은 여러 가지 이유로 인해 발생할 수 있습니다.Context switches can occur for many reasons, such as these:

  • 스레드가 동기화 기본 형식에서 차단되는 경우A thread is blocked on a synchronization primitive.

  • 스레드의 퀀텀이 만료된 경우The quantum of a thread expires.

  • 스레드가 차단 I/O 요청을 하는 경우A thread makes a blocking I/O request.

    스레드 뷰는 스레드 실행이 중지될 때 각 컨텍스트 전환에 범주를 할당합니다.Threads View assigns a category to each context switch when a thread has stopped executing. 범주는 뷰 왼쪽 아래의 범례에 표시됩니다.The categories are shown in the legend in the lower-left part of the view. Concurrency 시각화는 스레드의 호출 스택에서 잘 알려진 차단 API를 검색하여 컨텍스트 전환 이벤트를 분류합니다.The Concurrency Visualizer categorizes context-switch events by searching the call stack of the thread for well-known blocking APIs. 일치하는 호출 스택이 없으면 Windows에서 제공하는 대기 원인이 사용됩니다.If there is no call stack match, the wait reason that's provided by Windows is used. 그러나 Windows 범주는 구현 정보를 기반으로 할 수 있으며 사용자의 의도를 반영하지 않을 수도 있습니다.However, the Windows category may be based on an implementation detail and may not reflect the intent of the user. 예를 들어 Windows에서는 기본 슬림 판독기/기록기 잠금에 대한 차단의 대기 원인을 동기화가 아닌 I/O로 보고합니다.For example, Windows reports the wait reason for blocking on a native slim reader-writer lock as I/O instead of synchronization. 대부분의 경우에는 컨텍스트 전환 이벤트에 해당하는 호출 스택을 검사하면 차단 이벤트의 근본 원인을 파악할 수 있습니다.In most cases, you can identify the root cause of a blocking event by examining the call stacks that correspond to context-switch events.

    스레드 보기에는 스레드 간의 종속성도 표시됩니다.The Threads View also shows dependencies between threads. 예를 들어 동기화 개체에서 차단되는 스레드가 확인되는 경우 해당 스레드의 차단을 해제한 스레드를 찾을 수 있으며, 이 스레드가 다른 스레드의 차단을 해제한 지점에서 해당 스레드에 대해 호출 스택의 작업을 검사할 수 있습니다.For example, if you identify a thread that's blocked on a synchronization object, you can look for the thread that unblocked it, and you can examine the activity on the call stack for that thread at the point when it unblocked the other one.

    스레드가 실행 중이면 Concurrency 시각화가 샘플을 수집합니다.When threads are executing, the Concurrency Visualizer collects samples. 스레드 뷰에서는 실행 세그먼트 중에 하나 이상의 스레드가 실행한 코드를 분석할 수 있습니다.In the Threads View, you can analyze which code is executed by one or more threads during an execution segment. 차단 보고서 및 호출 스택 트리 실행을 프로파일링하는 보고서도 검사할 수 있습니다.You can also examine blocking reports, and reports that profile call-stack tree execution.

용도Usage

다음은 스레드 뷰를 사용할 수 있는 몇 가지 방법입니다.Here are some ways that you can use the Threads View:

  • 특정 실행 단계 중에 앱의 UI(사용자 인터페이스)가 응답하지 않는 원인을 파악합니다.Identify reasons why the user interface (UI) of an app is unresponsive during certain execution phases.

  • 동기화, I/O, 페이지 폴트 및 기타 이벤트에서 차단에 소요된 시간을 파악합니다.Identify the amount of time that's spent blocking on synchronization, I/O, page faults, and other events.

  • 시스템에서 실행되고 있는 다른 프로세스의 간섭 정도를 파악합니다.Identify the degree of interference from other processes that are executing on the system.

  • 병렬 실행에 대한 부하 분산 문제를 파악합니다.Identify load-balancing issues for parallel execution.

  • 확장성이 최적 상태가 아니거나 없는 원인(예: 논리 코어를 더 사용할 수 있는데 병렬 앱의 성능이 개선되지 않는 이유)을 파악합니다.Identify the reasons for scalability that is suboptimal or nonexistent (for example, why the performance of a parallel app does not improve when more logical cores are available).

  • 병렬화에 도움이 되는 앱의 동시성 수준을 이해합니다.Understand the degree of concurrency in the app, to help in parallelization.

  • 작업자 스레드 및 중요한 실행 경로 간의 종속성을 이해합니다.Understand dependencies among worker threads and critical paths of execution.

특정 시간 간격 및 스레드 검사Examining Specific Time Intervals and Threads

스레드 뷰에는 시간 표시 막대가 표시됩니다.The Threads View shows a timeline. 시간 표시 막대 내에서 확대/축소 및 이동하여 응용 프로그램의 특정 간격 및 스레드를 검사할 수 있습니다.You can zoom and pan within the timeline to examine specific intervals and threads of your application. x축에는 시간이 표시되고 y축에는 여러 채널이 표시됩니다.On the x-axis is time and on the y-axis are several channels:

  • 시스템의 각 디스크 드라이브에 해당하는 2개 I/O 채널(쓰기용 채널과 읽기용 채널 1개씩)Two I/O channels for each disk drive on the system, one channel for reads and one for writes.

  • 프로세스의 각 스레드에 해당하는 채널A channel for each thread in the process.

  • 추적에 표식 이벤트가 있는 경우 표식 채널.Marker channels, if there are marker events in the trace. 표식 채널은 처음에는 해당 이벤트를 생성한 스레드 채널 아래에 표시됩니다.Marker channels initially appear under the thread channels that generated those events.

  • GPU 채널GPU channels.

    아래 그림에 스레드 뷰가 나와 있습니다.Here's an illustration of the Threads View:

    스레드 뷰Threads View
    스레드 뷰Threads View

    초기에는 스레드가 만들어진 순서로 정렬되므로 주 응용 프로그램 스레드가 맨 먼저 표시됩니다.Initially, the threads are sorted in the order in which they are created, so that the main application thread is first. 뷰의 왼쪽 위에 있는 정렬 옵션을 사용하여 실행 작업이 가장 많이 수행된 순서대로 스레드를 정렬하는 등 다른 기준에 따라 스레드를 정렬할 수 있습니다.You can use the sort option in the upper-left corner of the view to sort threads by another criterion (for example, by most execution work performed).

    왼쪽의 열에서 스레드 이름을 선택하고 도구 모음에서 선택한 스레드를 숨깁니다. 단추를 선택하여 작업을 수행하고 있지 않은 스레드를 숨길 수 있습니다.You can hide threads that are not performing work by selecting their names in the column at the left and then choosing the Hide Selected Threads button on the toolbar. 통계가 관련성이 없으며 보고서에 불필요하게 포함되므로 완전히 차단된 스레드를 숨기는 것이 좋습니다.We recommend that you hide threads that are completely blocked because their statistics are irrelevant and can clog the reports.

    추가로 숨길 스레드를 확인하려면 활성 범례에서 프로필 보고서 탭의 스레드 단위 요약 보고서를 선택합니다. 그러면 현재 선택한 시간 간격의 스레드 상태를 보여 주는 실행 분석 그래프가 표시됩니다.To identify additional threads to hide, in the active legend, choose the Per Thread Summary report on the Profile Report tab. This displays the Execution Breakdown graph, which shows the state of threads for the currently selected time interval. 특정 확대/축소 수준에서 표시되지 않는 스레드도 있습니다.At some zoom levels, some threads might not be displayed. 이 경우 오른쪽에 줄임표가 표시됩니다.When this occurs, ellipses are displayed at the right.

    시간 간격 및 해당 간격에 포함된 스레드를 선택하고 나면 성능 분석을 시작할 수 있습니다.When you have selected an interval of time and some threads in it, you can start your performance analysis.

분석 도구Analysis Tools

이 섹션에서는 보고서 및 기타 분석 도구에 대해 설명합니다.This section describes reports and other analysis tools.

스레드 차단 정보Thread-Blocking Details

스레드의 특정 영역에서 차단 이벤트에 대한 정보를 가져오려면 해당 영역 위에 포인터를 놓습니다. 그러면 도구 설명이 표시됩니다.To get information about a blocking event in a particular region on a thread, rest the pointer on that region to display a tooltip. 이 도구 설명에는 범주, 영역 시작 시간, 차단 기간, 차단 API(있는 경우) 등의 정보가 포함되어 있습니다.It contains information such as category, region start time, blocking duration, and a blocking API if there is one. 차단 영역을 선택하면 도구 설명에 표시되는 것과 같은 정보와 함께 해당 시점의 스택이 아래쪽 창에 표시됩니다.If you select the blocking region, the stack at that point in time is displayed in the bottom pane, together with the same information that's displayed in the tooltip. 호출 스택을 검사하면 스레드 차단 이벤트의 기본 원인을 확인할 수 있습니다.By examining the call stack, you can determine the underlying reason for the thread-blocking event. 세그먼트를 선택하고 현재 탭을 확인하면 추가 프로세스 및 스레드 정보를 찾을 수 있습니다.You can find additional process and thread information by selecting the segment and examining the Current tab.

실행 경로에는 여러 차단 이벤트가 있을 수 있습니다.A path of execution may have multiple blocking events. 차단 범주별로 이러한 이벤트를 조사하면 문제 영역을 보다 빠르게 찾을 수 있습니다.You can examine these by blocking category so that you can find problem areas more quickly. 이렇게 하려면 왼쪽의 범례에서 차단 범주 중 하나를 선택합니다.Just choose one of the blocking categories in the legend on the left.

스레드 간 종속성Dependencies Between Threads

Concurrency 시각화는 프로세스의 스레드 간 종속성을 표시할 수 있습니다. 따라서 차단된 스레드가 수행하려던 작업과, 해당 스레드가 작업을 수행할 수 있도록 한 다른 스레드를 확인할 수 있습니다. The Concurrency Visualizer can show dependencies between threads in your process so that you can determine what a blocked thread was trying to do and learn what other thread enabled it to execute. 다른 스레드의 차단을 해제한 스레드를 확인하려면 관련 차단 세그먼트를 선택합니다.To determine which thread unblocked another thread, select the relevant blocking segment. Concurrency 시각화는 차단 해제 스레드를 확인할 수 있으면 차단 해제 스레드와 차단 스레드 뒤에 오는 실행 세그먼트 사이에 선을 그립니다.If the Concurrency Visualizer can determine the unblocking thread, it draws a line between the unblocking thread and the executing segment that follows the blocking segment. 또한 차단 해제 스택 탭에 관련 호출 스택이 표시됩니다.In addition, the Unblocking stack tab shows the relevant call stack.

스레드 실행 정보Thread Execution Details

스레드의 시간 표시 막대 그래프에서 녹색 세그먼트에는 스레드가 코드를 실행했던 시간이 표시됩니다.In the timeline graph of a thread, the green segments show when it was executing code. 실행 세그먼트와 관련된 자세한 정보를 확인할 수 있습니다.You can get more detailed information about an execution segment.

실행 세그먼트에서 특정 지점을 선택하면 Concurrency 시각화는 관련 호출 스택에서 해당 시점을 찾은 다음 실행 세그먼트의 선택한 지점 위에 검은색 캐럿을 표시하고 현재 스택 탭에는 호출 스택 자체를 표시합니다. 실행 세그먼트에서 여러 지점을 선택할 수 있습니다.When you select a point in an execution segment, the Concurrency Visualizer looks for that point in time on the relevant call stack and then displays a black caret above the selected point in the execution segment and displays the call stack itself on the Current stack tab. You can select multiple points on the execution segment.

참고

Concurrency 시각화는 실행 세그먼트에서 선택한 지점을 확인하지 못할 수도 있습니다.The Concurrency Visualizer might not be able to resolve a selection on an execution segment. 일반적으로는 세그먼트의 기간이 1밀리초보다 짧은 경우 이러한 현상이 발생합니다.Typically, this occurs when the duration of the segment is less than one millisecond.

현재 선택한 시간 범위에서 사용하도록 설정된(숨겨지지 않은) 모든 스레드의 실행 프로필을 가져오려면 활성 범례에서 실행 단추를 선택합니다.To get an execution profile for all enabled (unhidden) threads in the currently selected time range, choose the Execution button in the active legend.

시간 표시 막대 그래프Timeline Graph

시간 표시 막대 그래프에는 호스트 컴퓨터의 모든 물리적 디스크 장치와 프로세스에 있는 모든 스레드의 작업이 표시됩니다.The timeline graph shows the activity of all threads in the process and all physical disk devices on the host computer. 또한 GPU 작업 및 표식 이벤트도 표시됩니다.It also displays GPU activity and marker events. 확대하여 자세한 정보를 확인하거나 축소하여 더 긴 시간 간격의 정보를 확인할 수 있습니다.You can zoom in to view more detail or out to view a longer interval of time. 그래프에서 점을 선택하여 범주, 시작 시간, 기간 및 호출 스택 상태에 대한 정보를 확인할 수도 있습니다.You can also select points on the graph to get details about categories, start times, durations, and call stack states.

시간 표시 막대 그래프에서 색은 지정된 시간의 스레드 상태를 나타냅니다.In the timeline graph, a color indicates the state of a thread at a given time. 예를 들어 녹색 세그먼트는 실행 중이었던 스레드, 빨간색 세그먼트는 동기화를 위해 차단되었던 스레드, 노란색 세그먼트는 선점된 스레드, 자주색 세그먼트는 장치 I/O에 사용되었던 스레드를 나타냅니다.For example, green segments were executing, red segments were blocked for synchronization, yellow segments were preempted, and purple segments were engaged in device I/O. 이 뷰를 사용하여 병렬 루프 또는 동시 작업에 사용되는 스레드 간의 작업 균형을 조사할 수 있습니다.You can use this view to examine the balance of work among threads that are involved in a parallel loop or in concurrent tasks. 특정 스레드를 완료하는 데 다른 스레드보다 시간이 오래 걸리면 작업이 불균형하게 분산되었을 수 있습니다.If a thread is taking longer to complete than the others, the work might be unbalanced. 이 정보를 사용하여 작업을 스레드 간에 보다 균일하게 분산시키면 프로그램의 성능을 개선할 수 있습니다.You can use this information to improve the performance of your program by distributing work more evenly among the threads.

특정 시점에 녹색(실행 중)인 스레드가 하나뿐이면 앱이 시스템의 동시성을 완전하게 활용하고 있지 않은 것일 수 있습니다.If only one thread is green (executing) at a point in time, the app may not be taking full advantage of the concurrency on the system. 시간 표시 막대 그래프를 사용하여 스레드 간의 종속성과 차단하는 스레드 및 차단되는 스레드 간의 임시 관계를 조사할 수 있습니다.You can use the timeline graph to examine dependencies between threads and the temporal relationships between blocking and blocked threads. 스레드를 다시 정렬하려면 스레드를 선택하고 도구 모음에서 위쪽 또는 아래쪽 단추를 선택합니다.To rearrange threads, select a thread and then on the toolbar, choose the up or down button. 스레드를 숨기려면 스레드를 선택한 다음 스레드 숨기기 단추를 선택합니다.To hide threads, select them and then choose the Hide Threads button.

프로필 보고서Profile Reports

시간 표시 막대 그래프 아래에는 여러 보고서의 탭이 있는 창과 시간 표시 막대 프로필이 표시됩니다.Below the timeline graph is a timeline profile and a pane that has tabs for various reports. 스레드 뷰를 변경하면 보고서는 자동으로 업데이트됩니다.The reports automatically update as you change the Threads View. 대규모 추적의 경우에는 업데이트를 계산하는 동안 보고서 창을 사용하지 못할 수도 있습니다.For large traces, the reports pane might be unavailable while the updates are calculated. 각 보고서에는 두 가지 필터 조정 항목(노이즈 감소 및 내 코드만)이 있습니다.Each report has two filter adjustments: noise reduction and Just My Code. 시간이 거의 소요되지 않은 트리 항목을 필터링하려면 노이즈 감소를 사용합니다.Use noise reduction to filter out call tree entries where little time is spent. 기본 필터 값은 2%이지만 0%에서 99% 사이의 값으로 조정할 수 있습니다.The default filter value is 2 percent, but you can adjust it from 0 percent to 99 percent. 내 코드에 대한 호출 트리만 보려면 내 코드만 확인란을 선택합니다.To view only the call tree for your code, select the Just My Code check box. 모든 호출 트리를 보려면 확인란 선택을 취소합니다.To view all call trees, clear it.

프로필 보고서Profile Report

이 탭에는 활성 범례의 항목에 해당하는 보고서가 표시됩니다.This tab shows reports that correspond to the entries in the active legend. 보고서를 표시하려면 항목 중 하나를 선택합니다.To display a report, choose one of the entries.

현재 스택Current Stack

이 탭에는 시간 표시 막대 그래프의 스레드 세그먼트에서 선택한 점에 대한 호출 스택이 표시됩니다.This tab shows the call stack for a selected point on a thread segment in the timeline graph. 호출 스택은 프로그램과 관련된 작업만 표시하도록 잘립니다.The call stacks are trimmed to show only activity that is related to your program.

차단 해제 스택Unblocking Stack

선택한 스레드의 차단을 해제한 스레드 및 차단이 해제된 코드 줄을 확인하려면 차단 해제 스택 탭을 선택합니다.To see which thread unblocked the selected thread, and at what line of code, choose the Unblocking stack tab.

실행Execution

실행 보고서에는 응용 프로그램의 실행에 소요된 시간을 분석한 정보가 표시됩니다.The Execution Report shows the breakdown of the time the application spent in execution.

실행 시간이 소요된 코드 줄을 찾으려면 호출 트리를 확장하고 호출 트리 항목의 바로 가기 메뉴에서 소스 보기 또는 호출 사이트 보기를 선택합니다.To find the line of code in which execution time is spent, expand the call tree and then, on the shortcut menu for the call tree entry, choose View Source or View Call Sites. 소스 보기를 선택하면 실행된 코드 줄을 찾습니다.View Source locates the executed line of code. 호출 사이트 보기를 선택하면 실행된 코드 줄을 호출한 코드 줄을 찾습니다.View Call Sites locates the line of code that called the executed line of code. 호출 사이트가 하나뿐이면 해당 코드 줄이 강조 표시됩니다.If only one call site exists, its line of code is highlighted. 호출 사이트가 여러 개인 경우 표시되는 대화 상자에서 원하는 사이트를 선택한 다음 소스로 이동 단추를 선택하여 호출 사이트 코드를 강조 표시할 수 있습니다.If multiple call sites exist, you can select the one you want in the dialog box that appears and then choose the Go to source button to highlight the call site code. 이러한 기능은 인스턴스가 가장 많거나, 시간이 가장 길거나, 인스턴스도 가장 많고 시간도 가장 긴 호출 사이트를 찾는 데 매우 유용한 경우가 많습니다.It's often most useful to locate the call site that has the most instances, the most time, or both. 자세한 내용은 실행 프로필 보고서를 참조하세요.For more information, see Execution Profile Report.

동기화Synchronization

동기화 보고서에는 동기화 블록을 처리하는 호출과 각 호출 스택의 집계 차단 시간이 표시됩니다.The synchronization report shows the calls that are responsible for synchronization blocks, together with the aggregate blocking times of each call stack. 자세한 내용은 동기화 시간을 참조하세요.For more information, see Synchronization Time.

I/OI/O

I/O 보고서에는 I/O 블록을 처리하는 호출과 각 호출 스택의 집계 차단 시간이 표시됩니다.The I/O report shows the calls that are responsible for I/O blocks, together with the aggregate blocking times of each call stack. 자세한 내용은 I/O 시간(스레드 뷰)를 참조하세요.For more information, see I/O Time (Threads View).

SleepSleep

절전 모드 보고서에는 절전 모드 블록을 처리하는 호출과 각 호출 스택의 집계 차단 시간이 표시됩니다.The sleep report shows the calls that are responsible for sleep blocks, together with the aggregate blocking times of each call stack. 자세한 내용은 절전 모드 시간을 참조하세요.For more information, see Sleep Time.

메모리 관리Memory Management

메모리 관리 보고서에는 메모리 관리 블록이 나온 호출 및 각 호출 스택의 집계 차단 시간이 표시됩니다.The memory management report shows the calls where memory management blocks occurred, together with the aggregate blocking times of each call stack. 이 정보를 사용하여 과도한 페이징 또는 가비지 수집 문제가 발생하는 영역을 확인할 수 있습니다.You can use this information to identify areas that have excessive paging or garbage collection issues. 자세한 내용은 메모리 관리 시간을 참조하세요.For more information, see Memory Management Time.

선점Preemption

선점 보고서에는 시스템의 프로세스가 현재 프로세스를 선점한 인스턴스 및 현재 프로세스의 스레드와 대체된 개별 스레드가 표시됩니다.The Preemption report shows the instances where processes on the system preempted the current process and the individual threads that replaced threads in the current process. 이 정보를 사용하여 가장 많은 선점을 한 프로세스와 스레드를 확인할 수 있습니다.You can use this information to identify the processes and threads that are most responsible for preemption. 자세한 내용은 선점 시간을 참조하세요.For more information, see Preemption Time.

UI 처리UI Processing

UI 처리 보고서에는 UI 처리 블록을 처리하는 호출과 각 호출 스택의 집계 차단 시간이 표시됩니다.The UI processing report shows the calls that are responsible for UI processing blocks, together with the aggregate blocking times of each call stack. 자세한 내용은 UI 처리 시간을 참조하세요.For more information, see UI Processing Time.

스레드 단위 요약Per Thread Summary

이 탭에는 각 스레드가 실행, 차단, I/O 및 기타 상태에서 소요한 총 시간을 나타내는 색으로 구분된 열 뷰가 표시됩니다.This tab shows a color-coded column view of the total time that each thread spent in the run, blocked, I/O and other states. 열 아래쪽에 레이블이 지정되어 있습니다.The columns are labeled at the bottom. 시간 표시 막대 그래프에서 확대/축소 수준을 조정하면 이 탭은 자동으로 업데이트됩니다.When you adjust the zoom level in the timeline graph, this tab is automatically updated. 특정 확대/축소 수준에서 표시되지 않는 스레드도 있습니다.At some zoom levels, some threads might not be displayed. 이 경우 오른쪽에 줄임표가 표시됩니다.When this occurs, ellipses are displayed at the right. 확인하려는 스레드가 표시되지 않으면 다른 스레드를 숨길 수 있습니다.If the thread you want does not appear, you can hide other threads. 자세한 내용은 스레드 단위 요약 보고서를 참조하세요.For more information, see Per Thread Summary Report.

디스크 작업Disk Operations

이 탭에는 현재 프로세스를 대신하여 디스크 I/O에서 사용된 프로세스와 스레드, 이러한 스레드와 프로세스가 사용한 파일(예: 로드된 DLL), 읽은 바이트 수 및 기타 정보가 표시됩니다.This tab shows which processes and threads were involved in disk I/O on behalf of the current process, which files they touched (for example, DLLs that were loaded), how many bytes were read, and other information. 이 보고서를 사용하면 특히 프로세스가 I/O에 바인딩된 것으로 보이는 경우 실행 중에 파일에 액세스하는 데 소요된 시간을 평가할 수 있습니다.You can use this report to evaluate time that is spent in accessing files during execution, especially when your process seems to be I/O bound. 자세한 내용은 디스크 작업 보고서를 참조하세요.For more information, see Disk Operations Report.

참고 항목See Also

Concurrency 시각화Concurrency Visualizer