Solaris 动态跟踪指南

switch 策略

缺省情况下,主体缓冲区具有 switch 缓冲区策略。在此策略下,每个 CPU 的缓冲区都成对分配:一个缓冲区处于活动状态,另一个缓冲区处于非活动状态。在 DTrace 使用者尝试读取缓冲区时,内核首先切换非活动缓冲区和活动缓冲区。缓冲区的切换方式应保证任何窗口中的跟踪数据都不会丢失。切换缓冲区后,新的非活动缓冲区将复制给 DTrace 使用者。此策略确保使用者始终看到前后一致的缓冲区:不能同时跟踪和复制缓冲区。此方法还避免了引入跟踪被暂停或被阻止的窗口。切换和读出缓冲区的速率由使用者通过 switchrate 选项控制。与任何速率选项一样,可以使用任何时间后缀指定 switchrate,但缺省为每秒的速率。有关 switchrate 和其他选项的更多详细信息,请参见第 16 章


注 –

要在用户级别以比缺省的每秒一次更快的速率处理主体缓冲区,请调整 switchrate 的值。当处理主体缓冲区中的对应记录时,系统将处理引发用户级别活动的操作(如 printa()system())。switchrate 指定系统处理此类操作时的速率。


switch 策略下,如果给定的已启用探测器跟踪的数据超出了活动主体缓冲区中的可用空间,则会删除多余数据,并递增每个 CPU 的删除计数。在发生一次或多次删除时,dtrace(1M) 显示一条与以下示例类似的消息:


dtrace: 11 drops on CPU 0

如果给定的记录大于总计缓冲区大小,则不管缓冲区策略是什么,都将删除记录。您可以通过使用 bufsize 选项增加主体缓冲区的大小或者使用 switchrate 选项增加切换速率,来降低或消除删除次数。

switch 策略下,在活动缓冲区外部分配 copyin()copyinstr()alloca() 的临时空间。