Please read through the whole page, and attached document.
In this project, you are going to implement a vCPU scheduler and a memory coordinator to dynamically manage the resources assigned to each guest machine. Each of these programs will be running in the host machine's user space, collecting statistics for each guest machine through hypervisor calls and taking proper actions.
During one interval, the vCPU scheduler should track each guest machine's vCpu utilization, and decide how to pin them to pCpus, so that all pCpus are "balanced". Balance means that each pCpu handles similar workload. The "pin changes" will have overhead, so the vCPU scheduler should try its best to make as few as possible.
During one interval, the memory coordinator should track each guest machine's memory utilization, and decide how much extra free memory should be given to each guest machine. The memory coordinator will set the memory size of each guest machine and trigger the balloon driver to inflate and deflate. The memory coordinator should react properly when the memory resource is insufficient.
Tools that you need or might help you(this works only for ubuntu, will release shortly for RedHat)
1. qemu-kvm, libvirt-bin, libvirt-dev are packages you need to install, so that you can launch virtual machines with KVM and develop programs to manage virtual machines.
2. libvirt is a toolkit prividing lots of APIs to interact with the virtualization capabilities of Linux.
3. Virtualization is a page you should check.
4. virsh, uvtool, virt-top, virt-clone, virt-manager, virt-install are tools that may help you playing with virtual machines.
You need to implement two separate C/C++ programs, one for vCPU scheduler(vcpu_scheduler.cc) and another for memory coordinator(memory_coordinator.cc). Both programs should accept one input parameter, the time interval (in seconds) your scheduler or coordinator will trigger. For example, if we want the vCPU scheduler to take action every 12 seconds, we will start your program using
You need to submit one compressed folder containing two separate subfolders(cpu and memory), each containing a Makefile and the corresponding codes. We will compile your program using
Step by Step --- Which environment should I use to develop?
If you are going to use your own computer, make sure your cpu supports hardware virtualization and the Linux is directly installed (native) on the hardware. Note: you cannot do this project in a virtualbox hosted Linux.
Please make sure balloon driver is enabled.
Use the deepthought server, more information will be released soon.
SEE ATTACHED DOCUMENT FOR MORE DETAILS.