Oracle Solaris Studio 12.4 Man Pages

Exit Print View

Updated: January 2015
 
 

er_kernel(1)

Name

er_kernel - 生成有关 Solaris 内核的分析器实验

Synopsis

er_kernel args [load-command]

可用性

可用性

支持 DTrace 的 Solaris 系统

Description

er_kernel 命令可使用随某些 Solaris 发行版提供的 DTrace 功能从 Solaris 内核生成实验。可以使用 GUI 程序 (analyzer) 或命令行版本 (er_print) 检查数据。

er_kernel 命令只能由具有 DTrace 特权的用户使用。

如果指定了 -F 参数,er_kernel 也会收集有关与作为 -F 参数提供的模式匹配的进程的用户级数据。有关更多信息,请参见下文的“系统范围分析”部分。

如果指定了用于提供负载的可选命令,er_kernel 将派生,子进程将休眠一段静止期,然后执行命令来提供负载。当子进程退出时,er_kernel 再继续一段静止期,然后退出。静止期的持续时间可通过 -q 参数指定。负载命令按指定启动,可能是一个命令或 shell 脚本。如果它是一个脚本,则该脚本在退出之前,应等待它所产生的任何命令终止,否则实验可能会过早终止。

如果指定了可选的 -t 参数,er_kernel 将根据 -t 参数收集数据,然后退出。

如果均未指定,er_kernel 将一直运行直到终止。始终可以通过 ctrl-C (SIGINT) 或者使用 kill 命令并将 SIGINT、SIGQUIT 或 SIGTERM 发送到 er_kernel 进程来终止该实用程序。

参数

参数

如果不带参数调用,将输出用法消息。

如果调用时指定了 -h 但未指定其他任何参数,并且如果处理器支持硬件计数器溢出分析,将输出两个包含硬件计数器相关信息的列表。第一个列表包含“别名”硬件计数器;第二个列表包含原始硬件计数器。有关更多详细信息,请参见 collect (1) 手册页中的 "Hardware Counter Overflow Profiling"(硬件计数器溢出分析)部分。

-p option

收集基于时钟的分析。option 的允许值包括:

off

关闭基于时钟的分析

on

打开缺省分析间隔大约为 10 毫秒的基于时钟的分析

lo[w]

打开分析间隔大约为 100 毫秒(低精度)的基于时钟的分析

hi[gh]

打开分析间隔大约为 1 毫秒(高精度)的基于时钟的分析

n

打开基于时钟的分析并将分析间隔设置为 n

值可能是整数或浮点数,带有后缀 u 指定微秒,或带有后缀 m 指定毫秒。如果不使用后缀,则假定值以毫秒为单位。

如果值小于系统时钟分析最小值,则将其设置为最小值;如果值不是时钟分析精度的倍数,则向下舍入为最接近的时钟分析精度倍数。如果值超过时钟分析最大值,将会报告错误。如果为负数,将报告错误。如果为零,将关闭时钟分析。

用于获取数据的 DTrace 分析提供程序只能用于整数值(每秒时钟周期数)。指定的值将转换为整数速率,然后转换回所用实际速率对应的时间。

如果未指定任何显式 -p off 参数,缺省情况下将启用基于时钟的分析。如果指定了 -h high-h low,以在高频率或低频率下请求该芯片的缺省计数器集,则缺省的时钟分析也将设置为高频率或低频率;将遵从显式 -p 参数。

-h option

收集硬件计数器溢出分析(使用 DTrace cpc 提供程序)。该选项针对 collect(1) 命令指定。硬件计数器分析在 Oracle Solaris 11 之前的系统上不可用。如果芯片上的溢出机制使内核能够指明哪个计数器发生溢出,则可以使用芯片提供的任意多个计数器;否则,只能指定一个计数器。

数据空间分析在运行 DTrace 1.8 或更高版本的 SPARC 系统上受支持,且仅适用于精确计数器。如果在不支持数据空间分析的系统上请求,将忽略数据空间标志,但是实验仍会运行。

系统硬件计数器机制可以由多个进程用于执行用户分析,但如果任何用户进程、cputrack 或其他 er_kernel 正在使用该机制,则不能用于内核分析。在这种情况下,er_kernel 将报告 "HW counters are temporarily unavailable; they may be in use for system profiling"(硬件计数器暂时不可用,它们可能正用于进行系统分析)。

-x option

控制是否记录空闲 CPU 的分析事件。option 的允许值包括:

on

不记录来自空闲 CPU 的分析事件。(缺省值)。

off

记录来自空闲 CPU 的分析事件。

-F option

