| TSC(9) | Kernel Developer's Manual (x86) | TSC(9) | 
tsc —
#include <x86/x86/tsc.h>
uint64_t
  
  rdtsc(void);
void
  
  tsc_tc_init(void);
void
  
  tsc_sync_ap(struct
    cpu_info *ci);
void
  
  tsc_sync_bp(struct
    cpu_info *ci);
void
  
  tsc_sync_drift(int64_t
    drift);
Already because of the access method, TSC provides a low-overhead and high-resolution way to obtain CPU timing information. This traditional premise was violated when such factors as system sleep states, CPU “hotplugging”, “hibernation”, and CPU frequency scaling were introduced to the x86 lineage. This was however mainly a short abruption: in many new x86 CPUs the time stamp counter is again invariant with respect to the stability of the clock frequency. Care should be however taken in implementations that rely on this assumption.
rdtsc()rdtsc() function returns the value read from
      RDTSC.tsc_tc_init()tsc_tc_init() function initializes the TSC as
      a timecounter(9).
      The function is called early in the boot process when the processors
      attach.tsc_sync_bp(ci)tsc_sync_bp() function synchronizes the
      counter for the boot processor (BP). The supplied ci
      must refer to the BP itself. The tsc interface
      takes internally care of such issues as out-of-order execution, where
      instructions are not necessarily performed in the order of execution,
      possibly causing a misleading cycle count.tsc_sync_ap(ci)tsc_sync_ap() function synchronize the counter
      for the application processor ci. Interrupts must be
      off at machine-level when the function is called.
    It is necessary to call both
        tsc_sync_ap() and
        tsc_sync_bp() during the boot, but additional
        synchronization may be required also during runtime. As an example, the
        TSC needs to be synchronized for all processors when the system resumes
        from an acpi(4) sleep
        state.
tsc_sync_drift(drift)tsc_sync_drift() function records
      drift, measured in clock cycles. This is called when
      the APs attach.| February 17, 2017 | NetBSD 9.4 |