1*b0c3cf94SClaudio Fontana /* 2*b0c3cf94SClaudio Fontana * Copyright (c) 2012 SUSE LINUX Products GmbH 3*b0c3cf94SClaudio Fontana * 4*b0c3cf94SClaudio Fontana * This program is free software; you can redistribute it and/or 5*b0c3cf94SClaudio Fontana * modify it under the terms of the GNU General Public License 6*b0c3cf94SClaudio Fontana * as published by the Free Software Foundation; either version 2 7*b0c3cf94SClaudio Fontana * of the License, or (at your option) any later version. 8*b0c3cf94SClaudio Fontana * 9*b0c3cf94SClaudio Fontana * This program is distributed in the hope that it will be useful, 10*b0c3cf94SClaudio Fontana * but WITHOUT ANY WARRANTY; without even the implied warranty of 11*b0c3cf94SClaudio Fontana * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12*b0c3cf94SClaudio Fontana * GNU General Public License for more details. 13*b0c3cf94SClaudio Fontana * 14*b0c3cf94SClaudio Fontana * You should have received a copy of the GNU General Public License 15*b0c3cf94SClaudio Fontana * along with this program; if not, see 16*b0c3cf94SClaudio Fontana * <http://www.gnu.org/licenses/gpl-2.0.html> 17*b0c3cf94SClaudio Fontana */ 18*b0c3cf94SClaudio Fontana 19*b0c3cf94SClaudio Fontana #ifndef SYSEMU_CPU_THROTTLE_H 20*b0c3cf94SClaudio Fontana #define SYSEMU_CPU_THROTTLE_H 21*b0c3cf94SClaudio Fontana 22*b0c3cf94SClaudio Fontana #include "qemu/timer.h" 23*b0c3cf94SClaudio Fontana 24*b0c3cf94SClaudio Fontana /** 25*b0c3cf94SClaudio Fontana * cpu_throttle_init: 26*b0c3cf94SClaudio Fontana * 27*b0c3cf94SClaudio Fontana * Initialize the CPU throttling API. 28*b0c3cf94SClaudio Fontana */ 29*b0c3cf94SClaudio Fontana void cpu_throttle_init(void); 30*b0c3cf94SClaudio Fontana 31*b0c3cf94SClaudio Fontana /** 32*b0c3cf94SClaudio Fontana * cpu_throttle_set: 33*b0c3cf94SClaudio Fontana * @new_throttle_pct: Percent of sleep time. Valid range is 1 to 99. 34*b0c3cf94SClaudio Fontana * 35*b0c3cf94SClaudio Fontana * Throttles all vcpus by forcing them to sleep for the given percentage of 36*b0c3cf94SClaudio Fontana * time. A throttle_percentage of 25 corresponds to a 75% duty cycle roughly. 37*b0c3cf94SClaudio Fontana * (example: 10ms sleep for every 30ms awake). 38*b0c3cf94SClaudio Fontana * 39*b0c3cf94SClaudio Fontana * cpu_throttle_set can be called as needed to adjust new_throttle_pct. 40*b0c3cf94SClaudio Fontana * Once the throttling starts, it will remain in effect until cpu_throttle_stop 41*b0c3cf94SClaudio Fontana * is called. 42*b0c3cf94SClaudio Fontana */ 43*b0c3cf94SClaudio Fontana void cpu_throttle_set(int new_throttle_pct); 44*b0c3cf94SClaudio Fontana 45*b0c3cf94SClaudio Fontana /** 46*b0c3cf94SClaudio Fontana * cpu_throttle_stop: 47*b0c3cf94SClaudio Fontana * 48*b0c3cf94SClaudio Fontana * Stops the vcpu throttling started by cpu_throttle_set. 49*b0c3cf94SClaudio Fontana */ 50*b0c3cf94SClaudio Fontana void cpu_throttle_stop(void); 51*b0c3cf94SClaudio Fontana 52*b0c3cf94SClaudio Fontana /** 53*b0c3cf94SClaudio Fontana * cpu_throttle_active: 54*b0c3cf94SClaudio Fontana * 55*b0c3cf94SClaudio Fontana * Returns: %true if the vcpus are currently being throttled, %false otherwise. 56*b0c3cf94SClaudio Fontana */ 57*b0c3cf94SClaudio Fontana bool cpu_throttle_active(void); 58*b0c3cf94SClaudio Fontana 59*b0c3cf94SClaudio Fontana /** 60*b0c3cf94SClaudio Fontana * cpu_throttle_get_percentage: 61*b0c3cf94SClaudio Fontana * 62*b0c3cf94SClaudio Fontana * Returns the vcpu throttle percentage. See cpu_throttle_set for details. 63*b0c3cf94SClaudio Fontana * 64*b0c3cf94SClaudio Fontana * Returns: The throttle percentage in range 1 to 99. 65*b0c3cf94SClaudio Fontana */ 66*b0c3cf94SClaudio Fontana int cpu_throttle_get_percentage(void); 67*b0c3cf94SClaudio Fontana 68*b0c3cf94SClaudio Fontana #endif /* SYSEMU_CPU_THROTTLE_H */ 69