L4Re – L4 Runtime Environment
rdtsc.h File Reference

time stamp counter related functions More...

#include <l4/sys/compiler.h>
#include <l4/sys/l4int.h>
#include <l4/sys/kip.h>
+ Include dependency graph for rdtsc.h:

Go to the source code of this file.

Macros

#define L4_TSC_INIT_AUTO   0
 Automatic init.
 
#define L4_TSC_INIT_KERNEL   1
 Initialized by kernel.
 
#define L4_TSC_INIT_CALIBRATE   2
 Initialized by user-level.
 

Functions

l4_cpu_time_t l4_rdtsc (void)
 Read current value of CPU-internal time stamp counter. More...
 
l4_uint32_t l4_rdtsc_32 (void)
 Read the lest significant 32 bit of the TSC. More...
 
l4_uint64_t l4_rdpmc (int ecx)
 Return current value of CPU-internal performance measurement counter. More...
 
l4_uint32_t l4_rdpmc_32 (int ecx)
 Return the least significant 32 bit of a performance counter. More...
 
l4_uint64_t l4_tsc_to_ns (l4_cpu_time_t tsc)
 Convert time stamp to ns value. More...
 
l4_uint64_t l4_tsc_to_us (l4_cpu_time_t tsc)
 Convert time stamp into micro seconds value. More...
 
void l4_tsc_to_s_and_ns (l4_cpu_time_t tsc, l4_uint32_t *s, l4_uint32_t *ns)
 Convert time stamp to s.ns value. More...
 
l4_cpu_time_t l4_ns_to_tsc (l4_uint64_t ns)
 Convert nano seconds into CPU ticks. More...
 
void l4_busy_wait_ns (l4_uint64_t ns)
 Wait busy for a small amount of time. More...
 
void l4_busy_wait_us (l4_uint64_t us)
 Wait busy for a small amount of time. More...
 
l4_uint32_t l4_calibrate_tsc (l4_kernel_info_t *kip)
 Calibrate scalers for time stamp calculations. More...
 
l4_uint32_t l4_tsc_init (int constraint, l4_kernel_info_t *kip)
 Initialize scaler for TSC calibrations. More...
 
l4_uint32_t l4_get_hz (void)
 Get CPU frequency in Hz. More...
 

Detailed Description

time stamp counter related functions

Author
Frank Mehnert fm3@o.nosp@m.s.in.nosp@m.f.tu-.nosp@m.dres.nosp@m.den.d.nosp@m.e

Definition in file rdtsc.h.

Function Documentation

◆ l4_busy_wait_ns()

void l4_busy_wait_ns ( l4_uint64_t  ns)
inline

Wait busy for a small amount of time.

Parameters
nsnano seconds to wait
Attention
Not intended for any use!

Definition at line 345 of file rdtsc.h.

References l4_ns_to_tsc(), and l4_rdtsc().

+ Here is the call graph for this function:

◆ l4_busy_wait_us()

void l4_busy_wait_us ( l4_uint64_t  us)
inline

Wait busy for a small amount of time.

Parameters
usmicro seconds to wait
Attention
Not intendet for any use!

Definition at line 355 of file rdtsc.h.

References l4_ns_to_tsc(), and l4_rdtsc().

+ Here is the call graph for this function:

◆ l4_calibrate_tsc()

l4_uint32_t l4_calibrate_tsc ( l4_kernel_info_t kip)
inline

Calibrate scalers for time stamp calculations.

Determine some scalers to be able to convert between real time and CPU ticks. This test uses channel 0 of the PIT (i8254) or the kernel KIP, depending on availability. Just calls l4_tsc_init(L4_TSC_INIT_AUTO).

Definition at line 183 of file rdtsc.h.

References l4_tsc_init(), and L4_TSC_INIT_AUTO.

+ Here is the call graph for this function:

◆ l4_get_hz()

l4_uint32_t l4_get_hz ( void  )

Get CPU frequency in Hz.

Returns
frequency in Hz

◆ l4_ns_to_tsc()

l4_cpu_time_t l4_ns_to_tsc ( l4_uint64_t  ns)
inline

Convert nano seconds into CPU ticks.

Parameters
nsnano seconds
Returns
CPU ticks

Definition at line 321 of file rdtsc.h.

◆ l4_rdpmc()

l4_uint64_t l4_rdpmc ( int  ecx)
inline

Return current value of CPU-internal performance measurement counter.

Parameters
ecxECX value for the rdpmc instruction. For details see the Intel IA-32 Architectures Software Developer's Manual.
Returns
64-bit PMC

Definition at line 222 of file rdtsc.h.

◆ l4_rdpmc_32()

l4_uint32_t l4_rdpmc_32 ( int  ecx)
inline

Return the least significant 32 bit of a performance counter.

Useful for smaller differences, needs less cycles.

Definition at line 239 of file rdtsc.h.

◆ l4_rdtsc()

l4_cpu_time_t l4_rdtsc ( void  )
inline

Read current value of CPU-internal time stamp counter.

Returns
64-bit time stamp

Definition at line 189 of file rdtsc.h.

◆ l4_rdtsc_32()

l4_uint32_t l4_rdtsc_32 ( void  )
inline

Read the lest significant 32 bit of the TSC.

Useful for smaller differences, needs less cycles.

Definition at line 208 of file rdtsc.h.

◆ l4_tsc_init()

l4_uint32_t l4_tsc_init ( int  constraint,
l4_kernel_info_t kip 
)

Initialize scaler for TSC calibrations.

Initialize the scalers needed by l4_tsc_to_ns()/l4_ns_to_tsc() and so on. Current versions of Fiasco export these scalers from kernel into userland. The programmer may decide whether he allows to use these scalers or if an calibration should be performed.

Parameters
constraintprogrammers constraint:
  • L4_TSC_INIT_AUTO if the kernel exports the scalers then use them. If not, perform calibration using channel 0 of the PIT (i8254). The latter case may lead into short (unpredictable) periods where interrupts are disabled.
  • L4_TSC_INIT_KERNEL depend on retrieving the scalers from kernel. If the scalers are not available, return 0.
  • L4_TSC_INIT_CALIBRATE Ignore possible scalers exported by the scaler, instead insist on calibration using the PIT.
kipKIP pointer
Returns
0 on error (no scalers exported by kernel, calibrating failed ...) otherwise returns (2^32 / (tsc per µsec)). This value has the same semantics as the value returned by the calibrate_delay_loop() function of the Linux kernel.

◆ l4_tsc_to_ns()

l4_uint64_t l4_tsc_to_ns ( l4_cpu_time_t  tsc)
inline

Convert time stamp to ns value.

Parameters
tsctime value in CPU ticks
Returns
time value in ns

Definition at line 253 of file rdtsc.h.

◆ l4_tsc_to_s_and_ns()

void l4_tsc_to_s_and_ns ( l4_cpu_time_t  tsc,
l4_uint32_t s,
l4_uint32_t ns 
)
inline

Convert time stamp to s.ns value.

Parameters
tsctime value in CPU ticks
Return values
sseconds
nsnano seconds

Definition at line 299 of file rdtsc.h.

◆ l4_tsc_to_us()

l4_uint64_t l4_tsc_to_us ( l4_cpu_time_t  tsc)
inline

Convert time stamp into micro seconds value.

Parameters
tsctime value in CPU ticks
Returns
time value in micro seconds

Definition at line 277 of file rdtsc.h.