Oracle Solaris Studio 12.4 Man Pages

Exit Print View

Updated: January 2015
 
 

libcollector(3)

Name

libcollector - 性能工具收集器库的 API

Synopsis

C 和 C++ API

 #include "collectorAPI.h" ld ... -lcollectorAPI(对于 C 编译,还必须添加 -L <lib-path> 和 -R <lib-path> 以指定在何处搜索 lib- collectorAPI.so;对于 C++ 和 Fortran 编译,不需要 -L 和 -R。)或者 #include "libcollector.h"(仅用于在 Solaris 系统上实现向后兼容性)
 void collector_sample(char *name); void collector_pause(void); void collector_resume(void); void collector_thread_pause(pthread_t tid); [deprecated] void collector_thread_resume(pthread_t tid); [deprecated] void collector_terminate_expt(void); void collector_func_load(char *name, char *alias, char *sourcename, void *vaddr, int size, int lntsize, Lineno *lntable); void collector_func_unload(void *vaddr); 注意:函数 collector_thread_pause()collector_thread_resume() 在 Linux 系统上不可用,已过时,将在将来的发行版中在所有系统上删除。

Fortran API

 include "libfcollector.h" collector_sample(string) character*(*) string collector_pause() collector_resume() collector_terminate_expt() 

Java(TM) API

 import com.sun.forte.st.collector.CollectorAPI CollectorAPI.sample(String name); CollectorAPI.pause(); CollectorAPI.resume(); CollectorAPI.threadPause(Thread thread); [deprecated] CollectorAPI.threadResume(Thread thread); [deprecated] CollectorAPI.terminate(); 

Description

共享对象 libcollector.so 用于收集性能数据,通常由 collect 命令使用 LD_PRELOAD 装入,或者在启用了收集器的情况下由 dbx 装入。不应将程序与 -lcollector 链接。

可以通过两种方式来访问 C 和 C++ 接口,一种是包括 collectorAPI.h 并与 -lcollectorAPI(包含用于检查底层 libcollector.so API 函数是否存在的实际函数)链接,另一种是包括 libcollector.h(包含用于检查底层 libcollector.so API 函数是否存在的宏)。

第一种方式要求与 API 库链接,在所有情况下均适用,不过要求在运行程序的系统上安装 API 库 (libcollectorAPI.so)。

当用在主可执行文件中且数据收集在程序启动的同时开始时,第二种方式才适用。当使用 dbx 连接到进程或从进程使用 dlopen 装入的共享库中使用时,并非总是适用。提供这种方式只是为了在 Solaris 系统上向后兼容。

在任意一种情况下,仅当正在收集实验时,调用才起作用。