提供系统级分析,包括内核和应用程序。控制是否应该记录用户级进程的分析数据。option 的允许值包括:

off

不记录关于任何用户级进程的实验;仅记录关于内核的实验(缺省值)。

on| all

记录关于 er_kernel 用户具有相应权限的所有用户级进程以及内核的实验

=<regexp>

记录关于其名称或 PID 与正则表达式匹配的用户级进程的实验。有关为用户级进程记录的数据的更多信息,请参见下面的“系统范围分析”。请注意,对于 er_kernel/proc 文件系统读取的进程名称,操作系统会将其截断,最多留下 15 个字符(外加零字节)。应该指定模式与这样截断的进程名称匹配。

-t duration

收集指定时长的数据。duration 可以是单个数字(后跟 m 指定分钟或后跟 s 指定秒(缺省值)),也可以是以 - 符号分隔的两个这样的数字。如果指定一个数字,将从开始运行时开始收集数据直到给定时间;如果指定两个数字,将从第一个时间开始收集数据,到第二个时间结束。如果第二个时间为零,将开始收集数据,直到该程序运行结束。如果指定了两个非零数字,则第一个数字必须小于第二个数字。

-q duration

在运行指定负载前后强制 duration(秒)长的静止期。缺省持续时间为 3 秒。如果未指定任何负载,则忽略静止期。

-S interval

以指定的间隔(秒)收集定期样例。如果 interval 为零,则不收集定期样例。缺省情况下,启用间隔为 1 秒的定期抽样功能。样例中记录的数据是 er_kernel 进程的数据,包括时间戳和内核的执行统计信息,以及各种其他数据。样例是数据中的标记,可用于过滤。

-C comment

将注释(单个标记或带引号的字符串)放到实验中。最多可提供十条注释。

-o experiment_name

使用 experiment_name 作为要记录的实验的名称。experiment_name 字符串必须以 .er 字符串结尾;否则,将报告错误且不运行实验。

如果未指定 -o,请选择 stem.n.er 格式的名称,其中 stem 是字符串,n 是数字。如果提供了 -g 参数,请使用组名称中 .erg 后缀前面显示的字符串作为 stem 前缀;如果未提供 -g 参数,请将 stem 前缀设置为字符串 ktest

如果没有使用 stem.n.er 格式指定名称,而正在使用给定名称,将输出一条错误消息并退出。如果名称采用该格式且名称正在使用,将在对应于未在使用的第一个可用 n 值的名称下记录实验;如果名称发生更改,将发出警告。

-l signal

每当有给定信号传递到 er_kernel 进程时记录抽样点。

-y signal[,r]

使用 signal 控制数据的记录。无论何时将指定的信号传递到 er_kernel 进程,都会在已暂停(不记录任何数据)状态与已恢复(记录数据)状态之间切换。如果指定了可选的 ,r 标志,er_kernel 将在已恢复状态启动,否则它将在已暂停状态启动。该选项不影响抽样点的记录。

-d directory_name

将实验放到目录 directory_name 中。如果未提供任何目录,则将其记录到当前工作目录中。

-g group_name

将实验视为实验组 group_name 的一部分。group_name 字符串必须以 .erg 字符串结尾;否则将报告错误并退出。

-L size

将记录的分析和跟踪数据量限制为 size MB。该限制适用于所有分析数据量和跟踪数据量之和,但不适用于抽样点。该限制只是近似值,可以被超出。当达到该限制时,将终止实验。size 的允许值包括:

unlimited
none

不对实验强加大小限制。

n

施加 n MB 的限制;n 必须为大于零的正数。

对记录的数据量没有缺省限制。

-A option

控制是否将运行期间使用的内核模块复制到记录的实验中。option 的允许值包括:

on

归档内核模块并将其复制到实验中。

src

复制并归档所有源文件以及可在实验中找到的 .anc 文件。

usedsrc

复制并归档所有源文件以及在记录的数据中引用且可在实验中找到的 .anc 文件。

off

不将内核模块或源文件归档到实验中。

要将实验复制到不同的计算机上或者从不同的计算机上读取它们,用户应该指定 -A on

-A 的缺省设置为 on

-n

模拟运行:不收集数据,但输出要运行的实验的所有详细信息。打开 -v

-V

输出当前版本。不再检查任何参数,也不执行进一步的处理。

-v

输出有关正在运行的实验的详细信息,包括当前的版本。

系统范围分析

系统范围分析

如果使用 -F 参数指定在 er_kernel 实验期间检测到的以下用户进程,将创建每个此类用户进程的子实验。子实验命名如下:

_process-name_PID_process-pid.1.er

