DTrace architecture
(结构图)如下所示:
最上面是DTrace consumer
程序,它们是运行在user-mode
(用户态)的程序,并且使用libdtrace.so
作为和DTrace driver
打交道的接口。平时我们在命令行运行的dtrace
命令其实就是一个DTrace consumer
程序。
libdtrace.so
的一个核心模块就是D
脚本语言的编译器,它会把DTrace
脚本或是命令行翻译成一种byte-code
(字节码)程序。这些程序包含了和probe
(探针)绑定的predicate
(断言)和action
(动作)。DTrace kernel framework
会提供一个类似于虚拟机的环境去运行这些byte-code
程序。
DTrace provider
提供和管理probe
。在D
程序运行时,由DTrace kernel framework
根据程序通知DTrace provider
激活相应的probe
,并且把需要收集的数据返回给DTrace consumer
。D
程序终止时,DTrace provider
会使被激活的probe
失效,恢复到之前的状态。