Sandpiper Release Notes - 0.1 http://lass.cs.umass.edu/projects/virtualization/ July 22, 2007 Requirements ------------ Xen 3.0.2-3 with VBD stat patch applied - A fully patched distribution available at http://lass.cs.umass.edu/projects/virtualization/ - the patch alone is at http://lists.xensource.com/archives/html/xen-devel/2006-06/msg00806.html but you will need a version of Xen around 3.0.2 for it to apply. Twisted Matrix - Python Networking Framework v2.0.1 - see http://twistedmatrix.com/trac/ How to Use ---------- Python and Twisted must be installed in domain 0 of all servers to be controlled and on the management node which will run the control plane software. After configuring the scripts with the correct IP addresses, run sandpiper.py on the management node and xenmon.py in dom0 of each virtual machine to be monitored. For more detailed information on each software component, see below. Nucleus Software ---------------- These components run in domain0 on the physical machines being monitored. They gather resource information and send it to the control plane. xenmon.py This is a modified version of the xenmon CPU resource monitor. It has been extended to additionally gather network, disk, and memory statistics as described in the files below. The resource measurements are sent to the Sandpiper control plane using the Twisted networking framework. It has several subcomponents which gather network, disk, and memory statistics: netstats.py Gathers network utilization statistics by parsing /proc/net/dev. Depending on your network interface setup, this script may need to be modified. diskstats.py Gathers disk utilization statistics. Currently, Sandpiper only uses disk stats in order to detect when a VM has insufficient memory and is swapping pages to disk. It assumes that all VMs are configured with two disk devices, the second of which is configured as a swap drive. The data is parsed from the Xen VBD patch which adds these statistics to /proc/xen/vbd. A properly patched version of Xen must be used for this to work. Note that more current releases of Xen also include this data, but it is placed somewhere else. The script could be modified to account for that. ramstats.py Not currently used. This script attempts to get memory resource information by parsing /proc/meminfo on the VM. It will need to be modified to use the correct IP addresses and user ids if you want to use it. Control Plane ------------- sandpiper.py This is the main control plane which receives resource information from the VMs and makes decisions based on it. The ResourceManager class adjusts resource allocations and initiates migrations and swaps. StatStore records the messages coming into the server and maintains data on the active physical and virtual servers. MsgParser parses incoming messages based on their content. SandpiperProtocol and SandpiperFactory contain the core networking functionality for the server. At the bottom of the file there are a number of constants which can be configured which control general behavior. It has two subcomponents: greedy.py This contains the main algorithm for determining which migrations and swaps to perform. It takes as input the list of VMs and PMs and returns a list of migrations and swaps which should be performed in order to eliminate overload on as many servers as possible. vmpm.py These classes store all of the information for each VM and PM (physical machine). They also include the functions used for computing historical profiles of resources and for modeling resource usage which can be used for prediction. sendmsg.py This takes a string command line argument and sends it to the control plane. Useful for debugging. swapper.py This is a simplified control plane node which is only used as a middleman for swapping virtual machines between two hosts. It should be run on a separate Xen node, and its IP address must be configured in sandpiper.py. Contact ------- This software has been released with no support or warranty. General questions should be directed to Tim Wood (twood@cs.umass.edu).