diff options
author | Dominique Martinet <asmadeus@codewreck.org> | 2015-07-02 18:25:00 +0200 |
---|---|---|
committer | Dominique Martinet <asmadeus@codewreck.org> | 2015-07-02 18:26:37 +0200 |
commit | 7bcf291638705541cf11eb01a091d8f95c8ae21c (patch) | |
tree | 3287b629c5714b70f3a0168d1f858fdefc124359 | |
parent | d44e741817745a700c036cded2826605d3909957 (diff) |
Migrate stuff: allow for different protocol (RDMA, woo), wait more accurately for when VM is ready for receive, wait for migrate to finish properly to work around qemu bug
-rw-r--r-- | kvm-wrapper.conf.default | 2 | ||||
-rwxr-xr-x | kvm-wrapper.sh | 35 |
2 files changed, 25 insertions, 12 deletions
diff --git a/kvm-wrapper.conf.default b/kvm-wrapper.conf.default index 60a2be2..a426398 100644 --- a/kvm-wrapper.conf.default +++ b/kvm-wrapper.conf.default @@ -33,6 +33,8 @@ SCREEN_EXTRA_OPTS="" #SCREEN_NAME_PREFIX="$RUN_DIR/" #SCREEN_EXTRA_OPTS="-z -r winch" # change escape key: "-e ^]" +KVM_MIGRATE_TRANSPORT="tcp" #or "x-rdma" + STARTUP_LIST="$ROOTDIR/startup/startup-list" KVM_IMG_FORMAT="qcow2" diff --git a/kvm-wrapper.sh b/kvm-wrapper.sh index 51ba179..dc2cfc1 100755 --- a/kvm-wrapper.sh +++ b/kvm-wrapper.sh @@ -861,25 +861,33 @@ function kvm_migrate_vm () PORT=$((RANDOM%1000+4000)) # Launch new instance (on pre-configured node) - "$SCRIPT_PATH" receive-migrate "$VM_NAME" "$PORT" + if ! "$SCRIPT_PATH" receive-migrate "$VM_NAME" "$PORT"; then + desc_revert_setting "KVM_CLUSTER_NODE" + fail_exit "Could not receive migrate on remote host" + fi + + sleep 0.5 - monitor_send_cmd "migrate_set_speed 1024m" + # default speed is 32MiB/s, apparently. Set it higher. + monitor_send_cmd "migrate_set_speed 100g" # monitor_send_cmd "migrate \"exec: ssh `get_cluster_host $REMOTE_NODE` socat - unix:$RUN_DIR/migrate-$REMOTE_NODE.sock\"" - monitor_send_cmd "migrate tcp:`get_cluster_host $REMOTE_NODE`:$PORT" + monitor_send_cmd "migrate ${KVM_MIGRATE_TRANSPORT:-tcp}:`get_cluster_host $REMOTE_NODE`:$PORT" + while ! echo "info migrate" | socat - unix:"$MONITOR_FILE" | grep -q "Migration status: completed"; do + sleep 1 + done monitor_send_cmd "quit" } function kvm_receive_migrate_vm () { - local PORT="$2" + local PORT="$2" - eval KVM_SCREEN="yes" $SCREEN_START_DETACHED "$SCREEN_SESSION_NAME" $SCREEN_EXTRA_OPTS "$SCRIPT_PATH" receive-migrate-here "$VM_NAME" "$PORT" + eval KVM_SCREEN="yes" $SCREEN_START_DETACHED "$SCREEN_SESSION_NAME" $SCREEN_EXTRA_OPTS "$SCRIPT_PATH" receive-migrate-here "$VM_NAME" "$PORT" - # Wait for the receiving qemu is ready. - #while ! test_exist $RUN_DIR/migrate-$VM_NAME.sock; do - while ! netstat -nplt | grep -q ":$PORT "; do - sleep 1; - done + # Wait for the receiving qemu is ready. + while ! monitor_send_cmd "info status" >&/dev/null; do + sleep 0.1 + done } function kvm_receive_migrate_here_vm () @@ -887,7 +895,7 @@ function kvm_receive_migrate_here_vm () local PORT="$2" # KVM_ADDITIONNAL_PARAMS+=" -incoming unix:$RUN_DIR/migrate-$VM_NAME.sock" - KVM_ADDITIONNAL_PARAMS+=" -incoming tcp:`get_cluster_host $(hostname -s)`:$PORT" + KVM_ADDITIONNAL_PARAMS+=" -incoming ${KVM_MIGRATE_TRANSPORT:-tcp}:`get_cluster_host $(hostname -s)`:$PORT" FORCE="yes" kvm_start_vm "$VM_NAME" } @@ -897,8 +905,11 @@ kvm_save_state_vm () ! test_exist "$PID_FILE" && fail_exit "Error: $VM_NAME doesn't seem to be running." ! test_socket_rw "$MONITOR_FILE" && fail_exit "Error: could not open monitor socket $MONITOR_FILE." monitor_send_cmd "stop" - monitor_send_cmd "migrate_set_speed 4095m" + monitor_send_cmd "migrate_set_speed 100g" monitor_send_cmd "migrate \"exec:gzip -c > $CACHE_DIR/$VM_NAME-state.gz\"" + while ! echo "info migrate" | socat - unix:"$MONITOR_FILE" | grep -q "Migration status: completed"; do + sleep 1 + done monitor_send_cmd "quit" } |