Solaris 动态跟踪指南

chill()

void chill(int nanoseconds)

chill() 操作将导致 DTrace 显示指定的纳秒数。chill() 主要用于查找可能与计时相关的问题。例如,您可以使用此操作打开竞争情况窗口,或者使定期事件相互之间同步或异步。由于处于 DTrace 探测器上下文中时禁止中断,因此使用任何 chill() 都将引起中断延迟、调度延迟和分发延迟。因此,chill() 可能会导致意外的系统影响,不应毫无限制地使用。由于系统活动依赖于定期的中断处理,如果在任何给定 CPU 的每一秒间隔内,chill() 操作需要的时间超过 500 毫秒,DTrace 将拒绝执行。如果超过最大 chill() 间隔,DTrace 将报告非法的操作错误,如下例所示:


# dtrace -w -n syscall::open:entry'{chill(500000001)}'
dtrace: allowing destructive actions
dtrace: description 'syscall::open:entry' matched 1 probe
dtrace: 57 errors
CPU     ID                    FUNCTION:NAME
dtrace: error on enabled probe ID 1 (ID 14: syscall::open:entry): \
  illegal operation in action #1

即使时间跨越多个 chill() 调用或者单个探测器的多个 DTrace 使用者,仍将会强制执行此限制。例如,以下命令将会生成相同的错误:


# dtrace -w -n syscall::open:entry'{chill(250000000); chill(250000001);}'