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.


Fixes to time code to allow virtualization to hide costs of running in the
[palacios.git] / Kconfig
diff --git a/Kconfig b/Kconfig
index 8050708..0eb9692 100644 (file)
--- a/Kconfig
+++ b/Kconfig
@@ -2,6 +2,43 @@ mainmenu "Palacios VMM Configuration"
 
 menu "Target Configuration"
 
+
+choice
+       prompt "Target Host OS"
+       default KITTEN
+
+config KITTEN
+       bool "Kitten OS"
+       select BUILT_IN_STDLIB
+       select BUILT_IN_STRCASECMP
+       select BUILT_IN_ATOI
+       select ALIGNED_PG_ALLOC
+       select MULTITHREAD_OS
+       help
+         This enables the necesary options to compile Palacios with Kitten
+
+config LINUX
+       bool "Linux 2.6"
+       select BUILT_IN_STDLIB
+       select BUILT_IN_ATOI
+       select FILE
+       help
+         This enables the necessary options to compile Palacios with Linux 2.6
+          Currently, this is in development, and only 2.6.32 is verified to work
+
+config MINIX
+       bool "MINIX 3"
+       help
+         This enables the necesary options to compile Palacios with Kitten
+
+config OTHER_OS
+       bool "Other OS"
+       help 
+         Choose this to compile Palacios for a Generic Host OS
+          (Formerly GeekOS)
+
+endchoice
+
 config CRAY_XT
         bool "Red Storm (Cray XT3/XT4)"
         help
@@ -20,216 +57,210 @@ config VMX
          Compile with support for Intel VMX
 
 
-config SOCKET
-       bool "Include Network Socket Support"
-       default y
-       help 
-         Enable networking support in Palacios
-
+config DEBUG_INFO
+       bool "Compile with Debug Information"
+       default n
+       help
+         Compiles the Palacios library with debugging symbols
 
 
-config PROFILE_VMM
-       bool "Enable VMM profiling support"
+menu "Supported host OS features"
+      
+config MULTITHREAD_OS
+       bool "Host support for  multiple threads"
        default y
        help 
-         Enable the profiling framework in Palacios
-         -----
-         This is a framwork that allows components of palacios to record 
-         information that is periodically reported to the log file 
+         Select this if your OS supports multiple threads of execution. This will enable features in Palacios 
+         to require the creation of additional execution threads.
 
-config INSTRUMENT_VMM
-       bool "Enable VMM instrumentation"
-       default n
-       help 
-         Enable the instrumentation framework
-         --------
-         This is much heavier weight than profiling
 
-config EXPERIMENTAL
-       bool "Enable Experimental options"
+config ALIGNED_PG_ALLOC
+       bool "Host support for aligned page allocations"
        default n
        help 
-         This allows the selection of experimental features. This includes incomplete or unreviewed code. 
-         Only enable this feature if you are working on the features in question. 
-         IMPORTANT: Non-experimental code MUST NOT use, require, or rely on experimental features. 
-         Any code that violates this will be immediately deleted without warning. 
-         -- 
-         The purpose of this option is to allow features under development to be committed to the mainline
-         to more easily track changes and provide access to multiple developers
+         Select this if your OS supports allocating memory pages using an alignment. This is required 
+         if you want Palacios to run with large page table pages. 
 
-config BUILT_IN_STDLIB
-       bool "Enable Built in versions of stdlib functions"
-       default n
+config MAX_CPUS
+       int "Maximum number of cpus"
+       range 1 255
+       default "16"
        help 
-         Not all host OSes provide link targets for stdlib functions
-         Palacios provides internal implementations of these functions, that you can select from this list
+         Specifies the maximum number of hardware CPUs supported by the OS
+         For uniprocessor environments, set this to 1
 
-config BUILT_IN_MEMSET
-       bool "memset()"
+config FILE
+       bool "Host Support for file operations"
        default n
-       depends on BUILT_IN_STDLIB
-       help 
-         This enables Palacios' internal implementation of memset
+       help
+         Select this if your host OS supports file operatoins and you want Palacios to be able to use them.
 
 
-config BUILT_IN_MEMCPY
-       bool "memcpy()"
+config CONSOLE
+       bool "Host Support for VM console"
        default n
-       depends on BUILT_IN_STDLIB
        help 
-         This enables Palacios' internal implementation of memcpy
+         Select this if you want to forward a guest console interface to some host OS service
 
-config BUILT_IN_MEMCMP
-       bool "memcmp()"
-       default n
-       depends on BUILT_IN_STDLIB
-       help 
-         This enables Palacios' internal implementation of memcmp
+config SOCKET
+        bool "Host support for Network Sockets"
+        default y
+        help
+          Select this if you host OS implements a socket API that is available to Palacios. This is required
+          to support the internal networking features of Palacios.
 
-config BUILT_IN_STRLEN
-       bool "strlen()"
-       default n
-       depends on BUILT_IN_STDLIB
-       help 
-         This enables Palacios' internal implementation of strlen
 
