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.
Peter Dinda [Mon, 31 Aug 2015 20:44:28 +0000]
Assorted cleanup of memory-related user-level stuff
- adjust guest memory access library to handle truncated
output describing VMs with too many base regions (can happen with cache part)
- adjust memory allocation utility to handle fractional amounts
(tiny chunks are best for cache part) while not allowing
the amounts to be too tiny
- seperate concept of memory block size and base region size
when configuring palacios - cachepart needs a base region
size that is generally smaller than the memory block size
because there are other page allocations (e.g., vmcb bitmasks)
that are larger than one page
- removal of debug cruft in cachepart
Peter Dinda [Mon, 31 Aug 2015 20:34:00 +0000]
Cache partitioning support
This is an experimental feature that allows you to map all
of a VM's page allocations such that they map to a partition
of the last level cache.
The syntax is:
<cachepart
block_size=BLOCK_SIZE
num_colors=NUM_COLORS
min_color=MIN_COLOR
max_color=MAX_COLOR />
The BLOCK_SIZE needs to be one page, and your base region
size for the VM needs to be one page, and your allocations of
physical memory to Palacios needs to support enough one page
allocations to satisfy the constraints and the amount of memory
you are asking for.
NUM_COLORS is your view of how many colors (distinct pages) the
abstract cache has while MIN_COLOR to MAX_COLOR are the range
of cache pages of the abstract cache you want to use. The
system will conform this requested color range on your abstract
cache to a real color range on the actual cache, provided it is
possible.
Note that currently this is implemented (on Linux) by having
the allocator (the buddy allocator) filter prospective free
blocks by their color (the color of their first page). As
a consequence, allocating the VM is slow: you need to allocate a
lot of separate pages (one page per base region), and each page
needs to be the right color.
Peter Dinda [Mon, 31 Aug 2015 20:20:23 +0000]
Implementation of resource control host os interface for Linux
This associates a pointer to a resource control structure with
each thread created by Palacios. If this structure exists, its
contents are then used to control resource allocations. Currently,
the controls are on page allocation: alignment, numa node, and
page allocation filtering. The latter is what cache partitioning
builds on.
This also changes the /proc/v3vee/v3-guest-info-details output
slightly. For a guest with too many cores or memory regions to
display, the output is now truncated in a graceful way.
Peter Dinda [Mon, 31 Aug 2015 20:12:45 +0000]
Resource control extensions to host OS interface
plus changes internal to Palacios to use them
The basic idea here is that on creating a thread, Palacios
can hand the host a resource control structure for that thread.
For resource allocations (e.g., page allocations) made by
that thread, the host can then use the resource control
structure to decide which resources will be provided.
This makes it possible for code in Palacios to be
resource aware despite separation of concerns.
This is used by cache partitioning to make any subsequent
page allocations by a core thread (e.g., in nested or shadow
page fault handling) to obey the cache placement constraints.
Kyle Hale [Mon, 31 Aug 2015 19:51:32 +0000]
multiboot memory header corrections
Peter Dinda [Mon, 3 Aug 2015 22:19:23 +0000]
HVM synchronous operation facility
This lets the ROS and HRT synchronize, via the VMM, on a memory
location for for future synchronization indepedent of the VMM
Peter Dinda [Mon, 3 Aug 2015 01:20:03 +0000]
Removal of debugging code from halt code
Peter Dinda [Sun, 2 Aug 2015 23:45:05 +0000]
Minor fix
Peter Dinda [Sun, 2 Aug 2015 23:31:43 +0000]
HVM capability enhancments
- ROS / HRT boot-time interaction protocol enhancements
- ROS / HRT / VMM run-time interaction protocol
- ROS->HRT resets
- ROS->HRT address space merges
- ROS->HRT sequential and parallel function invocations
- More generalized paging environment build for HRT
including offsets, PIC, etc.
- Refactoring between multiboot and HVM
- More consistent magic numbers
- Descriptor, EFER, and ctrl reg corrections
Peter Dinda [Sun, 2 Aug 2015 23:26:54 +0000]
IDE/ATAPI bug fix - allow sense and other requests to read past
end of transfer length as long as not past the end of the IDE buffer
This is technically correct, and common for modern atapi drivers
talking to old drives
Peter Dinda [Sun, 2 Aug 2015 23:15:28 +0000]
Have unregistered hypercalls fail to guest
Peter Dinda [Sun, 2 Aug 2015 23:14:02 +0000]
Leave a HLT on exception injection
Peter Dinda [Sun, 2 Aug 2015 23:12:33 +0000]
Avoid physical/virtual contiguity assumptions using new guest memory access functions
Peter Dinda [Sun, 2 Aug 2015 23:08:44 +0000]
SVM Bug Fixes and Enhancements (Missing changed file)
Peter Dinda [Sun, 2 Aug 2015 23:03:22 +0000]
Deallocation bug fix in device manager to allow backing out from VM creation failure
if VM creation fails before the device manager is inited, for example on
running out of memory, device manager deinit needs to avoid running
Peter Dinda [Sun, 2 Aug 2015 22:59:49 +0000]
SVM Bug Fixes and Enhancements
- Correct behavior of exit during injection of SW intr / exception / other events (BIG ONE)
- Sanity-checked deallocations
- VMCB, etc, modernized to current versions
- Sanity-check to see if we are on old hardware that doesn't do nrip / SW intr
- Spot interrupt shadows
Peter Dinda [Mon, 13 Jul 2015 21:17:35 +0000]
Cache information interface and implementation for AMD and Intel on Linux
Peter Dinda [Sun, 12 Jul 2015 21:50:03 +0000]
Cleanup of linkage issues for non-Linux hosts
- minor asm fixes to allow -fPIC
- elimination of unneeded global
- conditional compilation of assorted string functions
Peter Dinda [Wed, 1 Jul 2015 22:42:43 +0000]
Cleanup based on cppcheck pass (Core)
Peter Dinda [Wed, 1 Jul 2015 22:38:56 +0000]
Cleanup based on cppcheck pass (Devices and Extensions)
Peter Dinda [Wed, 1 Jul 2015 22:37:52 +0000]
Cleanup based on cppcheck pass (VNET)
Peter Dinda [Wed, 1 Jul 2015 22:36:11 +0000]
Cleanup based on cppcheck pass (GEARS)
Peter Dinda [Wed, 1 Jul 2015 22:35:24 +0000]
Cleanup based on cppcheck pass (GEARS)
Peter Dinda [Wed, 1 Jul 2015 22:33:41 +0000]
Cleanup based on cppcheck pass (Linux module and user)
Peter Dinda [Mon, 29 Jun 2015 18:31:18 +0000]
Debugging output changes to pci_front
Peter Dinda [Mon, 29 Jun 2015 18:26:10 +0000]
Expose HVM state to host + Linux host /proc additions for it
Peter Dinda [Mon, 29 Jun 2015 18:22:05 +0000]
VM Reset Bugfixes
- ROS reset does not clobber HRT
- Missing keyboard reset command added
- More debugging output
William Gross and Akhil Guliani [Tue, 23 Jun 2015 00:40:03 +0000]
Minor cleanup (eliminate dead code, correct errno return)
William Gross and Akhil Guliani [Tue, 23 Jun 2015 00:25:42 +0000]
Device File Virtualization Proof of Concept (Host Shadow + Patches)
This is an implementation of device file virtualization in Palacios
for a Linux Host. Please consult palacios/gears/services/devfile/README
for more information.
Akhil Guliani and William Gross [Tue, 23 Jun 2015 00:12:32 +0000]
Device File Virtualization Proof of Concept (Kernel+Preload)
This is an implementation of device file virtualization in Palacios
for a Linux Host. Please consult palacios/gears/services/devfile/README
for more information.
Peter Dinda [Fri, 19 Jun 2015 15:13:20 +0000]
Minor bugfix
Peter Dinda [Thu, 18 Jun 2015 22:41:21 +0000]
Multiboot and HVM reset integrated into VMX
Peter Dinda [Thu, 18 Jun 2015 22:33:54 +0000]
Expose VM reset capability to Linux and Linux user
Peter Dinda [Thu, 18 Jun 2015 22:26:15 +0000]
VM reset from keyboard controller
Peter Dinda [Thu, 18 Jun 2015 22:20:37 +0000]
VM reset capability
Allows reset of "normal" VM, a multiboot VM, or either the
ROS or HRT components of an HVM
Peter Dinda [Thu, 18 Jun 2015 22:17:30 +0000]
SVM reset capability + integration with multiboot+hvm reset capability
Peter Dinda [Thu, 18 Jun 2015 22:10:56 +0000]
HVM enhancements
- more integration with multiboot
- init scratch stacks for HRT cores
- reset capability
Peter Dinda [Thu, 18 Jun 2015 22:06:07 +0000]
Multiboot enhancements
- enhancements to HRT info block
- clear of BSS (expected by MB kernel)
- actually included header file
- reset capability
Peter Dinda [Thu, 18 Jun 2015 22:02:55 +0000]
Detailed segmentation output from v3_debug
Peter Dinda [Thu, 18 Jun 2015 21:59:05 +0000]
Guest mem gpa/gva memset functions
Peter Dinda [Thu, 18 Jun 2015 21:54:06 +0000]
Factoring of BIOS setup so that it can be reused during reset
Peter Dinda [Thu, 18 Jun 2015 21:47:38 +0000]
Subset barrier support (counting barriers)
Peter Dinda [Thu, 18 Jun 2015 21:41:46 +0000]
SEABIOS updates to support reset and to simplify
Peter Dinda [Thu, 18 Jun 2015 16:19:24 +0000]
Disallow symbiotic functionality unless a compatible bios is in use
The symspy page is by default mapped at a location that will conflict
with a larger bios. This is a non-issue when booting a non-symbiotic
kernel or even booting a symbiotic kernel the first time, but leads
to a mess on a VM reset
Peter Dinda [Sun, 14 Jun 2015 16:22:57 +0000]
Avoid strict-aliasing related issues when compiling with optimization
Peter Dinda [Tue, 9 Jun 2015 20:36:13 +0000]
APIC bug fixes and cleanup
- handle access to unsupported registers gracefully (return 0 on read, drop writes)
- correct handling of APIC address MSR write (do not delete memory region twice)
- cleanup of debugging output
Peter Dinda [Mon, 8 Jun 2015 20:00:26 +0000]
pci_front bugfix - do not propagate cmd reg write twice
Peter Dinda [Tue, 19 May 2015 16:36:43 +0000]
Ability to add remappable roms for pci front-end devices.
Syntax:
<file id="file_id" ...>
<device class="PCI_FRONT" ...>
<rom file="file_id" />
</device>
Note that for ROM that is not remappable (fixed address), the <bios> block
can be used to add it.
Peter Dinda [Tue, 19 May 2015 16:36:11 +0000]
Cleanup of locking in host device interface
Peter Dinda [Tue, 19 May 2015 16:27:47 +0000]
Addition of basic multiboot functionality plus refactor of HVM
functionality to extend multiboot
Peter Dinda [Tue, 28 Apr 2015 17:03:40 +0000]
Minor compile warning fixup and error checks
Peter Dinda [Fri, 17 Apr 2015 17:11:43 +0000]
Generalization of constraints on page allocation and implementation/use
The idea here is to allow Palacios code to request pages that satisfy some
filter function. For example, a filter function might reject allocations
above the 4GB line, or it might reject allocations that map to undesirable
cache lines.
- it removes the notion of a constraint mask in page allocation
- eliminates the < 4GB flag
- adds the notion of constraints in page allocation as filter
functions
- modifies the implementation and uses to match
Peter Dinda [Fri, 17 Apr 2015 15:11:53 +0000]
Expose vmalloc-like os interface to Palacios, and updates to use it
The purpose of finally exposing virtually contiguous /
not necessarily physically contiguous allocations to Palacios
is to get around a catch-22. We support arbitrarily small
base region chunks at this point, down to a page size. We
also support host kernels that do not provide large contiguous
physical page allocations. The result is that we can
end up needing to build a base region chunk array that is
larger than the amount of memory we can either malloc or
contiguously page alloc to support it. Yet the base region
array itself does not need to be physically contiguous.
Two places where this currently burns us is: large memory
VM allocated over linux host that does not support hot remove;
moderate memory VM using tiny chunk size, for example in
cache partitioning
Yang Yang and Weixiao Fu [Wed, 1 Apr 2015 20:57:51 +0000]
QCOW2 block storage backend for Palacios
This commit adds a new backend, qcowdisk, that allows
the use of QCOW2 format files as the storage for
virtual hard drives, cds, virtio block devices, etc.
- Backing stores are supported
- Snapshots are not supported
- Encryption is not supported
Peter Dinda [Wed, 1 Apr 2015 20:55:49 +0000]
Minor tweak to fix accidental new feature leak
Peter Dinda [Wed, 25 Mar 2015 21:24:24 +0000]
Typo fix
Peter Dinda [Wed, 25 Mar 2015 21:18:53 +0000]
Basic HRT startup for HVM, plus assorted cleanup
This builds and launches a basic guest environment for an HRT
It does not yet handle ELF load, but it is able to bootstrap
a simple code blob, including with interrupts, on HRT cores
while ROS cores happily run Linux
Peter Dinda [Mon, 23 Mar 2015 21:13:19 +0000]
Support HVM partitioning for APICs
This allows us to treat the APICs as belonging to two
groups: the "ROS" group and the "HRT" group. Semantics
for lowest priority, broadcast, etc, are determined by
the HVM logic for an HVM VM.
Peter Dinda [Mon, 23 Mar 2015 21:11:00 +0000]
HVM configuration logic (create mptables, acpi tables, etc, based on ROS config)
This updates the various ways we tell the guest what hardware is available.
In an HVM, we describe only the ROS components of the guest, not the
additional components (e.g., cores, memory, etc) that the HRT can also see.
Peter Dinda [Mon, 23 Mar 2015 21:09:33 +0000]
Add HVM configuration capability, init/deinit, etc
Peter Dinda [Mon, 23 Mar 2015 20:59:03 +0000]
HVM updates to support apic partitioning
Peter Dinda [Sun, 22 Mar 2015 23:06:04 +0000]
Basic HVM data structures and functions
Peter Dinda [Sun, 22 Mar 2015 23:02:40 +0000]
Use page allocation for base memory region array
This allows us to support a much larger number of base regions
than the heap allocation allows. Important for page-by-page
management, for example for swapping and cache partitioning
Peter Dinda [Thu, 12 Mar 2015 02:00:40 +0000]
Add proper cleanup for a nested VMX guest This also fixes a bug that was preventing such a guest from being freed
Peter Dinda [Thu, 5 Mar 2015 00:46:43 +0000]
IDE/ATA enhancements and bug-fixing: DMA operation
This makes DMA operation with ATA hard drives work
by fixing multiple issues and making it conform to
the physical hardware model
Remaining issues:
DMA disabled on CDs due to bad identity info
UDMA5 not seen (probably not consequential since
programatic model is identical to all the rest)
Peter Dinda [Thu, 5 Mar 2015 00:40:00 +0000]
PCI Fix: do not let buggy guest turn off I/O bit in an I/O BAR
An example of such a "guest" is the fucking SEABIOS
Peter Dinda [Wed, 4 Mar 2015 21:24:22 +0000]
IDE/ATA enhancements: read/write multiple, lba48 addressing, cleanup
This commit cleans up the code and adds:
- ATA PIO READ/WRITE MULTIPLE support
- LBA48 Addressing (Allowing >128 GB volumes)
- General cleanup of type sizes, and assorted other
mods to support LBA48
Peter Dinda [Wed, 4 Mar 2015 18:22:21 +0000]
IDE / ATA rewrites (1st step)
This adds functional support for ATA hard drives in PIO mode
giving both read and write access. It also does a bit of
bugfixing throughout.
Kyle Hale [Mon, 29 Dec 2014 19:54:15 +0000]
FPU stub change to support more recent kernels
Kyle Hale [Mon, 22 Dec 2014 22:21:33 +0000]
Missing user space library
Peter Dinda [Mon, 22 Dec 2014 22:21:04 +0000]
Userspace tool compile fix
Maciek Swiech [Thu, 9 Oct 2014 22:44:30 +0000]
More debugging output (APIC, LDT, etc)
- APIC state can now be dumped
- LDT is included
- LDT/GDT/IDT/TSS can now be dumped via v3_debug
Maciek Swiech [Thu, 9 Oct 2014 18:16:55 +0000]
Added guest GDT and IDT printing
- 32bit functionality untested
- LDT printing unsupported
Peter Dinda [Sun, 21 Sep 2014 20:13:01 +0000]
Revert mistakenly overwritten lazy FP change (no functional change)
Peter Dinda [Thu, 11 Sep 2014 22:24:38 +0000]
Initial cut at handling configuration of qemu devices
Kyle Hale [Tue, 26 Aug 2014 18:13:51 +0000]
add ability to load custom BIOS ROMs.
This patch allows you to override the default ROMBIOS and VGABIOS with
your own ROM binaries in the guest pal file.
here's an example overriding the default rombios and vgabios, with
another non-default BIOS rom:
<files>
<file id="somebios" filename="/path/to/mybios.bin"/>
<file id="somevgabios" filename="/path/to/myvgabios.bin"/>
<file id="somerombin" filename="/path/to/myrom.bin"/>
</files>
here's the new PAL syntax:
<bioses>
<disable_rombios/> <--- kills the default rombios
<disable_vgabios/> <--- kills the default vgabios
<bios file="somebios" address="0xf0000"/>
<bios file="somevgabios" address="0xc0000"/>
<bios file="somerombin" address="0xe70000"/>
</bioses>
Kyle Hale [Tue, 26 Aug 2014 18:10:23 +0000]
add userspace shared library for QEMU use
This is more or less a wrapper around v3_user_host_dev but
is intended to encompass anything that is QEMU-specific.
Kyle Hale [Tue, 26 Aug 2014 18:06:29 +0000]
changes and fixes to support QEMU integration with pci_front
Most of these changes (in pci.c and pci_front.c) involve properly
directing PCI config space and BAR reads and writes down to
the host device. Other changes are minor.
Kyle Hale [Tue, 26 Aug 2014 18:04:19 +0000]
prevent oops in generic device when port mode not correctly provided
Peter Dinda [Sun, 31 Aug 2014 22:00:07 +0000]
P-State more detailed hw info from ACPI
Peter Dinda [Sun, 31 Aug 2014 20:10:22 +0000]
P-State control - minor tweaks and change to proc interface
Kyle Hale [Wed, 27 Aug 2014 22:23:04 +0000]
P-State: add notifier block for linux frequency transitions, bug fixes
Kyle Hale [Wed, 27 Aug 2014 20:02:43 +0000]
fix pstate set lockup by setting frequency using linux work queues
Peter Dinda [Tue, 26 Aug 2014 15:41:40 +0000]
P-State (DVFS) Enhancements
- Change of pstate interface to be opaque 64 bit number
- Nearly complete "direct" implementation for Intel
Kyle Hale [Sat, 23 Aug 2014 03:40:10 +0000]
added linux cpufreq interface to dvfs code.
Writes (setting of frequency/governors) currently
occur in sysfs via linux userspace helper API.
Reads occur through the cpufreq policy interface.
Peter Dinda [Wed, 20 Aug 2014 14:35:38 +0000]
DVFS - added forgotten user-space library
Peter Dinda [Fri, 15 Aug 2014 18:29:43 +0000]
Additional functionality for pstate-ctrl
Kyle Hale, Shiva Rao, and Peter Dinda [Wed, 13 Aug 2014 00:05:25 +0000]
P-State control on Linux - User Utility and Library
Kyle Hale, Shiva Rao, and Peter Dinda [Wed, 13 Aug 2014 00:03:12 +0000]
P-State control interface - Linux implementation
Kyle Hale, Shiva Rao, and Peter Dinda [Wed, 13 Aug 2014 00:02:08 +0000]
P-State (DVFS) control host interface
Peter Dinda [Sun, 27 Jul 2014 20:33:40 +0000]
Update host device framework to support PCI and other interrupt types
Oscar Mondragon [Mon, 25 Aug 2014 01:34:36 +0000]
v3_cpu_mapper_admit_vm function call moved from start_thread to create_thread
Peter Dinda [Sun, 24 Aug 2014 20:22:17 +0000]
Bug fix and cleanup
- fix create/start thread distinction
- clean up distinction to make it clearer what happens throughout vmm and kernel module
- compilation tweak for swapping
Oscar Mondragon [Mon, 18 Aug 2014 21:37:57 +0000]
Hook for thread creation split into create and start thread
Kyle Hale [Tue, 22 Jul 2014 18:30:54 +0000]
change default guest name in guest config script
since there is a directory in the palacios tree named 'guest',
v3_config_guest shouldn't use this as the default guest directory
Peter Dinda [Mon, 7 Jul 2014 21:13:37 +0000]
Missing commit (compilation with memmory tracking off)
Peter Dinda [Mon, 7 Jul 2014 18:43:42 +0000]
Assorted bug fixes and defensive programming
- Sanity check top-level v3_ calls from host
- Eliminate vm free bug when config of shadow-paging vm terminates before passthrough paging is initialized
- Linux module - avoid v3_stop/free on cleanup for orphaned VMs (guest_map out of sync)
Peter Dinda [Mon, 7 Jul 2014 18:42:21 +0000]
IDE bug fix
- corrected interrupt assignment for secondary channel
Peter Dinda [Mon, 30 Jun 2014 22:35:59 +0000]
Minor cleanup in memory tracking
Peter Dinda [Mon, 30 Jun 2014 22:35:05 +0000]
Visualization and stats scripts for memory access tracking