mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
libxc/migration: Specification update for DIRTY_PFN_LIST records
Used by secondary to send it's dirty bitmap to primary under COLO. Signed-off-by: Yang Hongyang <hongyang.yang@easystack.cn> Signed-off-by: Wen Congyang <wency@cn.fujitsu.com> Signed-off-by: Changlong Xie <xiecl.fnst@cn.fujitsu.com> Acked-by: Ian Jackson <ian.jackson@eu.citrix.com>
This commit is contained in:
1 parent
b92e7184c1
commit
9f4edff430
4 files changed
+96
-61
No files matched your search
@@ -1,6 +1,8 @@
|
||||
% LibXenCtrl Domain Image Format
|
||||
% David Vrabel <<david.vrabel@citrix.com>>
|
||||
Andrew Cooper <<andrew.cooper3@citrix.com>>
|
||||
Wen Congyang <<wency@cn.fujitsu.com>>
|
||||
Yang Hongyang <<hongyang.yang@easystack.cn>>
|
||||
% Revision 1
|
||||
|
||||
Introduction
|
||||
@@ -227,7 +229,9 @@ type 0x00000000: END
|
||||
|
||||
0x0000000E: CHECKPOINT
|
||||
|
||||
0x0000000F - 0x7FFFFFFF: Reserved for future _mandatory_
|
||||
0x0000000F: CHECKPOINT_DIRTY_PFN_LIST (Secondary -> Primary)
|
||||
|
||||
0x00000010 - 0x7FFFFFFF: Reserved for future _mandatory_
|
||||
records.
|
||||
|
||||
0x80000000 - 0xFFFFFFFF: Reserved for future _optional_
|
||||
@@ -599,6 +603,27 @@ CHECKPOINT record or an END record.
|
||||
|
||||
\clearpage
|
||||
|
||||
CHECKPOINT_DIRTY_PFN_LIST
|
||||
-------------------------
|
||||
|
||||
A checkpoint dirty pfn list record is used to convey information about
|
||||
dirty memory in the VM. It is an unordered list of PFNs. Currently only
|
||||
applicable in the backchannel of a checkpointed stream. It is only used
|
||||
by COLO, more detail please reference README.colo.
|
||||
|
||||
0 1 2 3 4 5 6 7 octet
|
||||
+-------------------------------------------------+
|
||||
| pfn[0] |
|
||||
+-------------------------------------------------+
|
||||
...
|
||||
+-------------------------------------------------+
|
||||
| pfn[C-1] |
|
||||
+-------------------------------------------------+
|
||||
|
||||
The count of pfns is: record->length/sizeof(uint64_t).
|
||||
|
||||
\clearpage
|
||||
|
||||
Layout
|
||||
======
|
||||
|
||||
|
||||
+16
-15
@@ -20,21 +20,22 @@ const char *dhdr_type_to_str(uint32_t type)
|
||||
|
||||
static const char *mandatory_rec_types[] =
|
||||
{
|
||||
[REC_TYPE_END] = "End",
|
||||
[REC_TYPE_PAGE_DATA] = "Page data",
|
||||
[REC_TYPE_X86_PV_INFO] = "x86 PV info",
|
||||
[REC_TYPE_X86_PV_P2M_FRAMES] = "x86 PV P2M frames",
|
||||
[REC_TYPE_X86_PV_VCPU_BASIC] = "x86 PV vcpu basic",
|
||||
[REC_TYPE_X86_PV_VCPU_EXTENDED] = "x86 PV vcpu extended",
|
||||
[REC_TYPE_X86_PV_VCPU_XSAVE] = "x86 PV vcpu xsave",
|
||||
[REC_TYPE_SHARED_INFO] = "Shared info",
|
||||
[REC_TYPE_TSC_INFO] = "TSC info",
|
||||
[REC_TYPE_HVM_CONTEXT] = "HVM context",
|
||||
[REC_TYPE_HVM_PARAMS] = "HVM params",
|
||||
[REC_TYPE_TOOLSTACK] = "Toolstack",
|
||||
[REC_TYPE_X86_PV_VCPU_MSRS] = "x86 PV vcpu msrs",
|
||||
[REC_TYPE_VERIFY] = "Verify",
|
||||
[REC_TYPE_CHECKPOINT] = "Checkpoint",
|
||||
[REC_TYPE_END] = "End",
|
||||
[REC_TYPE_PAGE_DATA] = "Page data",
|
||||
[REC_TYPE_X86_PV_INFO] = "x86 PV info",
|
||||
[REC_TYPE_X86_PV_P2M_FRAMES] = "x86 PV P2M frames",
|
||||
[REC_TYPE_X86_PV_VCPU_BASIC] = "x86 PV vcpu basic",
|
||||
[REC_TYPE_X86_PV_VCPU_EXTENDED] = "x86 PV vcpu extended",
|
||||
[REC_TYPE_X86_PV_VCPU_XSAVE] = "x86 PV vcpu xsave",
|
||||
[REC_TYPE_SHARED_INFO] = "Shared info",
|
||||
[REC_TYPE_TSC_INFO] = "TSC info",
|
||||
[REC_TYPE_HVM_CONTEXT] = "HVM context",
|
||||
[REC_TYPE_HVM_PARAMS] = "HVM params",
|
||||
[REC_TYPE_TOOLSTACK] = "Toolstack",
|
||||
[REC_TYPE_X86_PV_VCPU_MSRS] = "x86 PV vcpu msrs",
|
||||
[REC_TYPE_VERIFY] = "Verify",
|
||||
[REC_TYPE_CHECKPOINT] = "Checkpoint",
|
||||
[REC_TYPE_CHECKPOINT_DIRTY_PFN_LIST] = "Checkpoint dirty pfn list",
|
||||
};
|
||||
|
||||
const char *rec_type_to_str(uint32_t type)
|
||||
|
||||
@@ -60,21 +60,22 @@ struct xc_sr_rhdr
|
||||
/* Somewhat arbitrary - 8MB */
|
||||
#define REC_LENGTH_MAX (8U << 20)
|
||||
|
||||
#define REC_TYPE_END 0x00000000U
|
||||
#define REC_TYPE_PAGE_DATA 0x00000001U
|
||||
#define REC_TYPE_X86_PV_INFO 0x00000002U
|
||||
#define REC_TYPE_X86_PV_P2M_FRAMES 0x00000003U
|
||||
#define REC_TYPE_X86_PV_VCPU_BASIC 0x00000004U
|
||||
#define REC_TYPE_X86_PV_VCPU_EXTENDED 0x00000005U
|
||||
#define REC_TYPE_X86_PV_VCPU_XSAVE 0x00000006U
|
||||
#define REC_TYPE_SHARED_INFO 0x00000007U
|
||||
#define REC_TYPE_TSC_INFO 0x00000008U
|
||||
#define REC_TYPE_HVM_CONTEXT 0x00000009U
|
||||
#define REC_TYPE_HVM_PARAMS 0x0000000aU
|
||||
#define REC_TYPE_TOOLSTACK 0x0000000bU
|
||||
#define REC_TYPE_X86_PV_VCPU_MSRS 0x0000000cU
|
||||
#define REC_TYPE_VERIFY 0x0000000dU
|
||||
#define REC_TYPE_CHECKPOINT 0x0000000eU
|
||||
#define REC_TYPE_END 0x00000000U
|
||||
#define REC_TYPE_PAGE_DATA 0x00000001U
|
||||
#define REC_TYPE_X86_PV_INFO 0x00000002U
|
||||
#define REC_TYPE_X86_PV_P2M_FRAMES 0x00000003U
|
||||
#define REC_TYPE_X86_PV_VCPU_BASIC 0x00000004U
|
||||
#define REC_TYPE_X86_PV_VCPU_EXTENDED 0x00000005U
|
||||
#define REC_TYPE_X86_PV_VCPU_XSAVE 0x00000006U
|
||||
#define REC_TYPE_SHARED_INFO 0x00000007U
|
||||
#define REC_TYPE_TSC_INFO 0x00000008U
|
||||
#define REC_TYPE_HVM_CONTEXT 0x00000009U
|
||||
#define REC_TYPE_HVM_PARAMS 0x0000000aU
|
||||
#define REC_TYPE_TOOLSTACK 0x0000000bU
|
||||
#define REC_TYPE_X86_PV_VCPU_MSRS 0x0000000cU
|
||||
#define REC_TYPE_VERIFY 0x0000000dU
|
||||
#define REC_TYPE_CHECKPOINT 0x0000000eU
|
||||
#define REC_TYPE_CHECKPOINT_DIRTY_PFN_LIST 0x0000000fU
|
||||
|
||||
#define REC_TYPE_OPTIONAL 0x80000000U
|
||||
|
||||
|
||||
@@ -45,38 +45,40 @@ dhdr_type_to_str = {
|
||||
# Records
|
||||
RH_FORMAT = "II"
|
||||
|
||||
REC_TYPE_end = 0x00000000
|
||||
REC_TYPE_page_data = 0x00000001
|
||||
REC_TYPE_x86_pv_info = 0x00000002
|
||||
REC_TYPE_x86_pv_p2m_frames = 0x00000003
|
||||
REC_TYPE_x86_pv_vcpu_basic = 0x00000004
|
||||
REC_TYPE_x86_pv_vcpu_extended = 0x00000005
|
||||
REC_TYPE_x86_pv_vcpu_xsave = 0x00000006
|
||||
REC_TYPE_shared_info = 0x00000007
|
||||
REC_TYPE_tsc_info = 0x00000008
|
||||
REC_TYPE_hvm_context = 0x00000009
|
||||
REC_TYPE_hvm_params = 0x0000000a
|
||||
REC_TYPE_toolstack = 0x0000000b
|
||||
REC_TYPE_x86_pv_vcpu_msrs = 0x0000000c
|
||||
REC_TYPE_verify = 0x0000000d
|
||||
REC_TYPE_checkpoint = 0x0000000e
|
||||
REC_TYPE_end = 0x00000000
|
||||
REC_TYPE_page_data = 0x00000001
|
||||
REC_TYPE_x86_pv_info = 0x00000002
|
||||
REC_TYPE_x86_pv_p2m_frames = 0x00000003
|
||||
REC_TYPE_x86_pv_vcpu_basic = 0x00000004
|
||||
REC_TYPE_x86_pv_vcpu_extended = 0x00000005
|
||||
REC_TYPE_x86_pv_vcpu_xsave = 0x00000006
|
||||
REC_TYPE_shared_info = 0x00000007
|
||||
REC_TYPE_tsc_info = 0x00000008
|
||||
REC_TYPE_hvm_context = 0x00000009
|
||||
REC_TYPE_hvm_params = 0x0000000a
|
||||
REC_TYPE_toolstack = 0x0000000b
|
||||
REC_TYPE_x86_pv_vcpu_msrs = 0x0000000c
|
||||
REC_TYPE_verify = 0x0000000d
|
||||
REC_TYPE_checkpoint = 0x0000000e
|
||||
REC_TYPE_checkpoint_dirty_pfn_list = 0x0000000f
|
||||
|
||||
rec_type_to_str = {
|
||||
REC_TYPE_end : "End",
|
||||
REC_TYPE_page_data : "Page data",
|
||||
REC_TYPE_x86_pv_info : "x86 PV info",
|
||||
REC_TYPE_x86_pv_p2m_frames : "x86 PV P2M frames",
|
||||
REC_TYPE_x86_pv_vcpu_basic : "x86 PV vcpu basic",
|
||||
REC_TYPE_x86_pv_vcpu_extended : "x86 PV vcpu extended",
|
||||
REC_TYPE_x86_pv_vcpu_xsave : "x86 PV vcpu xsave",
|
||||
REC_TYPE_shared_info : "Shared info",
|
||||
REC_TYPE_tsc_info : "TSC info",
|
||||
REC_TYPE_hvm_context : "HVM context",
|
||||
REC_TYPE_hvm_params : "HVM params",
|
||||
REC_TYPE_toolstack : "Toolstack",
|
||||
REC_TYPE_x86_pv_vcpu_msrs : "x86 PV vcpu msrs",
|
||||
REC_TYPE_verify : "Verify",
|
||||
REC_TYPE_checkpoint : "Checkpoint",
|
||||
REC_TYPE_end : "End",
|
||||
REC_TYPE_page_data : "Page data",
|
||||
REC_TYPE_x86_pv_info : "x86 PV info",
|
||||
REC_TYPE_x86_pv_p2m_frames : "x86 PV P2M frames",
|
||||
REC_TYPE_x86_pv_vcpu_basic : "x86 PV vcpu basic",
|
||||
REC_TYPE_x86_pv_vcpu_extended : "x86 PV vcpu extended",
|
||||
REC_TYPE_x86_pv_vcpu_xsave : "x86 PV vcpu xsave",
|
||||
REC_TYPE_shared_info : "Shared info",
|
||||
REC_TYPE_tsc_info : "TSC info",
|
||||
REC_TYPE_hvm_context : "HVM context",
|
||||
REC_TYPE_hvm_params : "HVM params",
|
||||
REC_TYPE_toolstack : "Toolstack",
|
||||
REC_TYPE_x86_pv_vcpu_msrs : "x86 PV vcpu msrs",
|
||||
REC_TYPE_verify : "Verify",
|
||||
REC_TYPE_checkpoint : "Checkpoint",
|
||||
REC_TYPE_checkpoint_dirty_pfn_list : "Checkpoint dirty pfn list"
|
||||
}
|
||||
|
||||
# page_data
|
||||
@@ -403,6 +405,10 @@ class VerifyLibxc(VerifyBase):
|
||||
if len(content) != 0:
|
||||
raise RecordError("Checkpoint record with non-zero length")
|
||||
|
||||
def verify_record_checkpoint_dirty_pfn_list(self, content):
|
||||
""" checkpoint dirty pfn list """
|
||||
raise RecordError("Found checkpoint dirty pfn list record in stream")
|
||||
|
||||
|
||||
record_verifiers = {
|
||||
REC_TYPE_end:
|
||||
@@ -443,4 +449,6 @@ record_verifiers = {
|
||||
VerifyLibxc.verify_record_verify,
|
||||
REC_TYPE_checkpoint:
|
||||
VerifyLibxc.verify_record_checkpoint,
|
||||
REC_TYPE_checkpoint_dirty_pfn_list:
|
||||
VerifyLibxc.verify_record_checkpoint_dirty_pfn_list,
|
||||
}
|
||||