在 04/08/2016 02:26 PM, zhanghailiang 写道:
This is the 16th version of COLO (Still only support periodic checkpoint). Here is only COLO frame part, you can get the whole codes from github: https://github.com/coloft/qemu/commits/colo-v2.7-periodic-mode
Hi~ Hailiang. I get a 404 not found, please update this new branch~ Thanks Zhang Chen
There are little changes for this series except the netfilter releated part. Patch status: Unreviewed: patch 21, 32 ~ 35 Updated: patch 7, 13, 32 ~ 35 Cc: Jason Wang <jasow...@redhat.com> TODO: 1. Checkpoint based on proxy in qemu 2. The capability of continuous FT 3. Optimize the VM's downtime during checkpoint v16: - Fix compile broken due to missing osdep.h - Add reviewed-by tag for patch 27, 28, 29 - Rename the COLO message send/receive helper function (patch 7, 13) - Simplify the codes by using some notifier helpers in QEMU (patch 32) - Remove the useless check in colo_add_buffer_filter() (patch 33) - Remove the previous patch 36, 37 which export filter_buffer_flush() to release the buffered packets for COLO, we simplify it by stopping buffer filter while doing checkpoint, which will flush the buffered packets by default. (patch 34) v15: - Go on the shutdown process if encounter error while sending shutdown message to SVM. (patch 24) - Rename qemu_need_skip_netfilter to qemu_netfilter_can_skip and Remove some useless comment. (patch 31, Jason) - Call object_new_with_props() directly to add filter in colo_add_buffer_filter. (patch 34, Jason) - Re-implement colo_set_filter_status() based on COLOBufferFilters list. (patch 35) - Re-implement colo_flush_filter_packets() based on COLOBufferFilters list. (patch 37) v14: - Re-implement the network processing based on netfilter (Jason Wang) - Rename 'COLOCommand' to 'COLOMessage'. (Markus's suggestion) - Split two new patches (patch 27/28) from patch 29 - Fix some other comments from Dave and Markus. v13: - Refactor colo_*_cmd helper functions to use 'Error **errp' parameter instead of return value to indicate success or failure. (patch 10) - Remove the optional error message for COLO_EXIT event. (patch 25) - Use semaphore to notify colo/colo incoming loop that failover work is finished. (patch 26) - Move COLO shutdown related codes to colo.c file. (patch 28) - Fix memory leak bug for colo incoming loop. (new patch 31) - Re-use some existed helper functions to realize the process of saving/loading ram and device. (patch 32) - Fix some other comments from Dave and Markus. zhanghailiang (35): configure: Add parameter for configure to enable/disable COLO support migration: Introduce capability 'x-colo' to migration COLO: migrate colo related info to secondary node migration: Integrate COLO checkpoint process into migration migration: Integrate COLO checkpoint process into loadvm COLO/migration: Create a new communication path from destination to source COLO: Implement colo checkpoint protocol COLO: Add a new RunState RUN_STATE_COLO QEMUSizedBuffer: Introduce two help functions for qsb COLO: Save PVM state to secondary side when do checkpoint COLO: Load PVM's dirty pages into SVM's RAM cache temporarily ram/COLO: Record the dirty pages that SVM received COLO: Load VMState into qsb before restore it COLO: Flush PVM's cached RAM into SVM's memory COLO: Add checkpoint-delay parameter for migrate-set-parameters COLO: synchronize PVM's state to SVM periodically COLO failover: Introduce a new command to trigger a failover COLO failover: Introduce state to record failover process COLO: Implement failover work for Primary VM COLO: Implement failover work for Secondary VM qmp event: Add COLO_EXIT event to notify users while exited from COLO COLO failover: Shutdown related socket fd when do failover COLO failover: Don't do failover during loading VM's state COLO: Process shutdown command for VM in COLO state COLO: Update the global runstate after going into colo state savevm: Introduce two helper functions for save/find loadvm_handlers entry migration/savevm: Add new helpers to process the different stages of loadvm migration/savevm: Export two helper functions for savevm process COLO: Separate the process of saving/loading ram and device state COLO: Split qemu_savevm_state_begin out of checkpoint process filter-buffer: Accept zero interval net: Add notifier/callback for netdev init COLO/filter: add each netdev a buffer filter COLO: manage the status of buffer filters for PVM COLO: Add block replication into colo process configure | 11 + docs/qmp-events.txt | 16 + hmp-commands.hx | 15 + hmp.c | 15 + hmp.h | 1 + include/exec/ram_addr.h | 1 + include/migration/colo.h | 42 +++ include/migration/failover.h | 33 ++ include/migration/migration.h | 16 + include/migration/qemu-file.h | 3 +- include/net/filter.h | 2 + include/net/net.h | 3 + include/sysemu/sysemu.h | 9 + migration/Makefile.objs | 2 + migration/colo-comm.c | 79 ++++ migration/colo-failover.c | 84 +++++ migration/colo.c | 855 ++++++++++++++++++++++++++++++++++++++++++ migration/migration.c | 90 ++++- migration/qemu-file-buf.c | 61 +++ migration/ram.c | 175 ++++++++- migration/savevm.c | 114 ++++-- net/filter-buffer.c | 12 - net/net.c | 12 + qapi-schema.json | 104 ++++- qapi/event.json | 15 + qmp-commands.hx | 24 +- stubs/Makefile.objs | 1 + stubs/migration-colo.c | 55 +++ trace-events | 8 + vl.c | 31 +- 30 files changed, 1824 insertions(+), 65 deletions(-) create mode 100644 include/migration/colo.h create mode 100644 include/migration/failover.h create mode 100644 migration/colo-comm.c create mode 100644 migration/colo-failover.c create mode 100644 migration/colo.c create mode 100644 stubs/migration-colo.c
-- Thanks zhangchen