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.  内核分析

索引

编译和链接程序

无论程序使用何种编译器选项进行编译,您都可以为该程序收集和分析数据,但有些选项会影响能够在性能分析器中收集或查看的内容。以下几个小节介绍了在编译和链接程序时应考虑的问题。

源代码信息

查看带注释的“源代码”和“反汇编”分析中的源代码以及“行”分析中的源代码行,就必须使用 -g 编译器选项(对于 C++ 来说为用于启用前端内联的 -g0)编译感兴趣的源文件,以生成调试符号信息。调试符号信息的格式可以是 DWARF2 或 stabs,由 -xdebugformat=(dwarf|stabs) 指定。缺省的调试格式是 dwarf

要准备带有调试信息的编译对象来允许数据空间分析(当前仅适用于 SPARC 处理器),请通过指定 -xhwcprof 和任何级别的优化来进行编译。(目前,这种功能在未经过优化的情况下无法使用。要查看“数据对象”分析中的程序数据对象,也要添加 -g(对于 C++ 来说为 -g0)以获取全部符号信息。

对于一些 SPARC 处理器上的精确硬件计数器的内存空间分析,不需要使用 -xhwcprof 编译和优化。有关更多信息,请参见数据空间分析和内存空间分析

用 DWARF 格式的调试符号生成的可执行文件和库会自动包括每个要素目标文件调试符号的副本。如果用 stabs 格式的调试符号生成的可执行文件和库是通过 -xs 选项(该选项将 stabs 符号保留在各个目标文件及可执行文件中)进行链接的,那么所生成的可执行文件和库中也会包括每个要素目标文件调试符号的副本。当您需要移动或删除目标文件时,包括这些信息尤为重要。使用可执行文件和库本身中的所有调试符号,可以更容易地将实验和与程序相关的文件移至新位置。

静态链接

编译程序时,必须使用 -dn-Bstatic 编译器选项打开动态链接。如果试图收集完全静态链接的程序的数据,则收集器会列显一条错误消息并且不收集数据。出现此错误的原因在于,当您运行收集器时,该收集器库也会像其他库一样动态装入。

请不要静态链接任何系统库。如果您执行了静态链接,则可能无法收集任何种类的跟踪数据。另外,请不要链接到收集器库 libcollector.so

共享对象处理

通常,collect 命令会为目标地址空间中的所有共享对象收集数据,而不管这些对象是在初始库列表中,还是使用 dlopen() 显式装入。但是,在某些情况下不会分析某些共享对象:

编译时优化

如果使用在某一级别打开的优化来编译程序,编译器就可以重新安排执行顺序,这样就无须严格按照程序中行的顺序来执行程序。性能分析器可以分析在优化后的代码中收集的实验,但它在反汇编级别所显示的数据通常很难与初始源代码行相关联。此外,如果编译器执行尾部调用优化,则调用序列可能与预期的序列不同。有关更多信息,请参见尾部调用优化

编译 Java 程序

javac 命令编译 Java 程序无需任何特殊操作。