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.


Configuration of global performance parameters
[palacios.git] / palacios / include / palacios / vmm_perftune.h
diff --git a/palacios/include/palacios/vmm_perftune.h b/palacios/include/palacios/vmm_perftune.h
new file mode 100644 (file)
index 0000000..0a60d6c
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+ * This file is part of the Palacios Virtual Machine Monitor developed
+ * by the V3VEE Project with funding from the United States National 
+ * Science Foundation and the Department of Energy.  
+ *
+ * The V3VEE Project is a joint project between Northwestern University
+ * and the University of New Mexico.  You can find out more at 
+ * http://www.v3vee.org
+ *
+ * Copyright (c) 2012, Peter Dinda <pdinda@northwestern.edu> 
+ * Copyright (c) 2008, The V3VEE Project <http://www.v3vee.org> 
+ * All rights reserved.
+ *
+ * Author: Peter Dinda <pdinda@northwestern.edu>
+ *
+ * This is free software.  You are permitted to use,
+ * redistribute, and modify it as specified in the file "V3VEE_LICENSE".
+ */
+
+#ifndef __VM_PERFTUNE_H__
+#define __VM_PERFTUNE_H__
+
+#ifdef __V3VEE__
+
+#include <palacios/vmm_types.h>
+
+
+struct v3_yield_strategy {
+    enum {
+       V3_YIELD_STRATEGY_GREEDY=0,     // always untimed yields  
+       V3_YIELD_STRATEGY_FRIENDLY,     // always timed yields with the following
+       V3_YIELD_STRATEGY_ADAPTIVE,     // switch from untimed to timed after the threshold
+    }         strategy;
+
+    uint64_t  threshold_usec;   // the point at which we transiton from untimed to timed yield
+    uint64_t  time_usec;        // the amount of time for a timed yield call
+
+#define V3_DEFAULT_YIELD_STRATEGY       V3_YIELD_STRATEGY_GREEDY
+#define V3_DEFAULT_YIELD_THRESHOLD_USEC 100
+#define V3_DEFAULT_YIELD_TIME_USEC      1000
+};
+
+
+
+//
+//  The idea is that the performance tuning knobs in the system are in the following 
+//  structure, which is configured when the VM is created, right after extensions,
+//  using the <perftune/> subtree
+//
+struct v3_perf_options {
+    struct v3_yield_strategy yield_strategy;
+};
+
+
+int      v3_setup_performance_tuning(struct v3_vm_info *vm, v3_cfg_tree_t *cfg);
+
+void     v3_strategy_driven_yield(struct guest_info *core, uint64_t time_since_last_did_work_usec);
+
+uint64_t v3_cycle_diff_in_usec(struct guest_info *core, uint64_t earlier_cycles, uint64_t later_cycles);
+
+
+#endif
+
+#endif