Commit 2da776db authored by Michael R. Hines's avatar Michael R. Hines Committed by Juan Quintela
Browse files

rdma: core logic



Code that does need to be visible is kept
well contained inside this file and this is the only
new additional file to the entire patch.

This file includes the entire protocol and interfaces
required to perform RDMA migration.

Also, the configure and Makefile modifications to link
this file are included.

Full documentation is in docs/rdma.txt

Reviewed-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
Reviewed-by: default avatarChegu Vinod <chegu_vinod@hp.com>
Tested-by: default avatarChegu Vinod <chegu_vinod@hp.com>
Tested-by: default avatarMichael R. Hines <mrhines@us.ibm.com>
Signed-off-by: default avatarMichael R. Hines <mrhines@us.ibm.com>
Signed-off-by: default avatarJuan Quintela <quintela@redhat.com>
parent 44c3b58c
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ common-obj-$(CONFIG_POSIX) += os-posix.o
common-obj-$(CONFIG_LINUX) += fsdev/

common-obj-y += migration.o migration-tcp.o
common-obj-$(CONFIG_RDMA) += migration-rdma.o
common-obj-y += qemu-char.o #aio.o
common-obj-y += block-migration.o
common-obj-y += page_cache.o xbzrle.o
+40 −0
Original line number Diff line number Diff line
@@ -180,6 +180,7 @@ xfs=""
vhost_net="no"
vhost_scsi="no"
kvm="no"
rdma=""
gprof="no"
debug_tcg="no"
debug="no"
@@ -937,6 +938,10 @@ for opt do
  ;;
  --enable-gtk) gtk="yes"
  ;;
  --enable-rdma) rdma="yes"
  ;;
  --disable-rdma) rdma="no"
  ;;
  --with-gtkabi=*) gtkabi="$optarg"
  ;;
  --enable-tpm) tpm="yes"
@@ -1095,6 +1100,8 @@ echo " --enable-bluez enable bluez stack connectivity"
echo "  --disable-slirp          disable SLIRP userspace network connectivity"
echo "  --disable-kvm            disable KVM acceleration support"
echo "  --enable-kvm             enable KVM acceleration support"
echo "  --disable-rdma           disable RDMA-based migration support"
echo "  --enable-rdma            enable RDMA-based migration support"
echo "  --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)"
echo "  --disable-nptl           disable usermode NPTL support"
echo "  --enable-nptl            enable usermode NPTL support"
@@ -1801,6 +1808,30 @@ EOF
  libs_softmmu="$sdl_libs $libs_softmmu"
fi

##########################################
# RDMA needs OpenFabrics libraries
if test "$rdma" != "no" ; then
  cat > $TMPC <<EOF
#include <rdma/rdma_cma.h>
int main(void) { return 0; }
EOF
  rdma_libs="-lrdmacm -libverbs"
  if compile_prog "" "$rdma_libs" ; then
    rdma="yes"
    libs_softmmu="$libs_softmmu $rdma_libs"
  else
    if test "$rdma" = "yes" ; then
        error_exit \
            " OpenFabrics librdmacm/libibverbs not present." \
            " Your options:" \
            "  (1) Fast: Install infiniband packages from your distro." \
            "  (2) Cleanest: Install libraries from www.openfabrics.org" \
            "  (3) Also: Install softiwarp if you don't have RDMA hardware"
    fi
    rdma="no"
  fi
fi

##########################################
# VNC TLS/WS detection
if test "$vnc" = "yes" -a \( "$vnc_tls" != "no" -o "$vnc_ws" != "no" \) ; then
@@ -3558,6 +3589,7 @@ echo "Linux AIO support $linux_aio"
echo "ATTR/XATTR support $attr"
echo "Install blobs     $blobs"
echo "KVM support       $kvm"
echo "RDMA support      $rdma"
echo "TCG interpreter   $tcg_interpreter"
echo "fdt support       $fdt"
echo "preadv support    $preadv"
@@ -4046,6 +4078,10 @@ if test "$trace_default" = "yes"; then
  echo "CONFIG_TRACE_DEFAULT=y" >> $config_host_mak
fi

if test "$rdma" = "yes" ; then
  echo "CONFIG_RDMA=y" >> $config_host_mak
fi

if test "$tcg_interpreter" = "yes"; then
  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
elif test "$ARCH" = "sparc64" ; then
@@ -4485,6 +4521,10 @@ if [ "$pixman" = "internal" ]; then
  echo "config-host.h: subdir-pixman" >> $config_host_mak
fi

if test "$rdma" = "yes" ; then
echo "CONFIG_RDMA=y" >> $config_host_mak
fi

if [ "$dtc_internal" = "yes" ]; then
  echo "config-host.h: subdir-dtc" >> $config_host_mak
fi
+4 −0
Original line number Diff line number Diff line
@@ -77,6 +77,10 @@ void fd_start_incoming_migration(const char *path, Error **errp);

void fd_start_outgoing_migration(MigrationState *s, const char *fdname, Error **errp);

void rdma_start_outgoing_migration(void *opaque, const char *host_port, Error **errp);

void rdma_start_incoming_migration(const char *host_port, Error **errp);

void migrate_fd_error(MigrationState *s);

void migrate_fd_connect(MigrationState *s);

migration-rdma.c

0 → 100644
+3249 −0

File added.

Preview size limit exceeded, changes collapsed.

+8 −0
Original line number Diff line number Diff line
@@ -78,6 +78,10 @@ void qemu_start_incoming_migration(const char *uri, Error **errp)

    if (strstart(uri, "tcp:", &p))
        tcp_start_incoming_migration(p, errp);
#ifdef CONFIG_RDMA
    else if (strstart(uri, "x-rdma:", &p))
        rdma_start_incoming_migration(p, errp);
#endif
#if !defined(WIN32)
    else if (strstart(uri, "exec:", &p))
        exec_start_incoming_migration(p, errp);
@@ -406,6 +410,10 @@ void qmp_migrate(const char *uri, bool has_blk, bool blk,

    if (strstart(uri, "tcp:", &p)) {
        tcp_start_outgoing_migration(s, p, &local_err);
#ifdef CONFIG_RDMA
    } else if (strstart(uri, "x-rdma:", &p)) {
        rdma_start_outgoing_migration(s, p, &local_err);
#endif
#if !defined(WIN32)
    } else if (strstart(uri, "exec:", &p)) {
        exec_start_outgoing_migration(s, p, &local_err);