From: Diana Palsetia, Steve Rangel, and Mark Cartwright Date: Thu, 19 Jul 2012 23:24:51 +0000 (-0500) Subject: Linux userspace tools for live migration X-Git-Url: http://v3vee.org/palacios/gitweb/gitweb.cgi?a=commitdiff_plain;h=3711d0163d1dcba26b73a6427f3feefa8fc24733;p=palacios.git Linux userspace tools for live migration --- diff --git a/linux_usr/Makefile b/linux_usr/Makefile index f459a1e..5da0c44 100644 --- a/linux_usr/Makefile +++ b/linux_usr/Makefile @@ -27,7 +27,9 @@ BASE_EXECS = v3_mem \ v3_stream \ v3_monitor \ v3_hypercall \ - v3_debug + v3_debug \ + v3_send \ + v3_receive \ # # Examples @@ -44,7 +46,7 @@ EXPERIMENTAL_EXECS = v3_simulate \ v3_inject_ecc_scrubber_mce \ v3_top_inject \ v3_env_inject \ - v3_syscall + v3_syscall diff --git a/linux_usr/v3_ctrl.h b/linux_usr/v3_ctrl.h index 97cb0fd..6522b34 100644 --- a/linux_usr/v3_ctrl.h +++ b/linux_usr/v3_ctrl.h @@ -28,6 +28,9 @@ #define V3_VM_MOVE_CORE 33 +#define V3_VM_SEND 34 +#define V3_VM_RECEIVE 35 + #define V3_VM_FB_INPUT 257 #define V3_VM_FB_QUERY 258 diff --git a/linux_usr/v3_receive.c b/linux_usr/v3_receive.c new file mode 100644 index 0000000..9c3fafd --- /dev/null +++ b/linux_usr/v3_receive.c @@ -0,0 +1,71 @@ +/* + * V3 checkpoint send (live-migration) utility + */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include "v3_ctrl.h" + + +#define MAX_STORE_LEN 128 +#define MAX_URL_LEN 256 + + +struct v3_chkpt_info chkpt; + +int main(int argc, char* argv[]) { + int vm_fd; + char * vm_dev = NULL; + + if (argc < 4) { + printf("Usage: ./v3_receive \n"); + return -1; + } + + vm_dev = argv[1]; + + if (strlen(argv[2]) >= MAX_STORE_LEN) { + printf("ERROR: Checkpoint store name longer than maximum size (%d)\n", MAX_STORE_LEN); + return -1; + } + + strncpy(chkpt.store, argv[2], MAX_STORE_LEN); + + + if (strlen(argv[3]) >= MAX_URL_LEN) { + printf("ERROR: Checkpoint URL longer than maximum size (%d)\n", MAX_URL_LEN); + return -1; + } + + strncpy(chkpt.url, argv[3], MAX_URL_LEN); + + vm_fd = open(vm_dev, O_RDONLY); + if (vm_fd == -1) { + printf("Error opening VM device: %s\n", vm_dev); + return -1; + } + + if (ioctl(vm_fd, V3_VM_RECEIVE, &chkpt)<0) { + printf("VM reception failed\n"); + return -1; + } + + /* Close the file descriptor. */ + close(vm_fd); + + return 0; +} diff --git a/linux_usr/v3_send.c b/linux_usr/v3_send.c new file mode 100644 index 0000000..fcb71c4 --- /dev/null +++ b/linux_usr/v3_send.c @@ -0,0 +1,73 @@ +/* + * V3 checkpoint send (live-migration) utility + */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + + +#include "v3_ctrl.h" + + +#define MAX_STORE_LEN 128 +#define MAX_URL_LEN 256 + + +struct v3_chkpt_info chkpt; + +int main(int argc, char* argv[]) { + int vm_fd; + char * vm_dev = NULL; + + if (argc < 4) { + printf("Usage: ./v3_send \n"); + return -1; + } + + vm_dev = argv[1]; + + if (strlen(argv[2]) >= MAX_STORE_LEN) { + printf("ERROR: Checkpoint store name longer than maximum size (%d)\n", MAX_STORE_LEN); + return -1; + } + + strncpy(chkpt.store, argv[2], MAX_STORE_LEN); + + + if (strlen(argv[3]) >= MAX_URL_LEN) { + printf("ERROR: Checkpoint URL longer than maximum size (%d)\n", MAX_URL_LEN); + return -1; + } + + strncpy(chkpt.url, argv[3], MAX_URL_LEN); + + vm_fd = open(vm_dev, O_RDONLY); + if (vm_fd == -1) { + printf("Error opening VM device: %s\n", vm_dev); + return -1; + } + + if (ioctl(vm_fd, V3_VM_SEND, &chkpt)<0) { + printf("Error sending the VM\n"); + return -1; + } + + /* Close the file descriptor. */ + close(vm_fd); + + return 0; +} + +