“线程”视图(并行性能)
线程视图是并发可视化工具中的最详细、 功能丰富的视图。 通过使用此视图,您可以标识线程是执行还是由于阻止同步、 I/O、 或由于其他原因。
在配置文件分析期间,并发可视化工具将检查所有操作系统上下文开关事件的每个应用程序线程。 有许多原因,这样,就会出现上下文切换:
线程被同步基元阻塞。
线程的量程过期。
线程发出一个阻塞 I/O 请求。
线程已停止执行时,线程视图分配给每个上下文切换的类别。 类别视图的左下部分中的图例所示。 并发可视化工具将上下文开关事件分类通过搜索已知阻塞 Api 调用线程的堆栈。 如果没有调用堆栈匹配,等待原因所提供的Windows使用。但是, Windows类别可能基于的实现详细信息,并可能无法反映用户的意图。例如, Windows报告等待本机轻薄的读取器-编写器锁上阻塞为 I/O 而不是同步的原因。在大多数情况下,您可以通过检查调用堆栈与上下文开关事件相对应的标识阻塞事件的根本原因。
线程视图还显示线程之间的依赖关系。 例如,如果您确定同步对象被阻塞的线程,取消阻止,则线程可以查找和它取消阻止另一个时,您可以检查该点处的线程的调用堆栈上的活动。
当线程执行时,并发可视化工具收集样本。 在线程视图中,您可以分析期间执行段由一个或多个线程执行的代码。 您还可以检查阻塞的报告和分析树执行的调用堆栈的报告。
用法
这里有一些方法您可以使用线程视图:
确定应用程序的用户界面 (UI) 为什么某些执行阶段没有响应的原因。
标识所花费的时间阻止同步、 I/O、 页面错误和其他事件的数量。
确定系统上执行的其它进程干扰的程度。
找出并行执行负载平衡问题。
标识的可扩展性,是不理想的统计或不存在 (例如,为什么有更多的逻辑内核,适于执行时不能提高并行的应用程序的性能) 的原因。
了解应用程序,以便于进行并行化中的并发的程度。
了解执行的辅助线程与关键路径之间的依赖关系。
检查特定的时间间隔和线程
线程视图显示时间线。 您可以缩放和平移时间轴,以检查特定的时间间隔和线程的应用程序中。 在 x 轴上是时间,在 y 轴上几个通道:
每个磁盘驱动器在系统、 一个通道的读取和写入的两个 I/O 通道。
在过程中的每个线程的通道。
标记通道,如果跟踪中标记的事件。 标记通道最初显示在生成这些事件的线程频道。
GPU 通道。
以下是举例说明了线程视图:
线程视图
最初,线程排序顺序在其中创建它们,以便在主应用程序线程是第一个。 线程由另一个条件排序 (例如,通过执行大多数执行工作) 可在视图的左上角用于排序选项。
您可以隐藏线程不通过在左侧的列中选择其名称,然后选择执行工作的隐藏选定线程工具栏上的按钮。 我们建议您隐藏完全被阻止,因为它们的统计没有什么实际意义,会报告的线程。
若要标识附加线程要隐藏,请在活动的图例中,选择每个线程摘要 报告 配置文件报告选项卡。 这会显示执行细分图表,其中显示当前选定的时间间隔的线程的状态。 在某些缩放级别,可能无法显示某些线程。 在这种情况下,在右侧显示省略号。
当您选择的时间间隔的时间和某些线程中时,您可以启动性能分析。
分析工具
本部分介绍了报告和其他分析工具。
线程阻塞详细信息
在一个线程上的特定区域中获取阻塞事件的信息,请将指针停留在该区域,以显示工具提示。 如果有的话,它包含类别、 区域的开始时间、 阻止持续时间,以及阻止 API 的信息。 如果您选择阻止区域,在该位置中时间的堆栈显示在底部窗格中,以及包含相同信息的工具提示中显示。 通过检查调用堆栈,可以确定线程阻塞事件的基本原因。 您可以通过选择该线段,检查当前选项卡找到附加的进程和线程信息。
执行路径可能有多个阻止的事件。 您可以检查通过阻止类别,以便可以更快地找到问题的区域。 只需在图例左侧选择阻止类别之一。
在线程间的依赖关系
并发可视化工具可显示您的进程中的线程之间的依赖关系,以便您可以确定被阻塞的线程正在尝试的操作,并了解哪些其他线程,使其能够执行。 要确定哪个线程取消阻止另一个线程,请选择相关的阻塞段。 如果并发可视化工具可以确定在解除阻止线程,它会取消阻止线程正在执行下面的阻塞段的段之间绘制线条。 此外, Unblocking 堆栈选项卡显示了相关的调用堆栈。
线程执行详细信息
在线程的时间线图中,绿色的段显示时执行的代码。 您可以获得有关执行段的更多详细的信息。
当您选择执行段中的一个点时,并发可视化工具查找该相关的调用堆栈上的时间点显示黑色执行段中的选定点的上方插入符号并显示其自身的调用堆栈上当前堆栈选项卡。 您可以选择执行网络段上的多个点。
备注
并发可视化工具可能无法解决执行网段上的所选内容。通常情况下,这时发生的段的持续时间不到 1 毫秒。
要启用所有 (非隐藏的) 在当前选定的时间范围内的线程的执行配置文件,请选择执行活动图例中的按钮。
时间线图
时间线图显示主机上正在进行的所有线程和所有物理磁盘设备的活动。 它还显示 GPU 活动和标记的事件。 您可以放大以查看更多详细信息,或要查看的时间更长的时间间隔。 您还可以选择要获取有关类别、 开始时间、 工期和调用堆栈状态的详细信息图表上的点。
在时间线图中,一种颜色表示在给定时间的线程的状态。 例如,执行的绿色段、 红色段阻止同步的、 黄色段被抢占,和紫色段从事设备 I/O。 您可以使用此视图可以检查工作或并发任务并行循环中涉及的线程之间的平衡。 如果一个线程需要很长时间才能完成比其他,工作可能是不均衡的。 您可以使用此信息来提高程序的性能将工作在线程之间更均匀地分发。
如果只有一个线程为绿色 (执行) 的某个位置时,该应用程序可能并未考虑充分利用并发的系统上。 您可以使用时间线图形检查线程之间阻塞的临时关系之间的从属关系和线程。 要重新安排线程,选择一个线程然后在工具栏上,选择向上或向下按钮。 若要隐藏线程,将其选中,然后选择隐藏线程按钮。
配置文件报表
时间线下图是一个时间线的配置文件,并对各种报告有选项卡的窗格。 线程视图更改时,报告自动更新。 大跟踪,计算更新时可能无法使用报表窗格。 每个报告有两个筛选器调整: 减少和仅我的代码的噪音。 使用降噪筛选出调用树项很少的时间花费在其中。 默认筛选器值 2 %,但您可以调整它从 0%到 99%。 若要查看仅为您的代码的调用树,请选择仅我的代码复选框。 要查看所有的调用树,请清除它。
配置文件报表
此选项卡显示与活动的图例中的项的报告。 若要显示报告,请选择一个项。
当前堆栈
此选项卡将显示在时间线图形中的线程段上的选定点的调用堆栈。 若要只显示活动与程序相关的调用堆栈中被裁剪。
取消阻塞堆栈
若要查看哪个线程取消阻止选定的线程,并确定哪一行代码,在选择 Unblocking 堆栈选项卡。
执行
执行报告应用程序所花费的时间的视图中还显示在执行。
要查找的执行时所用的代码行,请展开调用关系树,然后,在调用树项的快捷菜单,选择查看源文件 或 查看调用网站。 查看源定位执行的代码行。 查看调用站点查找调用执行的代码行的代码行。 如果只存在一个调用站点,将突出显示其代码行。 如果存在多个调用站点,您可以选择在对话框中,会显示,然后选择所的需转至源代码按钮突出显示的调用站点代码。 它通常是最有用来查找具有最大实例和 / 或最大时,调用站点。 有关更多信息,请参见执行配置文件报表。
同步
同步报表显示负责同步块的调用,以及每个调用堆栈的合计阻塞时间。 有关更多信息,请参见同步时间。
I/O
I/O 报表显示负责 I/O 块的调用,以及每个调用堆栈的合计阻塞时间。 有关更多信息,请参见 I/O 时间(“线程”视图)。
Sleep
睡眠报表显示负责睡眠块的调用,以及每个调用堆栈的合计阻塞时间。 有关更多信息,请参见睡眠时间。
内存管理
内存管理报告显示调用内存管理块发生的位置,以及阻止的每个调用堆栈的聚合。 此信息可用于标识具有过多的寻呼或垃圾回收问题的区域。 有关更多信息,请参见内存管理时间。
抢占
抢占报表显示实例的系统上的进程被抢占当前进程和个别的替换当前进程中的线程的线程。 您可以使用此信息来识别的进程和线程最负责抢占的。 有关更多信息,请参见抢占时间。
UI 处理
UI 处理报表显示负责 UI 处理块的调用,以及每个调用堆栈的合计阻塞时间。 有关更多信息,请参见 UI 处理时间。
每线程摘要
此选项卡显示的总时间的用颜色标记的列的视图每个线程在运行中所用,阻塞,I/O 和其他状态。 各列的底部加有标签。 调整时间线图形中的缩放级别,此选项卡将自动更新。 在某些缩放级别,可能无法显示某些线程。 在这种情况下,在右侧显示省略号。 如果未显示所需的线程,则可以隐藏其他线程。 有关更多信息,请参见“每线程摘要”报告。
磁盘操作
此选项卡中显示哪些进程和线程所涉及的磁盘 I/O 的当前进程,它们涉及的 (例如,已加载的 Dll),哪些文件读取的字节数和其他信息。 您可以使用此报告可以评估时间花在执行期间,访问文件,尤其是当您的进程似乎是输入输出量。 有关更多信息,请参见磁盘操作报告(线程视图)。