chill()を呼び出した後にタイムスタンプが増加するのにvtimestampとwalltimestampが増加しないのはなぜですか?

chill()を呼び出した後にタイムスタンプが増加するのにvtimestampとwalltimestampが増加しないのはなぜですか?

chill()DTraceアクションブロックを呼び出すと、timestamp変数は増加しますがvtimestampsumが増加しない理由を理解しようとしますwalltimestamp

timestamp以下は、呼び出し後の増加を示す例ですchill()

# dtrace -w -c true -n 'pid$target:::entry {self->t = $1; chill(1); printf("%d\n", $1 - self->t);}' timestamp
dtrace: description 'pid$target:::entry ' matched 3082 probes
dtrace: allowing destructive actions
dtrace: pid 6734 has exited
CPU     ID                    FUNCTION:NAME
  5  83475          _r_debug_postinit:entry 11258

  5  85771                     atexit:entry 2218

  5  86468              __libc_atexit:entry 491

  5  86428                       exit:entry 441

  5  85397    __cxa_thread_call_dtors:entry 441

  5  86213             __cxa_finalize:entry 447

  5  86213             __cxa_finalize:entry 565

  5  83470            _rtld_addr_phdr:entry 454

  5  86213             __cxa_finalize:entry 431

  5  83470            _rtld_addr_phdr:entry 1645

  5  84405                      _exit:entry 432

同じスクリプトを実行しますがwalltimestamp(またはvtimestamp)を使用すると、カウンタが増加しないことがわかります。

# dtrace -w -c true -n 'pid$target:::entry {self->t = $1; chill(1); printf("%d\n", $1 - self->t);}' walltimestamp
dtrace: description 'pid$target:::entry ' matched 3082 probes
dtrace: allowing destructive actions
dtrace: pid 6707 has exited
CPU     ID                    FUNCTION:NAME
  4  83475          _r_debug_postinit:entry 0

  4  85771                     atexit:entry 0

  4  86468              __libc_atexit:entry 0

  4  86428                       exit:entry 0

  4  85397    __cxa_thread_call_dtors:entry 0

  4  86213             __cxa_finalize:entry 0

  4  86213             __cxa_finalize:entry 0

  4  83470            _rtld_addr_phdr:entry 0

  4  86213             __cxa_finalize:entry 0

  4  83470            _rtld_addr_phdr:entry 0

  4  84405                      _exit:entry 0

これは、DTraceコードを実行しても増加しないため理解できますが、ここでは動作をvtimestamp理解していません。walltimestamp

amd64でFreeBSD 13.1-RELEASE-p1を実行しています。

答え1

明らかにこれはDTraceのバグです。明らかに、実装はchill()変数のキャッシュされた値のみを無効にしますtimestampが、forの実装はそうではありません。walltimestampこれは間違っています。

回答をいただいたMark Johnstonに感謝します。FreeBSD DTraceメーリングリスト

関連情報