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 메일링 리스트.

관련 정보