Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


4346374f3cfa4d84bb98865ff5311b0f9ee8de37
[palacios.git] / palacios / include / palacios / vmm_perftune.h
1 /*
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.  
5  *
6  * The V3VEE Project is a joint project between Northwestern University
7  * and the University of New Mexico.  You can find out more at 
8  * http://www.v3vee.org
9  *
10  * Copyright (c) 2012, Peter Dinda <pdinda@northwestern.edu> 
11  * Copyright (c) 2008, The V3VEE Project <http://www.v3vee.org> 
12  * All rights reserved.
13  *
14  * Author: Peter Dinda <pdinda@northwestern.edu>
15  *
16  * This is free software.  You are permitted to use,
17  * redistribute, and modify it as specified in the file "V3VEE_LICENSE".
18  */
19
20 #ifndef __VM_PERFTUNE_H__
21 #define __VM_PERFTUNE_H__
22
23 #ifdef __V3VEE__
24
25 #include <palacios/vmm_types.h>
26
27
28 struct v3_yield_strategy {
29     enum {
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
33     }         strategy;
34
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
37
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
41 };
42
43
44
45 //
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
49 //
50 struct v3_perf_options {
51     struct v3_yield_strategy yield_strategy;
52 };
53
54
55 int      v3_setup_performance_tuning(struct v3_vm_info *vm, v3_cfg_tree_t *cfg);
56
57 void     v3_strategy_driven_yield(struct guest_info *core, uint64_t time_since_last_did_work_usec);
58
59 uint64_t v3_cycle_diff_in_usec(struct guest_info *core, uint64_t earlier_cycles, uint64_t later_cycles);
60
61
62 #endif
63
64 #endif