qemu/include/sysemu/cpu-timers.h
<<
>>
Prefs
   1/*
   2 * CPU timers state API
   3 *
   4 * Copyright 2020 SUSE LLC
   5 *
   6 * This work is licensed under the terms of the GNU GPL, version 2 or later.
   7 * See the COPYING file in the top-level directory.
   8 *
   9 */
  10#ifndef SYSEMU_CPU_TIMERS_H
  11#define SYSEMU_CPU_TIMERS_H
  12
  13#include "qemu/timer.h"
  14
  15/* init the whole cpu timers API, including icount, ticks, and cpu_throttle */
  16void cpu_timers_init(void);
  17
  18/* icount - Instruction Counter API */
  19
  20/*
  21 * icount enablement state:
  22 *
  23 * 0 = Disabled - Do not count executed instructions.
  24 * 1 = Enabled - Fixed conversion of insn to ns via "shift" option
  25 * 2 = Enabled - Runtime adaptive algorithm to compute shift
  26 */
  27#ifdef CONFIG_TCG
  28extern int use_icount;
  29#define icount_enabled() (use_icount)
  30#else
  31#define icount_enabled() 0
  32#endif
  33
  34/*
  35 * Update the icount with the executed instructions. Called by
  36 * cpus-tcg vCPU thread so the main-loop can see time has moved forward.
  37 */
  38void icount_update(CPUState *cpu);
  39
  40/* get raw icount value */
  41int64_t icount_get_raw(void);
  42
  43/* return the virtual CPU time in ns, based on the instruction counter. */
  44int64_t icount_get(void);
  45/*
  46 * convert an instruction counter value to ns, based on the icount shift.
  47 * This shift is set as a fixed value with the icount "shift" option
  48 * (precise mode), or it is constantly approximated and corrected at
  49 * runtime in adaptive mode.
  50 */
  51int64_t icount_to_ns(int64_t icount);
  52
  53/* configure the icount options, including "shift" */
  54void icount_configure(QemuOpts *opts, Error **errp);
  55
  56/* used by tcg vcpu thread to calc icount budget */
  57int64_t icount_round(int64_t count);
  58
  59/* if the CPUs are idle, start accounting real time to virtual clock. */
  60void icount_start_warp_timer(void);
  61void icount_account_warp_timer(void);
  62
  63/*
  64 * CPU Ticks and Clock
  65 */
  66
  67/* Caller must hold BQL */
  68void cpu_enable_ticks(void);
  69/* Caller must hold BQL */
  70void cpu_disable_ticks(void);
  71
  72/*
  73 * return the time elapsed in VM between vm_start and vm_stop.
  74 * cpu_get_ticks() uses units of the host CPU cycle counter.
  75 */
  76int64_t cpu_get_ticks(void);
  77
  78/*
  79 * Returns the monotonic time elapsed in VM, i.e.,
  80 * the time between vm_start and vm_stop
  81 */
  82int64_t cpu_get_clock(void);
  83
  84void qemu_timer_notify_cb(void *opaque, QEMUClockType type);
  85
  86/* get the VIRTUAL clock and VM elapsed ticks via the cpus accel interface */
  87int64_t cpus_get_virtual_clock(void);
  88int64_t cpus_get_elapsed_ticks(void);
  89
  90#endif /* SYSEMU_CPU_TIMERS_H */
  91