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