Statistics
| Branch: | Revision:

root / include / migration @ 2dbafdc0

# Date Author Comment
c961514f 01/13/2014 01:39 pm Eduardo Habkost

qemu-file: Make a few functions non-static

The QEMUFile code will be moved to qemu-file.c. This will require making
the following functions non-static because they are used by the savevm.c
code:

  • qemu_peek_byte()
  • qemu_peek_buffer()
  • qemu_file_skip()...
b5503338 01/13/2014 01:39 pm Eduardo Habkost

migration: Move QEMU_VM_* defines to migration/migration.h

The VMState code will be moved to vmstate.c and it uses some of the
QEMU_VM_* constants, so move it to a header.

Signed-off-by: Eduardo Habkost <>
Reviewed-by: Orit Wasserman <>...

a1f05e79 12/17/2013 10:12 pm Peter Maydell

vmstate: Add support for an array of ptimer_state *

Add support for defining a vmstate field which is an array
of pointers to structures, and use this to define a
VMSTATE_PTIMER_ARRAY() which allows an array of ptimer_state*
to be used by devices.

Signed-off-by: Peter Maydell <>...

7102400d 09/24/2013 02:22 pm Alexey Kardashevskiy

migration: add version supporting macros for struct pointer

This adds version supporting macros VMSTATE_STRUCT_POINTER_TEST_V
and VMSTATE_STRUCT_POINTER_V in addition to the already existing
VMSTATE_STRUCT_POINTER and VMSTATE_STRUCT_POINTER_TEST macros.
...

02edd2e7 07/29/2013 06:19 pm Stefan Hajnoczi

migration: fix spice migration

