Hi, This patch series is a revised version of Kemari for KVM, which applied comments for the previous post and KVM Forum 2010. The current code is based on qemu.git f711df67d611e4762966a249742a5f7499e19f99. For general information about Kemari, I've made a wiki page at qemu.org. http://wiki.qemu.org/Features/FaultTolerance The changes from v0.1.1 -> v0.2 are: - Introduce a queue in event-tap to make VM sync live. - Change transaction receiver to a state machine for async receiving. - Replace net/block layer functions with event-tap proxy functions. - Remove dirty bitmap optimization for now. - convert DPRINTF() in ft_trans_file to trace functions. - convert fprintf() in ft_trans_file to error_report(). - improved error handling in ft_trans_file. - add a tmp pointer to qemu_del_vm_change_state_handler. The changes from v0.1 -> v0.1.1 are: - events are tapped in net/block layer instead of device emulation layer. - Introduce a new option for -incoming to accept FT transaction. - Removed writev() support to QEMUFile and FdMigrationState for now. I would post this work in a different series. - Modified virtio-blk save/load handler to send inuse variable to correctly replay. - Removed configure --enable-ft-mode. - Removed unnecessary check for qemu_realloc(). The first 6 patches modify several functions of qemu to prepare introducing Kemari specific components. The next 6 patches are the components of Kemari. They introduce event-tap and the FT transaction protocol file based on buffered file. The design document of FT transaction protocol can be found at, http://wiki.qemu.org/images/b/b1/Kemari_sender_receiver_0.5a.pdf Then the following 4 patches modifies dma-helpers, virtio-blk virtio-net and e1000 to replace net/block layer functions with event-tap proxy functions. Please note that if Kemari is off, event-tap will just passthrough, and there is most no intrusion to exisiting functions including normal live migration. Finally, the migration layer are modified to support Kemari in the last 5 patches. Again, there shouldn't be any affection if a user doesn't specify Kemari specific options. The transaction is now async on both sender and receiver side. The sender side respects the max_downtime to decide when to switch from async to sync mode. The following is a demo video of the latest version. The left windows is the primary and the right window is the secondary. As you can see, the secondary window gets updated because the transaction receiver is now asynchronous. http://www.osrg.net/kemari/download/kemari-v0.2-fedora11.mov The repository contains all patches I'm sending with this message. For those who want to try, please pull the following repository. It also includes dirty bitmap optimization which aren't ready for posting yet. To remove the dirty bitmap optimization, please look at HEAD~4 of the tree. Also, please note that it's based on a bit older version of qemu.git because of testing. There aren't major conflicts with the patch series posted. git://kemari.git.sourceforge.net/gitroot/kemari/kemari As always, I'm looking forward to suggestions/comments. Thanks, Yoshi Yoshiaki Tamura (21): Make QEMUFile buf expandable, and introduce qemu_realloc_buffer() and qemu_clear_buffer(). Introduce read() to FdMigrationState. Introduce skip_header parameter to qemu_loadvm_state(). qemu-char: export socket_set_nodelay(). virtio: modify save/load handler to handle inuse varialble. vl: add a tmp pointer so that a handler can delete the entry to which it belongs. Introduce fault tolerant VM transaction QEMUFile and ft_mode. savevm: introduce util functions to control ft_trans_file from savevm layer. Introduce event-tap. Call init handler of event-tap at main() in vl.c. ioport: insert event_tap_ioport() to ioport_write(). Insert event_tap_mmio() to cpu_physical_memory_rw() in exec.c. dma-helpers: replace bdrv_aio_writev() with bdrv_aio_writev_proxy(). virtio-blk: replace bdrv_aio_multiwrite() with bdrv_aio_multiwrite_proxy(). virtio-net: replace qemu_sendv_packet_async() with qemu_sendv_packet_async_proxy(). e1000: replace qemu_send_packet() with qemu_send_packet_proxy(). savevm: introduce qemu_savevm_trans_{begin,commit}. migration: introduce migrate_ft_trans_{put,get}_ready(), and modify migrate_fd_put_ready() when ft_mode is on. migration-tcp: modify tcp_accept_incoming_migration() to handle ft_mode, and add a hack not to close fd when ft_mode is enabled. Introduce -k option to enable FT migration mode (Kemari). migration: add a parser to accept FT migration incoming mode. Makefile.objs | 1 + Makefile.target | 1 + block.h | 9 + dma-helpers.c | 4 +- event-tap.c | 794 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ event-tap.h | 34 +++ exec.c | 4 + ft_trans_file.c | 603 +++++++++++++++++++++++++++++++++++++++++ ft_trans_file.h | 72 +++++ hmp-commands.hx | 7 +- hw/e1000.c | 4 +- hw/hw.h | 7 + hw/virtio-blk.c | 2 +- hw/virtio-net.c | 4 +- hw/virtio.c | 8 +- ioport.c | 2 + migration-tcp.c | 58 ++++- migration.c | 277 +++++++++++++++++++- migration.h | 3 + net.h | 4 + net/queue.c | 1 + qemu-char.c | 2 +- qemu_socket.h | 1 + qmp-commands.hx | 7 +- savevm.c | 298 ++++++++++++++++++++- sysemu.h | 4 +- trace-events | 15 + vl.c | 8 +- 28 files changed, 2197 insertions(+), 37 deletions(-) create mode 100644 event-tap.c create mode 100644 event-tap.h create mode 100644 ft_trans_file.c create mode 100644 ft_trans_file.h -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html