2 * This file is part of the Palacios Virtual Machine Monitor developed
3 * by the V3VEE Project with funding from the United States National
4 * Science Foundation and the Department of Energy.
6 * The V3VEE Project is a joint project between Northwestern University
7 * and the University of New Mexico. You can find out more at
10 * Copyright (c) 2012, Peter Dinda <pdinda@northwestern.edu>
11 * Copyright (c) 2008, The V3VEE Project <http://www.v3vee.org>
12 * All rights reserved.
14 * Author: Peter Dinda <pdinda@northwestern.edu>
16 * This is free software. You are permitted to use,
17 * redistribute, and modify it as specified in the file "V3VEE_LICENSE".
20 #ifndef __VM_PERFTUNE_H__
21 #define __VM_PERFTUNE_H__
25 #include <palacios/vmm_types.h>
28 struct v3_yield_strategy {
30 V3_YIELD_STRATEGY_GREEDY=0, // always untimed yields
31 V3_YIELD_STRATEGY_FRIENDLY, // always timed yields with the following
32 V3_YIELD_STRATEGY_ADAPTIVE, // switch from untimed to timed after the threshold
35 uint64_t threshold_usec; // the point at which we transiton from untimed to timed yield
36 uint64_t time_usec; // the amount of time for a timed yield call
38 #define V3_DEFAULT_YIELD_STRATEGY V3_YIELD_STRATEGY_FRIENDLY
39 #define V3_DEFAULT_YIELD_THRESHOLD_USEC 100
40 #define V3_DEFAULT_YIELD_TIME_USEC 10000
46 // The idea is that the performance tuning knobs in the system are in the following
47 // structure, which is configured when the VM is created, right after extensions,
48 // using the <perftune/> subtree
50 struct v3_perf_options {
51 struct v3_yield_strategy yield_strategy;
55 int v3_setup_performance_tuning(struct v3_vm_info *vm, v3_cfg_tree_t *cfg);
57 void v3_strategy_driven_yield(struct guest_info *core, uint64_t time_since_last_did_work_usec);
59 uint64_t v3_cycle_diff_in_usec(struct guest_info *core, uint64_t earlier_cycles, uint64_t later_cycles);