diff options
author | Jason J. Herne <jjherne@linux.vnet.ibm.com> | 2015-09-08 13:12:33 -0400 |
---|---|---|
committer | Juan Quintela <quintela@redhat.com> | 2015-09-30 09:42:04 +0200 |
commit | 2adcc85d407c1ab985f5abed808c78dbb84f4773 (patch) | |
tree | cb610b80d3a637771959daa9eb9da7297a07c90f /include/qom | |
parent | 2a6e6e59dfdeb0b98e744eb8f110a236f26a3ea4 (diff) | |
download | qemu-2adcc85d407c1ab985f5abed808c78dbb84f4773.zip qemu-2adcc85d407c1ab985f5abed808c78dbb84f4773.tar.gz qemu-2adcc85d407c1ab985f5abed808c78dbb84f4773.tar.bz2 |
cpu: Provide vcpu throttling interface
Provide a method to throttle guest cpu execution. CPUState is augmented with
timeout controls and throttle start/stop functions. To throttle the guest cpu
the caller simply has to call the throttle set function and provide a percentage
of throttle time.
Signed-off-by: Jason J. Herne <jjherne@linux.vnet.ibm.com>
Reviewed-by: Matthew Rosato <mjrosato@linux.vnet.ibm.com>
Signed-off-by: Juan Quintela <quintela@redhat.com>
Reviewed-by: Juan Quintela <quintela@redhat.com>
Diffstat (limited to 'include/qom')
-rw-r--r-- | include/qom/cpu.h | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/include/qom/cpu.h b/include/qom/cpu.h index 302673d..9405554 100644 --- a/include/qom/cpu.h +++ b/include/qom/cpu.h @@ -321,6 +321,11 @@ struct CPUState { uint32_t can_do_io; int32_t exception_index; /* used by m68k TCG */ + /* Used to keep track of an outstanding cpu throttle thread for migration + * autoconverge + */ + bool throttle_thread_scheduled; + /* Note that this is accessed at the start of every TB via a negative offset from AREG0. Leave this field at the end so as to make the (absolute value) offset as small as possible. This reduces code @@ -565,6 +570,43 @@ CPUState *qemu_get_cpu(int index); */ bool cpu_exists(int64_t id); +/** + * cpu_throttle_set: + * @new_throttle_pct: Percent of sleep time. Valid range is 1 to 99. + * + * Throttles all vcpus by forcing them to sleep for the given percentage of + * time. A throttle_percentage of 25 corresponds to a 75% duty cycle roughly. + * (example: 10ms sleep for every 30ms awake). + * + * cpu_throttle_set can be called as needed to adjust new_throttle_pct. + * Once the throttling starts, it will remain in effect until cpu_throttle_stop + * is called. + */ +void cpu_throttle_set(int new_throttle_pct); + +/** + * cpu_throttle_stop: + * + * Stops the vcpu throttling started by cpu_throttle_set. + */ +void cpu_throttle_stop(void); + +/** + * cpu_throttle_active: + * + * Returns: %true if the vcpus are currently being throttled, %false otherwise. + */ +bool cpu_throttle_active(void); + +/** + * cpu_throttle_get_percentage: + * + * Returns the vcpu throttle percentage. See cpu_throttle_set for details. + * + * Returns: The throttle percentage in range 1 to 99. + */ +int cpu_throttle_get_percentage(void); + #ifndef CONFIG_USER_ONLY typedef void (*CPUInterruptHandler)(CPUState *, int); |