仅当在用户模式下或系统模式下针对跟踪的进程发生事件时,用户进程子实验才会记录数据,并且将记录用户调用堆栈。用户子实验与用户模式 collect 实验几乎完全相同。对于时钟分析,它们仅记录用户 CPU 时间和系统 CPU 时间;不记录等待时间。

仅当运行 er_kernel 的用户有权打开和读取要跟踪的进程的 /proc 条目时,才会跟踪进程。请注意,从 /proc 读取时,进程名称被截断为 15 个字符(外加零字节),所以应该指定模式与截断的名称匹配。

er_kernel 在全局区域中运行时,不可访问且无法跟踪其他区域中的用户进程。用户模式时间的伪函数的名称将显示为 noname-open

collect 不同,er_kernel 数据收集功能不收集有关 OpenMP 运行时行为的信息,也不收集有关 Java 运行时行为和 Java 调用堆栈的信息。此类用户级子实验与在计算机模式下显示的 collect 实验类似。它们没有在 collect 实验中显示的用户模式的数据。

记录的数据

记录的数据

时钟分析

对于在内核创始实验中记录的时钟分析事件,时钟分析内核实验支持一个标有“内核 CPU 时间”(度量名称 kcpu)的度量。数据的记录以每个 CPU 为基础,CPU 数量记录为 CPU,内核运行所代表的进程的 PID 记录为 LWPID,内核线程 ID 记录为原始数据中的线程。

内核创始实验将包含 kcpu 度量的数据。当 CPU 在系统模式下或空闲时,将记录内核调用堆栈。当 CPU 处于用户模式时,显示一个双帧的调用堆栈,上面的帧名为:

<USER_MODE>

调用一个伪函数,该函数名为:

<process-name_PID_process-pid>

对应于正在运行的用户进程。在内核实验中,不记录用户进程的任何实际调用堆栈信息。

如果使用 -F 指定分析用户级进程,则跟踪的每个进程的子实验都将包含用户 CPU 时间和系统 CPU 时间度量以及用户级调用堆栈的数据。它们不包含任何等待时间的数据。

硬件计数器分析

硬件计数器分析以指定计数器的度量进行记录,使用创始实验中针对时钟分析实验的上述系统调用堆栈,以及用户进程子实验中的用户调用堆栈。

对于创始内核实验,硬件计数器度量名称将以 K_ 开头。对于用户进程子实验,硬件计数器度量名称已经指定,如同在 collect 实验中一样。

对于数据空间分析,创始内核实验将具有 CPU 在系统模式下时所发生事件的数据引用。CPU 在用户模式下或空闲模式下时发生的事件不会显示任何记录的数据地址。

如果使用 -F 指定跟踪用户进程,则将记录跟踪的每个进程的子实验,如同未指定数据空间分析一样。(DTrace 提供程序只提供内核数据引用的地址。)

分析统计信息

分析统计信息

当内核分析终止时,er_kernel 将针对驱动程序编写若干行统计信息,包括运行时错误的任何计数。

运行时错误

运行时错误

er_kernel 正在运行时,它将处理 DTrace 事件。DTrace 有时会报告各种错误。其中最常见的是地址无效,该错误似乎是无害的。将对这些错误进行计数,而且如果设置了详细模式,还会将其记录到 stderr 中。

DTrace 完成的堆栈展开可能不正确,尤其是对于 x86/amd64 代码,当进程到函数的尾声时可能会遗漏当前叶帧的调用方。这些错误可能发生在内核堆栈或用户堆栈中。

DTrace 的系统设置

DTrace 的系统设置

通常,DTrace 驱动程序的使用仅限于用户 root。要以一般用户 username 的身份使用它,该用户必须具有分配的特权且在组 sys 中。

要给予用户相应的特权,请将以下行:

username::::defaultpriv=basic,dtrace_kernel,dtrace_proc,dtrace_user

添加到文件 /etc/user_attr 中。

要将用户放到组 sys 中,请将 username 添加到文件 /etc/group 中的 sys 行。

做出这些更改后,您必须注销,然后重新登录。

限制

限制

er_kernel 分析在非全局区域中不起作用。在 x86 OVM 下运行的来宾操作系统中,er_kernel 分析处于禁用状态,以避免触发 OVM 错误 13094572,该错误会导致重新引导。er_kernel 硬件计数器分析在早于 Solaris 11 的 Solaris 系统上不起作用。

See also

analyzer (1) 、 collect (1) 、 er_archive (1) 、 er_cp (1) 、 er_export (1) 、 er_mv (1) 、 er_print (1) 、 er_rm (1) 、 er_src (1) 、 dtrace (1M)

性能分析器手册