-config BUILT_IN_STRNLEN
-       bool "strnlen()"
+config PACKET
+       bool "Host support for Raw Packet Transmision"
+       depends on EXPERIMENTAL
        default n
-       depends on BUILT_IN_STDLIB
        help 
-         This enables Palacios' internal implementation of strnlen
+         Select this if you host OS implements a raw packet network API that is available to Palacios. This is required 
+         to support the internal networking features of Palacios.
 
+endmenu
 
-config BUILT_IN_STRCMP
-       bool "strcmp()"
-       default n
-       depends on BUILT_IN_STDLIB
-       help 
-         This enables Palacios' internal implementation of strcmp
 
-config BUILT_IN_STRNCMP
-       bool "strncmp()"
-       default n
-       depends on BUILT_IN_STDLIB
-       help 
-         This enables Palacios' internal implementation of strncmp
 
-config BUILT_IN_STRCAT
-       bool "strcat()"
+config TELEMETRY
+       bool "Enable VMM telemetry support"
        default n
-       depends on BUILT_IN_STDLIB
        help 
-         This enables Palacios' internal implementation of strcat
+         Enable the telemetry framework in Palacios
+         -----
+         This is a framwork that allows components of palacios to record 
+         information that is periodically reported to the log output.
+         Telemetry is automatically collected for vmexits. Subsystem telemetry 
+         is configured separately
 
-config BUILT_IN_STRNCAT
-       bool "strncat()"
-       default n
-       depends on BUILT_IN_STDLIB
-       help 
-         This enables Palacios' internal implementation of strncat
 
-config BUILT_IN_STRCPY
-       bool "strcpy()"
-       default n
-       depends on BUILT_IN_STDLIB
-       help 
-         This enables Palacios' internal implementation of strcpy
+config SHADOW_PAGING_TELEMETRY
+       bool "Enable Shadow Paging Telemetry"
+       default y
+       depends on TELEMETRY
+       help
+         Enable telemetry information for shadow paging 
+
 
-config BUILT_IN_STRNCPY
-       bool "strncpy()"
-       default n
-       depends on BUILT_IN_STDLIB
-       help 
-         This enables Palacios' internal implementation of strncpy
 
-config BUILT_IN_STRDUP
-       bool "strdup()"
+config EXPERIMENTAL
+       bool "Enable Experimental options"
        default n
-       depends on BUILT_IN_STDLIB
        help 
-         This enables Palacios' internal implementation of strdup
+         This allows the selection of experimental features. This includes incomplete or unreviewed code. 
+         Only enable this feature if you are working on the features in question. 
+         IMPORTANT: Non-experimental code MUST NOT use, require, or rely on experimental features. 
+         Any code that violates this will be immediately deleted without warning. 
+         -- 
+         The purpose of this option is to allow features under development to be committed to the mainline
+         to more easily track changes and provide access to multiple developers
 
+config VNET
+        depends on EXPERIMENTAL
+        bool "Enable Vnet in Palacios"
+        default n
+        help
+          Enable the Vnet in Palacios
 
-config BUILT_IN_ATOI
-       bool "atoi()"
-       default n
-       depends on BUILT_IN_STDLIB
-       help 
-         This enables Palacios' internal implementation of atoi
+config DEBUG_VNET
+        depends on EXPERIMENTAL && VNET
+        bool "Enable Vnet Debug in Palacios"
+        default n
+        help
+          Enable the Vnet debug in Palacios
 
-config BUILT_IN_STRCHR
-       bool "strchr()"
-       default n
-       depends on BUILT_IN_STDLIB
-       help 
-         This enables Palacios' internal implementation of strchr
+config LINUX_VIRTIO_VNET
+        bool "Enable Virtio VNET interface"
+        default n
+        depends on PCI && EXPERIMENTAL && VNET
+        help
+          Enable the Virtio VNET interface
 
-config BUILT_IN_STRRCHR
-       bool "strrchr()"
-       default n
-       depends on BUILT_IN_STDLIB
-       help 
-         This enables Palacios' internal implementation of strrchr
+config DEBUG_LINUX_VIRTIO_VNET
+        bool "Virtio VNET Interface Debugging"
+        default n
+        depends on LINUX_VIRTIO_VNET && DEBUG_ON
+        help
+          Enable debugging for the VNET Virtio interface
 
-config BUILT_IN_STRPBRK
-       bool "strpbrk()"
-       default n
-       depends on BUILT_IN_STDLIB
-       help 
-         This enables Palacios' internal implementation of strpbrk
+endmenu
 
 
-config BUILT_IN_STDIO
-       bool "Enable Built in versions of stdio functions"
-       default n
-       help 
-         Not all host OSes provide link targets for stdio functions
-         Palacios provides internal implementations of these functions, that you can select from this list
+source "Kconfig.stdlibs"
 
 
+menu "Virtual Paging"
 
-config BUILT_IN_SPRINTF
-       bool "sprintf()"
-       default n
-       depends on BUILT_IN_STDIO
+config SHADOW_PAGING
+       bool "Enable shadow paging"
+       default y
        help 
