xc_dom_boot_mem_init()
VM boot memory setup
xenguest’s
hvm_build_setup_mem()
and libxl
and the xl
CLI call
xc_dom_boot_mem_init()
to allocate and populate the domain’s system memory for booting it:
flowchart LR subgraph libxl / xl CLI libxl__build_dom("libxl__build_dom()") end subgraph xenguest hvm_build_setup_mem("hvm_build_setup_mem()") end subgraph libxenctrl xc_domain_populate_physmap("One call for each memory range (extent): xc_domain_populate_physmap() xc_domain_populate_physmap() xc_domain_populate_physmap()") end subgraph libxenguest hvm_build_setup_mem & libxl__build_dom --> xc_dom_boot_mem_init("xc_dom_boot_mem_init()") xc_dom_boot_mem_init --> meminit_hvm("meminit_hvm()") & meminit_pv("meminit_pv()") --> xc_domain_populate_physmap end click xc_dom_boot_mem_init "https://github.com/xen-project/xen/blob/39c45c/tools/libs/guest/xg_dom_boot.c#L110-L126 " _blank click meminit_hvm "https://github.com/xen-project/xen/blob/39c45c/tools/libs/guest/xg_dom_x86.c#L1348-L1648 " _blank click meminit_pv "https://github.com/xen-project/xen/blob/de0254b9/tools/libs/guest/xg_dom_x86.c#L1183-L1333 " _blank
The allocation strategies of them called functions are:
Strategy of the libxenguest meminit functions
- Attempt to allocate 1GB superpages when possible
- Fall back to 2MB pages when 1GB allocation failed
- Fall back to 4k pages when both failed
They use xc_domain_populate_physmap() to perform memory allocation and to map the allocated memory to the system RAM ranges of the domain.
Strategy of xc_domain_populate_physmap()
xc_domain_populate_physmap()
calls the XENMEM_populate_physmap
command of the Xen memory hypercall.
For a more detailed walk-through of the inner workings of this hypercall, see the reference on xc_domain_populate_physmap().
For more details on the VM build step involving xenguest
and Xen side see:
https://wiki.xenproject.org/wiki/Walkthrough:_VM_build_using_xenguest