JavaScript is required to for searching.
跳过导航链接
退出打印视图
Oracle Solaris Studio 12.3:性能分析器     Oracle Solaris Studio 12.3 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

1.  性能分析器概述

2.  性能数据

3.  收集性能数据

编译和链接程序

源代码信息

静态链接

共享对象处理

编译时优化

编译 Java 程序

为数据收集和分析准备程序

使用动态分配的内存

使用系统库

使用信号处理程序

使用 setuidsetgid

数据收集的程序控制

C 和 C++ 接口

Fortran 接口

Java 接口

C、C++、Fortran 和 Java API 函数

动态函数和模块

collector_func_load()

collector_func_unload()

数据收集的限制

基于时钟的分析的限制

时钟分析中的运行时失真和扩大

收集跟踪数据的限制

跟踪过程中的运行时失真和扩大

硬件计数器溢出分析的限制

硬件计数器溢出分析中的运行时失真和扩大

后续进程中数据收集的限制

OpenMP 分析的限制

Java 分析的限制

用 Java 编程语言所编写的应用程序的运行时性能失真和扩大

数据的存储位置

实验名称

实验组

子孙进程的实验

MPI 程序的实验

内核和用户进程上的实验

移动实验

估计存储要求

收集数据

使用 collect 命令收集数据

数据收集选项

-p option

-h counter_definition_1...[, counter_definition_n]

-s option

-H option

-M option

-m option

-S option

-c option

-I directory

-N library_name

-r option

实验控制选项

-F option

-j option

-J java_argument

-l signal

-t duration

-x

-y signal [ ,r]

输出选项

-o experiment_name

-d directory-name

-g group-name

-A option

-L size

-O file

其他选项

-P process_id

-C comment

-n

-R

-V

-v

使用 collect 实用程序从正在运行的进程中收集数据

使用 collect 实用程序从正在运行的进程中收集数据

使用 dbx collector 子命令收集数据

dbx 运行收集器:

数据收集子命令

profile option

hwprofile option

synctrace option

heaptrace option

tha option

sample option

dbxsample { on | off }

实验控制子命令

disable

enable

pause

resume

sample record name

输出子命令

archive mode

limit value

store option

信息子命令

show

status

在 Oracle Solaris 平台上使用 dbx 从正在运行的进程中收集数据

从不受 dbx 控制的正在运行的进程中收集数据

从正在运行的程序中收集跟踪数据

从 MPI 程序收集数据

对 MPI 运行 collect 命令

存储 MPI 实验

从脚本收集数据

collectppgsz 一起使用

4.  性能分析器工具

5.  er_print 命令行性能分析工具

6.  了解性能分析器及其数据

7.  了解带注释的源代码和反汇编数据

8.  操作实验

9.  内核分析

索引

数据收集的限制

本节描述了数据收集的限制,这些限制是由硬件、操作系统、程序的运行方式或收集器本身造成的。

对同时收集不同类型的数据来说,没有任何限制:您可以在收集某种数据类型的同时收集除计数数据以外的任何其他数据类型。

该收集器最多可支持 16,000 个用户线程。其他线程中的数据将被放弃,并生成收集器错误。要支持更多线程,请将 SP_COLLECTOR_NUMTHREADS 环境变量设置为更大的数字。

缺省情况下,该收集器收集深度最多为 256 帧的堆栈。要支持较深的堆栈,请将 SP_COLLECTOR_STACKBUFSZ 环境变量设置为更大的数字。

基于时钟的分析的限制

用于分析的分析间隔最小值和时钟精度取决于特定的操作环境。最大值设置为 1 秒。分析间隔值将向下舍入到最接近的时钟精度的整数倍。可以通过键入不带其他参数的 collect -h 命令来查找最小值和最大值以及时钟精度。