-         This enables Palacios' internal implementation of sprintf
+          Enables shadow paging for virtual machines
 
 
-config BUILT_IN_SNPRINTF
-       bool "snprintf()"
-       default n
-       depends on BUILT_IN_STDIO
+config SHADOW_PAGING_VTLB
+       bool "Virtual TLB"
+       default y
+       depends on SHADOW_PAGING
        help 
-         This enables Palacios' internal implementation of snprintf
+          Enables Virtual TLB implemenation for shadow paging
 
 
-config BUILT_IN_VSPRINTF
-       bool "vsprintf()"
+config DEBUG_SHDW_PG_VTLB
+       bool "Enable VTLB debugging"
        default n
-       depends on BUILT_IN_STDIO
-       help 
-         This enables Palacios' internal implementation of vsprintf
+       depends on SHADOW_PAGING_VTLB
+       help
+         Enables debugging messages for VTLB implementation
 
-config BUILT_IN_VSNPRINTF
-       bool "vsnprintf()"
-       default n
-       depends on BUILT_IN_STDIO
+config SHADOW_PAGING_CACHE1
+       bool "Shadow Page Cache (1)"
+       default y
+       depends on SHADOW_PAGING
        help 
-         This enables Palacios' internal implementation of vsnprintf
+          Enables caching implemenation for shadow paging
 
-config BUILT_IN_VSNRPRINTF
-       bool "vsnrprintf()"
-       default n
-       depends on BUILT_IN_STDIO
-       help 
-         This enables Palacios' internal implementation of vsnrprintf
 
 endmenu
 
 
+menu "Time Management"
 
+config TIME_HIDE_VM_COST
+        bool "Hide VMM Run Cost"
+       default n
+       help
+           Offset guest time from host time sufficiently to hide the cost of
+           running in the virtual machine. This can aid the consistency of
+           time between multiple timers, but can cause the guest to run 
+           slightly slower than the host.
+
+config TIME_HIDE_EXIT_COST
+        bool "Hide VMM Exit Cost"
+       default n
+       depends on TIME_HIDE_VM_COST
+       help
+           Add additional TSC offset to hide VMM exit costs from the guest.
+
+config TIME_EXIT_COST_ADJUST
+       int "Exit cost adjustment for hiding VM exits"
+       default 2000
+       depends on TIME_HIDE_EXIT_COST
+       help
+           Amount to adjust the time to hide the exit cost of fully virtualizing
+          the timestamp counter. Used to hide the cost of fully virtualizing 
+          the TSC for OSes that assume that reading the TSC is inexpensive 
+          (e.g. Linux TSC-based timer calibration).
+
+config TIME_VIRTUALIZE_TSC
+       bool "Fully virtualize guest TSC"
+       default n
+       help
+           Virtualize the processor time stamp counter in the guest, 
+           generally increasing consistency between various time sources 
+           but also potentially making guest time run slower than real time.
+        
+endmenu
 
 menu "Symbiotic Functions"
 
@@ -237,15 +268,38 @@ config SYMBIOTIC
        bool "Enable Symbiotic Functionality"
        default n
        help 
-         Enable Symbiotic components of the VMM
+         Enable Symbiotic components of the VMM. 
+         This includes the SymSpy interface.
 
-
-config SYMBIOTIC_SWAP
-       bool "Symbiotic Swap"
+config SYMCALL
+       bool "Symbiotic upcalls"
        default n
        depends on SYMBIOTIC && EXPERIMENTAL
+       help
+         Enables the Symbiotic upcall interface
+
+config SWAPBYPASS
+       bool "SwapBypass"
+       default n
+       depends on SYMBIOTIC && SYMCALL && EXPERIMENTAL
        help 
-         This enables the symbiotic swap architecture
+         This enables the SwapBypass architecture
+
+config SWAPBYPASS_TELEMETRY
+       bool "Enable SwapBypass Telemetry"
+       default n
+       depends on TELEMETRY && SWAPBYPASS
+       help 
+         Enable the telemetry information for the SwapBypass subsystem
+
+menuconfig SYMMOD 
+       bool "Symbiotic Modules"
+       default n
+       depends on EXPERIMENTAL
+#      depends on SYMBIOTIC
+       help
+         Enable Symbiotic module loading
+
 
 endmenu
 
@@ -269,6 +323,21 @@ config DEBUG_ON
          This turns on debugging support
 
 
+config DEBUG_SVM
+       bool "AMD SVM"
+       default n
+       depends on DEBUG_ON
+       help 
+         This turns on debugging for the AMD SVM-specific code
+
+config DEBUG_VMX
+       bool "Intel VT"
+       default n
+       depends on DEBUG_ON
+       help 
+         This turns on debugging for the Intel VT-specific code
+
+
 config DEBUG_SHADOW_PAGING
        bool "Shadow paging"
        default n
@@ -300,7 +369,12 @@ config DEBUG_INTERRUPTS
        help 
          This turns on debugging for the interrupt system
 
-
+config DEBUG_TIME
+       bool "Timing"
+       default n
+       depends on DEBUG_ON
+       help
+         This turns on debugging of system time virtualization
 
 config DEBUG_IO
        bool "IO"