跳过导航链接 | |
退出打印视图 | |
![]() |
DTrace 用户指南 Oracle Solaris 10 8/11 Information Library (简体中文) |
本节描述了不与任何 DTrace 使用者关联的跟踪。在没有可以运行的 DTrace 使用者进程情况下才使用匿名跟踪。只有超级用户可以创建匿名跟踪。在任意时刻,只能存在一个匿名启用。
要创建匿名启用,请使用 -A 选项以及指定了所需的探测器、谓词、操作和选项的 dtrace 命令。dtrace 命令向 dtrace(7D) 驱动程序的配置文件添加一系列表示您的请求的驱动程序属性。该配置文件通常是 /kernel/drv/dtrace.conf。在加载 dtrace 驱动程序时,该驱动程序读取这些属性。该驱动程序将使用指定的操作启用指定的探测器,并创建与新的启用关联的匿名状态。dtrace 驱动程序通常是随充当 dtrace 提供器的任何驱动程序按需加载的。为允许在引导期间进行跟踪,必须尽早装入 dtrace 驱动程序。dtrace 命令向 /etc/system 添加必需的 forceload 语句(请参见 system(4) 以了解每个必需的 dtrace 提供器和 dtrace 驱动程序)。
当系统引导时,dtrace 驱动程序发送一条消息,指明已成功处理配置文件。匿名启用可以设置正常使用 dtrace 命令期间可用的任何选项。
要删除匿名启用,请在不指定任何探测器描述的情况下为 dtrace 指定 -A 选项。
当计算机已完全引导后,您可以通过指定 dtrace 命令及 -a 选项来声明现有的匿名状态。缺省情况下,-a 选项会声明匿名状态并处理现有数据,然后继续运行。要使用匿名状态并退出,请添加 -e 选项。
如果已从内核使用了匿名状态,则匿名状态无法替换。如果您试图声明不存在的匿名跟踪状态,则 dtrace 命令会生成类似于下例的一条消息:
dtrace: could not enable tracing: No anonymous tracing state
如果发生删除或错误,dtrace 将在声明匿名状态时生成相应的消息。对于匿名和非匿名状态,删除消息和错误消息相同。
以下示例说明了 iprb(7D) 模块中每个探测器的匿名 DTrace 启用:
# dtrace -A -m iprb dtrace: saved anonymous enabling in /kernel/drv/dtrace.conf dtrace: added forceload directives to /etc/system dtrace: run update_drv(1M) or reboot to enable changes # reboot
重新引导后,dtrace 驱动程序将在控制台上输出一条消息,指出驱动程序正在启用指定的探测器:
... Copyright 1983-2003 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. NOTICE: enabling probe 0 (:iprb::) NOTICE: enabling probe 1 (dtrace:::ERROR) configuring IPv4 interfaces: iprb0. ...
在重新引导计算机后,指定 dtrace 命令及 -a 选项将使用匿名状态:
# dtrace -a CPU ID FUNCTION:NAME 0 22954 _init:entry 0 22955 _init:return 0 22800 iprbprobe:entry 0 22934 iprb_get_dev_type:entry 0 22935 iprb_get_dev_type:return 0 22801 iprbprobe:return 0 22802 iprbattach:entry 0 22874 iprb_getprop:entry 0 22875 iprb_getprop:return 0 22934 iprb_get_dev_type:entry 0 22935 iprb_get_dev_type:return 0 22870 iprb_self_test:entry 0 22871 iprb_self_test:return 0 22958 iprb_hard_reset:entry 0 22959 iprb_hard_reset:return 0 22862 iprb_get_eeprom_size:entry 0 22826 iprb_shiftout:entry 0 22828 iprb_raiseclock:entry 0 22829 iprb_raiseclock:return ...
以下示例侧重于通过 iprbattach() 调用的那些函数。
fbt::iprbattach:entry { self->trace = 1; } fbt::: /self->trace/ {} fbt::iprbattach:return { self->trace = 0; }
运行以下命令清除驱动器配置文件中先前的设置,安装新的匿名跟踪请求,然后重新引导:
# dtrace -AFs iprb.d dtrace: cleaned up old anonymous enabling in /kernel/drv/dtrace.conf dtrace: cleaned up forceload directives in /etc/system dtrace: saved anonymous enabling in /kernel/drv/dtrace.conf dtrace: added forceload directives to /etc/system dtrace: run update_drv(1M) or reboot to enable changes # reboot
重新引导后,dtrace 驱动程序将在控制台上输出一条不同的消息,指示有些许差别的启用:
... Copyright 1983-2003 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. NOTICE: enabling probe 0 (fbt::iprbattach:entry) NOTICE: enabling probe 1 (fbt:::) NOTICE: enabling probe 2 (fbt::iprbattach:return) NOTICE: enabling probe 3 (dtrace:::ERROR) configuring IPv4 interfaces: iprb0. ...
在计算机完成引导后,采用 -a 和 -e 选项运行 dtrace 命令来使用匿名数据,然后退出。
# dtrace -ae CPU FUNCTION 0 -> iprbattach 0 -> gld_mac_alloc 0 -> kmem_zalloc 0 -> kmem_cache_alloc 0 -> kmem_cache_alloc_debug 0 -> verify_and_copy_pattern 0 <- verify_and_copy_pattern 0 -> tsc_gethrtime 0 <- tsc_gethrtime 0 -> getpcstack 0 <- getpcstack 0 -> kmem_log_enter 0 <- kmem_log_enter 0 <- kmem_cache_alloc_debug 0 <- kmem_cache_alloc 0 <- kmem_zalloc 0 <- gld_mac_alloc 0 -> kmem_zalloc 0 -> kmem_alloc 0 -> vmem_alloc 0 -> highbit 0 <- highbit 0 -> lowbit 0 <- lowbit 0 -> vmem_xalloc 0 -> highbit 0 <- highbit 0 -> lowbit 0 <- lowbit 0 -> segkmem_alloc 0 -> segkmem_xalloc 0 -> vmem_alloc 0 -> highbit 0 <- highbit 0 -> lowbit 0 <- lowbit 0 -> vmem_seg_alloc 0 -> highbit 0 <- highbit 0 -> highbit 0 <- highbit 0 -> vmem_seg_create ...