Live migration of virtual machines is a key management function in cloud computing. Unfortunately, no live migration progress management system exists in the state-of-the-art, leading to:
        (1) guesswork over how long a migration might take and the inability to schedule dependent tasks accordingly;
        (2) unacceptable application degradation when application components become split over distant cloud datacenters for an arbitrary period during migration;
        (3) inability to tradeoff application performance and migration time e.g. to finish migration later for less impact on application performance.

Pacer is the first migration progress management system that solves these problems. Pacer’s techniques are based on robust and lightweight run-time measurements of system and workload characteristics, efficient and accurate analytic models for progress predictions, and online adaptation to maintain user-defined migration objectives for coordinated and timely migrations. Our experiments on a local testbed and on Amazon EC2 show that Pacer is highly effective under a range of application workloads and network conditions.



Before running Pacer, you should be comfortable with VM and QEMU.

1. Compile Pacer

  • Download Pacer version of QEMU

  • Unzip the file and enter the directory
  • Try:
    ./configure --prefix=/usr/local/kvmYou should get no error.
  • Then:
    make make install
  • go to /usr/local/kvm/ to see whether any new files are generated
    go to /usr/local/kvm/bin/ you will see qemu-system-x86_64 (this is the right version of qemu that we will use)

2. Boot VM

  • Boot VM as you usually do with QEMU. Example:
    /usr/local/kvm/bin/qemu-system-x86_64 -enable-kvm -m 1024 -monitor stdio -smp 1
    -drive file=/image/vmdk-img/experiment/webserver.img -net nic,macaddr=52:54:00:12:12:52
    -usb -usbdevice tablet

    /usr/local/kvm/bin/qemu-system-x86_64: the QEMU we are using to boot VM
    -enable-kvm: option that enables KVM
    -m 1024: memory for the VM is 1024MB.
    -monitor stdio: output QEMU managment console into terminal
    -smp 1: use 1 vcpu
    -drive file=/path/to/image
    -net nic,macaddr creates a new Network Interface Card and assign MAC address
    -usb and -usbdevice is for using mouse in VM

3. Migrate VM

  • On the destination machine:
    Create an empty image with the same size as the source VM. Example: qemu-img create -f raw /image/migrated/webserver.img 8G
    Then, start QEMU using the same command as on the source machine, and append:-incoming tcp:0:5444 Here, 5444 is the port this program listens to.
    Example: /usr/local/kvm/bin/qemu-system-x86_64 -enable-kvm -m 1024 -monitor stdio -smp 1
    -drive file=/image/migrated/webserver.img -net nic,macaddr=52:54:00:12:12:52
    -usb -usbdevice tablet -incoming tcp:0:5444

  • On the source machine:
    after the VM is booted, inside QEMU console (if you didn't use the -monitor option, press Alt+Ctrl+2 to switch to the console): qemu: migrate -d -b -p tcp:destination_machine_ip:5444 0 The last 0 mean migrate at default rate, you can set desired finish time by altering this number (in second).


Pacer: A Progress Management System for Live Virtual Machine Migration in Cloud Computing, Jie Zheng, T. S. Eugene Ng, Kunwadee Sripanidkulchai, Zhaolei Liu, "Pacer: A Progress Management System for Live Virtual Machine Migration in Cloud Computing", in IEEE Transactions on Network and Service Management, Volume 10 , Issue 4, p.369-382, December 2013


This research was sponsored by the NSF under CNS-1305379, CNS- 1018807 and CNS-1162270, by an Alfred P. Sloan Research Fellowship, an IBM Scholarship, an IBM Faculty Award, and by Microsoft Corp.