Commit 29ae8a4133082e16970c9d4be09f4b6a15034617 ("rdma: introduce
MIG_STATE_NONE and change MIG_STATE_SETUP state transition") changed the
state transitions during migration setup.

Spice used to be notified with MIG_STATE_ACTIVE and it detected this...

ed4fbd10 07/23/2013 02:06 pm Michael R. Hines

rdma: account for the time spent in MIG_STATE_SETUP through QMP

Using the previous patches, we're now able to timestamp the SETUP
state. Once we have this time, let the user know about it in the
schema.

Reviewed-by: Juan Quintela <>
Reviewed-by: Eric Blake <>...

2da776db 07/23/2013 12:12 pm Michael R. Hines

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...

44c3b58c 07/23/2013 12:11 pm Michael R. Hines

rdma: introduce ram_handle_compressed()

This gives RDMA shared access to madvise() on the destination side
when an entire chunk is found to be zero.

Reviewed-by: Juan Quintela <>
Reviewed-by: Paolo Bonzini <>
Reviewed-by: Chegu Vinod <>...

323004a3 07/19/2013 07:29 am Peter Lieven

block-migration: efficiently encode zero blocks

this patch adds a efficient encoding for zero blocks by
adding a new flag indicating a block is completely zero.

additionally bdrv_write_zeros() is used at the destination
to efficiently write these zeroes. depending on the implementation...

bde1e2ec 07/12/2013 09:34 pm Chegu Vinod

Add 'auto-converge' migration capability

The auto-converge migration capability allows the user to specify if they
choose live migration seqeunce to automatically detect and force convergence.

Signed-off-by: Chegu Vinod <>
Reviewed-by: Paolo Bonzini <>...

ec3f8c99 06/27/2013 11:38 pm Peter Maydell

linux-user: Fix compilation failure

Fix compilation failures for linux-user targets following recent
migration related commits bd2fa51fcd and 43487c67.

Signed-off-by: Peter Maydell <>
Message-id: ...

7e114f8c 06/27/2013 03:38 am Michael R. Hines

rdma: export throughput w/ MigrationStats QMP

This exposes throughput (in megabits/sec) through QMP.

Reviewed-by: Juan Quintela <>
Reviewed-by: Paolo Bonzini <>
Reviewed-by: Chegu Vinod <>
Tested-by: Chegu Vinod <>...

bc1256f7 06/27/2013 03:38 am Michael R. Hines

rdma: introduce qemu_file_mode_is_not_valid()

QEMUFileRDMA also has read and write modes. This function is now
shared to reduce code duplication.

Reviewed-by: Juan Quintela <>
Reviewed-by: Paolo Bonzini <>
Reviewed-by: Chegu Vinod <>...

be903b2a 06/27/2013 03:38 am Michael R. Hines

rdma: export qemu_fflush()

RDMA uses this to flush the control channel before sending its
own message to handle page registrations.

Reviewed-by: Juan Quintela <>
Reviewed-by: Paolo Bonzini <>
Reviewed-by: Chegu Vinod <>...

43487c67 06/27/2013 03:38 am Michael R. Hines

rdma: new QEMUFileOps hooks

These are the prototypes and implementation of new hooks that
RDMA takes advantage of to perform dynamic page registration.

An optional hook is also introduced for a custom function
to be able to override the default save_page function....

60d9222c 06/27/2013 03:38 am Michael R. Hines

rdma: introduce capability x-rdma-pin-all

This capability allows you to disable dynamic chunk registration
for better throughput on high-performance links.

For example, using an 8GB RAM virtual machine with all 8GB of memory in
active use and the VM itself is completely idle using a 40 gbps infiniband link:...

2b0ce079 06/27/2013 03:38 am Michael R. Hines

rdma: introduce qemu_update_position()

RDMA writes happen asynchronously, and thus the performance accounting
also needs to be able to occur asynchronously. This allows anybody
to call into savevm.c to update both f->pos as well as into arch_init.c
to update the acct_info structure with up-to-date values when...

05fcc848 04/15/2013 09:26 am Kevin Wolf

savevm: Implement block_writev_buffer()

Instead of breaking up RAM state into many small chunks, pass the iovec
to the block layer for better performance.

Signed-off-by: Kevin Wolf <>
Signed-off-by: Stefan Hajnoczi <>

bd7f92e5 04/05/2013 06:17 pm Peter Maydell

vmstate: Add support for two dimensional arrays

Add support for migrating two dimensional arrays, by defining
a set of new macros VMSTATE_*_2DARRAY paralleling the existing
VMSTATE_*_ARRAY macros. 2D arrays are handled the same for actual
state serialization; the only difference is that the type check...

8070568b 04/05/2013 06:17 pm Igor Mitsyanko

vmstate.h: introduce VMSTATE_BUFFER_POINTER_UNSAFE macro

Macro could be used to migrate a dynamically allocated buffer of known size.

Signed-off-by: Igor Mitsyanko <>
Reviewed-by: Peter Maydell <>
Message-id: ...

f1c72795 03/26/2013 02:32 pm Peter Lieven

migration: do not sent zero pages in bulk stage

during bulk stage of ram migration if a page is a
zero page do not send it at all.
the memory at the destination reads as zero anyway.

even if there is an madvise with QEMU_MADV_DONTNEED
at the target upon receipt of a zero page I have observed...

d913829f 03/26/2013 02:32 pm Orit Wasserman

Add QemuFileWritevBuffer QemuFileOps

This will allow us to write an iovec

Signed-off-by: Orit Wasserman <>
Reviewed-by: Juan Quintela <>
Signed-off-by: Juan Quintela <>

6181ec24 03/26/2013 02:32 pm Orit Wasserman

Add qemu_put_buffer_async

This allows us to add a buffer to the iovec to send without copying it
into the static buffer, the buffer will be sent later when qemu_fflush is called.

Signed-off-by: Orit Wasserman <>
Signed-off-by: Juan Quintela <>

d58f5598 03/26/2013 02:30 pm David Gibson

savevm: Add VMSTATE_UINTTL_EQUAL helper

This adds an _EQUAL VMSTATE helper for target_ulongs, defined in terms of
VMSTATE_UINT32_EQUAL or VMSTATE_UINT64_EQUAL as appropriate.

Signed-off-by: David Gibson <>
Signed-off-by: Juan Quintela <>

213945e4 03/26/2013 02:30 pm David Gibson

savevm: Add VMSTATE_FLOAT64 helpers

The current savevm code includes VMSTATE helpers for a number of commonly
used data types, but not for the float64 type used by the internal floating
point emulation code. This patch fixes the deficiency.

Signed-off-by: David Gibson <>...

8474a9dd 03/26/2013 02:30 pm David Gibson

savevm: Add VMSTATE_STRUCT_VARRAY_POINTER_UINT32

Currently the savevm code contains a VMSTATE_STRUCT_VARRAY_POINTER_INT32
helper (a variably sized array with the number of elements in an int32_t),
but not VMSTATE_STRUCT_VARRAY_POINTER_UINT32 (... with the number of...

377e2cb9 03/26/2013 02:30 pm David Gibson

savevm: Fix bugs in the VMSTATE_VBUFFER_MULTIPLY definition

The VMSTATE_BUFFER_MULTIPLY macro is misnamed - it actually specifies
a variably sized buffer with VMS_VBUFFER, so should be named
VMSTATE_VBUFFER_MULTIPLY. This patch fixes this (the macro had no current...

e344b8a1 03/26/2013 02:30 pm David Gibson

savevm: Add VMSTATE_UINT64_EQUAL helpers

The savevm code already includes a number of *_EQUAL helpers which act as
sanity checks verifying that the configuration of the saved state matches
that of the machine we're loading into to work. Variants already exist...

d7650eab 03/12/2013 11:35 am Andreas Färber

vmstate: Make vmstate_register() static inline

This avoids adding a duplicate stub for CONFIG_USER_ONLY.

Suggested-by: Eduardo Habkost <>
Reviewed-by: Eduardo Habkost <>
Reviewed-by: Juan Quintela <>...

c71c3e99 03/12/2013 11:35 am Andreas Färber

stubs: Add a vmstate_dummy struct for CONFIG_USER_ONLY

Reviewed-by: Juan Quintela <>
Reviewed-by: Eduardo Habkost <>
Signed-off-by: Andreas Färber <>

b352365f 03/11/2013 02:32 pm Paolo Bonzini

migration: eliminate s->migration_file

The indirection is useless now. Backends can open s->file directly.

Reviewed-by: Orit Wasserman <>
Reviewed-by: Juan Quintela <>
Signed-off-by: Paolo Bonzini <>...

ee0b44aa 03/11/2013 02:32 pm Peter Lieven

page_cache: dup memory on insert

The page cache frees all data on finish, on resize and
if there is collision on insert. So it should be the caches
responsibility to dup the data that is stored in the cache.

Signed-off-by: Peter Lieven <>
Signed-off-by: Orit Wasserman <>...

edaae611 03/11/2013 02:32 pm Paolo Bonzini

migration: yay, buffering is gone

Buffering was needed because blocking writes could take a long time
and starve other threads seeking to grab the big QEMU mutex.

Now that all writes (except within _complete callbacks) are done
outside the big QEMU mutex, we do not need buffering at all....

05f28b83 03/11/2013 02:32 pm Paolo Bonzini

qemu-file: make qemu_fflush and qemu_file_set_error private again

Reviewed-by: Orit Wasserman <>
Reviewed-by: Juan Quintela <>
Signed-off-by: Paolo Bonzini <>
Signed-off-by: Juan Quintela <>

817b9ed5 03/11/2013 02:32 pm Paolo Bonzini

migration: merge qemu_popen_cmd with qemu_popen

There is no reason for outgoing exec migration to do popen manually
anymore (the reason used to be that we needed the FILE* to make it
non-blocking). Use qemu_popen_cmd.

Reviewed-by: Orit Wasserman <>...

0cc3f3cc 03/11/2013 02:32 pm Paolo Bonzini

qemu-file: add writable socket QEMUFile

Reviewed-by: Orit Wasserman <>
Reviewed-by: Juan Quintela <>
Signed-off-by: Paolo Bonzini <>
Signed-off-by: Juan Quintela <>

f8bbc128 03/11/2013 02:32 pm Paolo Bonzini

migration: use QEMUFile for migration channel lifetime

As a start, use QEMUFile to store the destination and close it.
qemu_get_fd gets a file descriptor that will be used by the write
callbacks.

Reviewed-by: Orit Wasserman <>
Reviewed-by: Juan Quintela <>...

e6a1cf21 03/11/2013 02:32 pm Paolo Bonzini

migration: use QEMUFile for writing outgoing migration data

Second, drop the file descriptor indirection, and write directly to the
QEMUFile.

Reviewed-by: Orit Wasserman <>
Reviewed-by: Juan Quintela <>
Signed-off-by: Paolo Bonzini <>...

1964a397 03/11/2013 02:32 pm Paolo Bonzini

migration: move rate limiting to QEMUFile

Rate limiting is now simply a byte counter; client call
qemu_file_rate_limit() manually to determine if they have to exit.
So it is possible and simple to move the functionality to QEMUFile.

This makes the remaining functionality of s->file redundant;...

4eb93810 03/11/2013 02:32 pm Paolo Bonzini

qemu-file: temporarily expose qemu_file_set_error and qemu_fflush

Right now, migration cannot entirely rely on QEMUFile's automatic
drop of I/O after an error, because it does its "real" I/O outside
the put_buffer callback. To fix this until buffering is gone, expose...

dba433c0 03/11/2013 02:32 pm Paolo Bonzini

migration: simplify error handling

Always use qemu_file_get_error to detect errors, since that is how
QEMUFile itself drops I/O after an error occurs. There is no need
to propagate and check return values all the time.

Also remove the "complete" member, since we know that it is set (via...

bb1fadc4 03/11/2013 02:32 pm Paolo Bonzini

migration: cleanup migration (including thread) in the iothread

Perform final cleanup in a bottom half, and add joining the thread to
the series of cleanup actions.

migrate_fd_error remains for connection error, but it doesn't need
to cleanup anything anymore....

8c8de19d 03/11/2013 02:32 pm Paolo Bonzini

migration: reorder SaveVMHandlers members

This groups together the callbacks that later will have similar
locking rules.

Reviewed-by: Orit Wasserman <>
Reviewed-by: Juan Quintela <>
Signed-off-by: Paolo Bonzini <>...

32c835ba 03/11/2013 02:32 pm Paolo Bonzini

migration: run pending/iterate callbacks out of big lock

This makes it possible to do blocking writes directly to the socket,
with no buffer in the middle. For RAM, only the migration_bitmap_sync()
call needs the iothread lock. For block migration, it is needed by...

9b095037 03/11/2013 02:32 pm Paolo Bonzini

migration: run setup callbacks out of big lock

Only the migration_bitmap_sync() call needs the iothread lock.

Reviewed-by: Orit Wasserman <>
Reviewed-by: Juan Quintela <>
Signed-off-by: Paolo Bonzini <>...

fd7f0d66 03/01/2013 02:53 pm Paolo Bonzini

hw: move fifo.[ch] to libqemuutil

fifo.c is generic code that can be easily unit tested. So it
belongs in libqemuutil.

Signed-off-by: Paolo Bonzini <>

90f8ae72 02/22/2013 11:12 am Juan Quintela

migration: calculate expected_downtime

We removed the calculation in commit e4ed1541ac9413eac494a03532e34beaf8a7d1c5

Now we add it back. We need to create dirty_bytes_rate because we
can't include cpu-all.h from migration.c, and there is no other way to...

ad55ab42 02/13/2013 12:26 am Stefan Hajnoczi

migration: make qemu_ftell() public and support writable files

Migration .save_live_iterate() functions return the number of bytes
transferred. The easiest way of doing this is by calling qemu_ftell(f)
at the beginning and end of the function to calculate the difference....

76f5933a 01/17/2013 02:54 pm Juan Quintela

migration: move beginning stage to the migration thread

Signed-off-by: Juan Quintela <>

Reviewed-by: Reviewed-by: Eric Blake <>
Reviewed-by: Paolo Bonzini <>

b9c961a8 01/17/2013 02:54 pm Paolo Bonzini

migration: make function static

Signed-off-by: Paolo Bonzini <>
Signed-off-by: Juan Quintela <>

Reviewed-by: Reviewed-by: Eric Blake <>

9848a404 12/21/2012 12:09 am Juan Quintela

migration: merge QEMUFileBuffered into MigrationState

Avoid splitting the state of outgoing migration, more or less arbitrarily,
between two data structures. QEMUFileBuffered anyway is used only during
migration.

Signed-off-by: Paolo Bonzini <>...

0e288fa3 12/21/2012 12:09 am Juan Quintela

migration: move migration_fd_put_ready()

Put it near its use and un-export it.

Signed-off-by: Juan Quintela <>

2e450865 12/21/2012 12:09 am Juan Quintela

migration: Inline qemu_fopen_ops_buffered into migrate_fd_connect

Signed-off-by: Juan Quintela <>

0d82d0e8 12/21/2012 12:09 am Juan Quintela

migration: move buffered_file.c code into migration.c

This only moves the code (also from buffered_file.h to migration.h).
Fix whitespace until checkpatch is happy.

Signed-off-by: Juan Quintela <>

edfa1af5 12/21/2012 12:09 am Juan Quintela

migration: make qemu_fopen_ops_buffered() return void

We want the file assignment to happen before the thread is created to
avoid locking, so we just do it before creating the thread.

Signed-off-by: Juan Quintela <>

Reviewed-by: Orit Wasserman <>

766bd176 12/21/2012 12:09 am Juan Quintela

migration: move migration thread init code to migrate_fd_put_ready

This way everything related with migration is run on the migration
thread and no locking is needed.

Signed-off-by: Juan Quintela <>

dd217b87 12/21/2012 12:09 am Juan Quintela

migration: make writes blocking

Move all the writes to the migration_thread, and make writings
blocking. Notice that are still using the iothread for everything
that we do.

Signed-off-by: Juan Quintela <>

188a4285 12/21/2012 12:09 am Juan Quintela

migration: remove unfreeze logic

Now that we have a thread, and blocking writes, we don't need it.

Signed-off-by: Juan Quintela <>

Reviewed-by: Paolo Bonzini <>

e4ed1541 12/21/2012 12:09 am Juan Quintela

savevm: New save live migration method: pending

Code just now does (simplified for clarity)

if (qemu_savevm_state_iterate(s->file) == 1) {
vm_stop_force_state(RUN_STATE_FINISH_MIGRATE);
qemu_savevm_state_complete(s->file);
}

Problem here is that qemu_savevm_state_iterate() returns 1 when it...

1de7afc9 12/19/2012 09:32 am Paolo Bonzini

misc: move include files to include/qemu/

Signed-off-by: Paolo Bonzini <>

caf71f86 12/19/2012 09:31 am Paolo Bonzini

migration: move include files to include/migration/

Signed-off-by: Paolo Bonzini <>