在 Linux 系统上,多线程应用程序的时钟分析所报告的线程数据可能不准确。内核并不总是按指定的间隔将分析信号传送到每个线程;有时,信号传送到了错误的线程。如果可用,使用周期计数器进行的硬件计数器分析将提供更准确的线程数据。

时钟分析中的运行时失真和扩大

基于时钟的分析记录当 SIGPROF 信号传递到目标时的数据。这将导致在处理该信号和展开调用堆栈时产生扩大。调用堆栈越深,信号越频繁,扩大越显著。在一定程度上,基于时钟的分析表现出一些失真,这是由程序中那些执行最深堆栈部分的显著扩大而导致的。

请尽可能不要将缺省值设置为一个精确的毫秒数,而是将其设置为稍大于或稍小于某个精确数(例如,10.007 毫秒或 0.997 毫秒),以免与系统时钟关联,从而避免数据失真。在 SPARC 平台上,可以按照同样的方式来设置定制值(在 Linux 平台上不能设置定制值)。

收集跟踪数据的限制

只有在已预装入收集器库 libcollector.so 的情况下,才可以从已在运行的程序中收集任何种类的跟踪数据。有关更多信息,请参见从正在运行的程序中收集跟踪数据

跟踪过程中的运行时失真和扩大

跟踪数据使运行与被跟踪事件的数量成比例地扩大。如果完成了基于时钟的分析,则跟踪事件所引起的扩大将导致时钟数据失真。

硬件计数器溢出分析的限制

硬件计数器溢出分析存在多种限制:

硬件计数器溢出分析中的运行时失真和扩大

硬件计数器溢出分析记录当 SIGEMT 信号(在 Solaris 平台上)或 SIGIO 信号(在 Linux 平台上)传递到目标时的数据。这将导致在处理该信号和展开调用堆栈时产生扩大。与基于时钟的分析不同的是,对于某些硬件计数器,程序的不同部分可能会比其他部分更快速地生成事件并显示在该部分代码中的扩大。程序中快速生成这类事件的任何部分都可能会显著失真。类似地,某些事件可能会在一个线程中与其他线程不成比例地生成。

后续进程中数据收集的限制

可以在某些限制下在后续进程中收集数据。

如果要在收集器所跟踪的所有后续进程中收集数据,就必须使用带有下列选项之一的 collect 命令:

有关 -F 选项的更多信息,请参见实验控制选项

OpenMP 分析的限制

在执行程序期间收集 OpenMP 数据开销可能很大。可以通过设置 SP_COLLECTOR_NO_OMP 环境变量来压低开销。如果这样做,程序执行时间将显著缩短,但是将看不到自从属线程向上传播到调用方并最终传播到 main() 的数据,而在未设置该变量时通常情况下将能看到这些数据。

在此发行版中,OpenMP 3.0 的新收集器在缺省情况下是启用的。它可以分析使用显式任务的程序。只有在修补版本的 libmtsk.so 可用时,才可以使用该新收集器分析使用早期的编译器生成的程序。如果尚未安装此修补版本,可以通过设置 SP_COLLECTOR_OLDOMP 环境变量来将数据收集切换至使用旧收集器。

OpenMP 分析功能仅对使用 Oracle Solaris Studio 编译器编译的应用程序可用,因为它取决于 Oracle Solaris Studio 编译器运行时。对于使用 GNU 编译器编译的应用程序,仅显示机器级别的调用堆栈。

Java 分析的限制

可以在下列限制下在 Java 程序中收集数据:

用 Java 编程语言所编写的应用程序的运行时性能失真和扩大

Java 分析功能使用的 Java 虚拟机工具接口 (Java Virtual Machine Tool Interface, JVMTI) 可能会导致运行的失真和扩大。

对于基于时钟的分析和硬件计数器溢出分析,数据收集进程会对 JVM 软件进行各种调用,并使用信号处理程序处理分析事件。这些例程的开销和将实验写入磁盘的代价将扩大 Java 程序的运行时。这种扩大通常小于 10%。