Solaris 动态跟踪指南

ring 策略

使用 DTrace ring 缓冲区策略,可以跟踪事件直到失败为止。如果重新生成失败需要几个小时或几天时间,您可能希望仅保留最新的数据。在填充某个主体缓冲区后,跟踪将会绕回到第一项,从而覆盖旧的跟踪数据。可以通过将 bufpolicy 选项设置为字符串 ring 来建立环形缓冲区:


# dtrace -s foo.d -x bufpolicy=ring

用于创建环形缓冲区时,dtrace(1M) 将不会显示任何输出,直到终止进程为止。此时,将会使用并处理环形缓冲区。dtrace 按照 CPU 顺序处理每个环形缓冲区。在 CPU 的缓冲区中,跟踪记录按照从旧到新的顺序显示。与使用 switch 缓冲策略一样,不会对不同 CPU 之间的记录进行排序。如果需要这样的排序,应将 timestamp 变量作为跟踪请求的一部分进行跟踪。

以下示例演示了如何使用 #pragma option 指令启用环形缓冲:

#pragma D option bufpolicy=ring
#pragma D option bufsize=16k

syscall:::entry
/execname == $1/
{
	trace(timestamp);
}

syscall::rexit:entry
{
	exit(0);
}