262013
 

DTrace 框架提供了称为探测器的检测点。DTrace 用户可以使用探测器来记录和显示与内核或用户进程相关的信息。每个 DTrace 探测器都是由一个特定的行为激活的。此探测器激活称为触发。例如,在进入任意内核函数时触发的一个探测器。此探测器示例可以显示以下信息:

  • 传递给函数的任意参数
  • 内核中任意的全局变量
  • 一个指示函数调用时间的时间戳
  • 一个指示负责调用函数的代码部分的栈跟踪
  • 调用函数时正在运行的进程
  • 负责执行函数调用的线程

触发探测器时,您可以指定 DTrace 要采取的具体操作。DTrace 操作通常记录系统行为需关注的方面,例如时间戳或函数参数。

探测器是由提供器来执行的。探测器提供器是使得给定探测器能够被触发的一个内核模块。例如,函数边界跟踪提供器 fbt 为每个内核模块中的几乎所有函数提供进入和返回探测器。

DTrace 具有重要的数据管理功能。使用这些功能,DTrace 用户能够删改探测器所报告的数据,避免与生成和过滤不需要的数据相关的开销。DTrace 还提供了用于在引导过程中进行跟踪和从内核故障转储检索数据的机制。DTrace 中的所有检测都是动态的。探测器是在其被使用时独立启用的,非活动探测器不提供已检测的代码。

DTrace 使用者 是与 DTrace 框架交互的任意进程。虽然 dtrace(1M) 是主要的 DTrace 使用者,但也存在其他使用者。这些其他使用者主要包括现有实用程序的新版本,例如 lockstat(1M)。DTrace 框架对并发使用者的数目没有限制。

可以使用以 D 语言(结构与 C 语言类似)编写的脚本来修改 DTrace 的行为。D 语言提供对内核 C 类型与内核静态和内核全局变量的访问。D 语言支持 ANSI C 运算符。