Fortran API libfcollector.h 文件定义了库的 Fortran 接口。要使用该库,必须使用 -lcollectorAPI 链接应用程序。(还提供了该库的替代名称 -lfcollector,目的在于实现向后兼容性。除动态函数、线程暂停和恢复调用等功能外,Fortran API 提供了与 C 和 C++ API 相同的功能。

Java(TM) API 文件定义了从 Java 代码访问的方法。必须使用指向以下位置的类路径调用应用程序:

<installation-directory>/lib/collector.jar

其中 <installation-directory> 是 Solaris Studio 发行版安装到的目录。

如果希望 Java API 可由使用 -Xbootclasspath 装入的类访问,必须将

<installation-directory>/lib/collector.jar

附加到 -Xbootclasspath 参数,并将

<installation-directory>/lib

添加到 sun.boot.library.path 属性。

除动态函数调用外,Java API 包含与 C/C++ API 相同的函数。来自 JVM 的动态函数和 JIT(HotSpot) 编译的代码都不使用 Java API;它们使用 C++ API。

使用除与性能工具来自同一发行版的编译器之外的编译器进行编译或链接时,必须指定包含文件和库(如果需要)的路径。

对于 C 和 C++,使用以下命令编译:

-I<installation-directory>/prod/include/cc

对于 Fortran,使用以下命令编译:

-I<installation-directory>/prod/include/f95

在任一情况下,对于 v8 或 x86 应用程序,使用以下命令链接:

-R<installation-directory>/lib -L<installation-directory>/lib

或者,对于 v9 应用程序,使用以下命令链接:

-R<installation-directory>/lib/v9 -L<installation-directory>/lib/v9

收集器 API 可以在多线程环境中安全地使用。所有这些函数的实现完全包含在 libcollector.so 文件中,其中任何函数都不会对目标进程中的任何例程进行任何回调(但对 libc.solibthread.so 文件中的函数进行回调除外)。

实验控制

实验控制

C、C++ 和 Fortran API 包括一组函数,它们可用于记录实验中的抽样点、在实验中停止和开始记录特定于事件的数据以及关闭实验。必须使用 collect 命令或通过在 dbx 中启用收集器来创建实验。

collector_sample() 函数在被调用时记录抽样点,并以传递给 API 函数的字符串标记样例。如果没有活动的实验,调用将被忽略。目前未使用该标签。

抽样点包含进程(而不是单独的线程)的数据。在多线程应用程序中,如果在 collector_sample() API 函数记录样例时发生另一个调用,则该函数可确保只写入一个样例。

collector_pause() 函数可禁用将特定于事件的数据写入实验。该操作适用于所有线程。如果实验已终止或者没有实验处于活动状态亦或已禁用写入数据,将忽略调用。

collector_resume() 函数可启用将特定于事件的数据写入实验。该操作适用于所有线程。如果实验已终止或者没有实验处于活动状态亦或已启用写入数据,将忽略调用。

在多线程应用程序中,如果在调用 collector_resume() 的同时调用 collector_pause(),会导致将有关记录状态的错误信息写入实验日志文件。

collector_thread_pause() 函数可禁用将来自特定线程的特定于事件的数据写入实验。如果实验已终止或者没有实验处于活动状态亦或已禁用写入该线程的数据,将忽略调用。函数参数是 POSIX 线程 ID,对于 Solaris[tm] 操作环境线程,该 ID 由 thr_self (3C) 返回,对于 POSIX 线程,该 ID 由 pthread_self (3C) 返回。collector_thread_pause() 已过时,将在后续发行版中删除。将在使用该接口的目标上记录的实验中记录警告。

collector_thread_resume() 函数可启用将来自特定线程的特定于事件的数据写入实验。如果实验已终止或者没有实验处于活动状态亦或已启用写入该线程的数据,将忽略调用。函数参数是 POSIX 线程 ID,对于 Solaris 操作环境线程,该 ID 由 thr_self() 返回,对于 POSIX 线程,该 ID 由 pthread_self() 返回。collector_thread_resume() 已过时,将在后续发行版中删除。将在使用该接口的目标上记录的实验中记录警告。

collector_terminate_expt() 函数可终止正在收集其数据的实验。不再收集数据,但程序继续正常运行。如果实验已终止或者没有实验处于活动状态,将忽略调用。

动态函数

动态函数

C 和 C++ API 包括一组函数,它们用于为收集器提供有关动态生成的函数的信息。

collector_func_load() 用于将有关动态生成的函数的信息传递到收集器,以便在实验中进行记录。(Java(TM) HotSpot 虚拟机使用稍有不同的非公共接口。)

name 可为动态构造的函数提供名称。该名称是在性能分析器的 "Functions"(函数)标签中使用的名称。该名称无需遵循函数的任何常规命名约定,可包含嵌入的空格或嵌入的引号字符。

alias 是用于描述函数的任意字符串。它可以是 NULL。它不经过任何方式的解释,可以包含嵌入的空格。它显示在分析器的“摘要”标签中。它可用于指示函数的内容或动态构造函数的原因。

sourcename 提供从中构造函数的源文件的路径。它可以是 NULL。

vaddr 提供函数的装入地址。

size 是以字节为单位的函数大小。

lntsize 对行号表中条目数量的计数。如果未提供行号信息,则计数应为零。

lntable是包含 lntsize 条目的表,其中每个条目都是一对整数。第一个整数是偏移量,第二个整数是行号。在一个条目的偏移量和下一个条目中所给出的偏移量之间的所有指令都归属于在第一个条目中提供的行号。偏移量必须按数字升序列出,但行号的顺序可以是任意的。如果 lntable 为 NULL,则没有可用的函数源代码列表,不过反汇编列表是可用的。

collector_func_unload() 用于通知收集器位于指定地址的动态函数已卸载。

Attributes

 
 ____________________________________________________________
|       ATTRIBUTE TYPE        |       ATTRIBUTE VALUE       |
|_____________________________|_____________________________|
| Stability Level             | Stable                      |
|_____________________________|_____________________________|

      

See also

collect (1) 、 collector (1) 、 er_print (1)

性能分析器手册