In DTrace, why does timestamp increase after a call to chill() but vtimestamp and walltimestamp do not?

From: Mateusz Piotrowski <0mp_at_FreeBSD.org>
Date: Mon, 21 Nov 2022 17:19:16 UTC
Hello all,

I'd like to understand why calling chill() in a DTrace action block increases the timestampvariable, but not vtimestamp and walltimestamp.
Here's an example showing timestamp increasing after a call to 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

If we run the same script but use walltimestamp (or vtimestamp), we'll see the counter did not increase:

        # 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

This is understandable for vtimestamp, as it does not increase when executing DTrace code, but I don't understand walltimestamp's behavior here.

I'm running FreeBSD 13.1-RELEASE-p1 here on amd64.

Best,
Mateusz