Oracle® Solaris Studio 12.4:性能分析器教程

退出打印视图

更新时间: 2014 年 12 月
 
 

使用同步跟踪比较两个实验

在本节中将比较两个实验。使用用于记录事件的校准的阈值记录 test.1.er 实验,使用零阈值记录 test.2.er 实验以包括 mttest 程序执行中发生的所有同步事件。

  1. 单击工具栏上的 "Compare Experiments"(比较实验)按钮 image: ,或选择 "File"(文件)> "Compare Experiments"(比较实验)。

    此时将打开 "Compare Experiments"(比较实验)对话框。

    image:“Compare Experiments“(比较实验)对话框。

    您已经打开的 test.1.er 实验列在 "Baseline"(基线)组中。必须创建实验列表以便与 "Comparison Group"(比较组)面板中的基线实验进行比较。

    在本教程中,每个组仅包含一个实验。

  2. 单击 "Comparison Group"(比较组)旁边的 "Add"(添加)按钮,然后在 "Select Experiment"(选择实验)对话框中打开 test.2.er 实验。

  3. 在 "Compare Experiments"(比较实验)对话框中单击 "OK"(确定)以装入第二个实验。

    此时将重新打开 "Overview"(概述)页面,其中包括两个实验的数据。

    image:“Overview“(概述)屏幕

    "Clock Profiling"(时钟分析)度量对每个度量显示两个带颜色的条,每个实验对应一个条。test.1.er "Baseline"(基线)实验中的数据位于上面。

    如果在数据条上移动鼠标光标,弹出文本显示 "Baseline"(基线)和 "Comparison"(比较)组的数据以及它们之间的差异(以数值和百分比表示)。

    请注意,在第二个实验中,记录的 "Total CPU Time"(CPU 总时间)稍微大些,但是有超过两倍的 "Sync Wait Counts"(同步等待计数)以及大约多于 10% 的 "Sync Wait Time"(同步等待时间)。

  4. 切换到 "Functions"(函数)视图,单击标签为 "test.1.er Incl.Sync Wait Count"(test.1.er 包含同步等待计数)的列标题,从而按第一个实验中的事件数对函数进行排序。

    image:按第一个实验中的事件数对函数进行排序

    函数 pthread_mutex_lock() 显示 test1.ertest.2.er 之间在事件数上的第二大差异。最大差异位于 do_work() 中,其包括来自其直接或间接调用的所有函数的差异,包括 pthread_mutex_lock()


    提示  -  如果更改比较格式,甚至可以更容易地比较差异。单击工具栏中的 "Settings"(按钮),选择 "Formats"(格式)标签,然后为 "Comparison Style"(比较样式)选择 "Deltas"(增量)。应用更改后,test.2.er 的度量显示为与 test.1.er 中的度量的 + 或 - 差异。在前面的屏幕抓图中,选择的 pthread_mutex_lock() 函数在 "test.2.er Incl Sync Wait Count"(test.2.er 包含同步等待计数)列中将显示 +88。
  5. 选择 "Callers-Callees"(调用方-被调用方)视图。

    image:“Callers-Callees“(调用方-被调用方)屏幕

    查看其中两个调用方,lock_global()lock_local()

    lock_global() 函数在 test.1.er 中对 "Attributed Sync Wait Count"(归属同步等待计数)显示 3 个事件,但是在 test.2.er 中显示 4 个事件。原因是获取 test.1.er 中的锁的第一个线程未停止,所以未记录该事件。在 test.2.er 实验中,阈值设置为记录所有事件,所以甚至记录了第一个线程的锁获取。

    同样,在第一个实验中,lock_local() 没有记录的事件,因为不存在锁争用。第二个实验中有 4 个事件,即使总的来说它们具有极小的延迟。