Hi, Moving on to 256 GB guest, the hyp is failing the XENMEM_populate_physmap hcall in compat_memory_op(). The problem is size too large for continuation encoding: /* Is size too large for us to encode a continuation? */ if ( cmp.rsrv.nr_extents > (UINT_MAX >> MEMOP_EXTENT_SHIFT)) return start_extent; for 256 GB : nr_extents == 0x4000000 Currently at a loss on this one! Thanks, Mukesh _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
On 18/02/2009 03:39, "Mukesh Rathor" <mukesh.rathor@oracle.com> wrote:> Moving on to 256 GB guest, the hyp is failing the XENMEM_populate_physmap > hcall in compat_memory_op(). The problem is size too large for continuation > encoding: > > /* Is size too large for us to encode a continuation? */ > if ( cmp.rsrv.nr_extents > (UINT_MAX >> MEMOP_EXTENT_SHIFT)) > return start_extent; > > for 256 GB : nr_extents == 0x4000000 > > Currently at a loss on this one!Well, who''s making the compat call? Not the guest itself presumably since it is 64-bit? So it''s probably dom0? But I would think that dom0 would only do large amounts of allocation for the new domU in xc_hvm_build.c, and that is careful to allocate memory in batches of 8MB at a time. Basically you need to track down the call site of the failed compat_memory_op(). -- Keir _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Keir Fraser wrote: > On 18/02/2009 03:39, "Mukesh Rathor" <mukesh.rathor@oracle.com> wrote: > >> Moving on to 256 GB guest, the hyp is failing the XENMEM_populate_physmap >> hcall in compat_memory_op(). The problem is size too large for continuation >> encoding: >> >> /* Is size too large for us to encode a continuation? */ >> if ( cmp.rsrv.nr_extents > (UINT_MAX >> MEMOP_EXTENT_SHIFT)) >> return start_extent; >> >> for 256 GB : nr_extents == 0x4000000 >> >> Currently at a loss on this one! > > Well, who''s making the compat call? Not the guest itself presumably since it > is 64-bit? So it''s probably dom0? But I would think that dom0 would only do > large amounts of allocation for the new domU in xc_hvm_build.c, and that is > careful to allocate memory in batches of 8MB at a time. > > Basically you need to track down the call site of the failed > compat_memory_op(). > > -- Keir > Hi Keir, I see this in domain-builder-ng.log: elf_xen_addr_calc_check: addresses: virt_base = 0xffffffff80000000 elf_paddr_offset = 0xffffffff80000000 virt_offset = 0x0 virt_kstart = 0xffffffff80200000 virt_kend = 0xffffffff807014e4 virt_entry = 0xffffffff80200000 xc_dom_parse_elf_kernel: xen-3.0-x86_64: 0xffffffff80200000 -> 0xffffffff807014e4 xc_dom_mem_init: mem 262144 MB, pages 0x4000000 pages, 4k each xc_dom_mem_init: 0x4000000 pages xc_dom_boot_mem_init: called x86_compat: guest xen-3.0-x86_64, address size 64 xc_dom_malloc : 256 MB xc_dom_boot.c:143: panic: xc_dom_boot_mem_init: can''t allocate low memory for domain I set a breakpoint in compat_memory_op() and stepping thru it, noticed it was bailing out at the if statement, and nr_extents was 0x4000000. This is a PV domain BTW, I guess xc_hvm_build.c wont'' be involved. I''ll instrument libxc and debug more... meanwhile I thought I''d post this. Thanks, Mukesh _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
On 18/02/2009 19:52, "Mukesh Rathor" <mukesh.rathor@oracle.com> wrote:> This is a PV domain BTW, I guess xc_hvm_build.c wont'' be involved. I''ll > instrument libxc and debug more... meanwhile I thought I''d post this.Yes, my mistake, and this points us straight at the problem. You see the xc_domain_memory_populate_physmap() call at the end of libxc/xc_dom_x86.c:arch_setup_meminit()? That needs to be put in a for loop, allocating no more than, say, a million pages at a time. The patch should be very simple, so I''ll leave the rest to you. -- Keir _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Hi Keir, Attached please find my patch to allocate 1M pages at a time. With this patch on 3.3.1 and unstable, I''m able to bring up the hypervisor with 512GB memory and start a PV 64 guest (with my pud entry fix). The only issue is performance related. As somewhat expected, after guest shutdown it takes a while for pages to be freed and guest to disappear. Until this time, system is fine, but xm will hang. In my kdb debugger, I see cpu''s in : [0]ffff828c80110f52: page_scrub_softirq+22 test %al, %al [1]ffff828c80110f52: page_scrub_softirq+22 test %al, %al [2]ffff828c80110f52: page_scrub_softirq+22 test %al, %al ... page_scrub_softirq(): /* free_heap_pages() does not parallelise well. Serialise this function. */ if ( !spin_trylock(&serialise_lock) ) I guess a future work item to look into parallelizing this some day.... Thanks a lot, Mukesh Keir Fraser wrote: > On 18/02/2009 19:52, "Mukesh Rathor" <mukesh.rathor@oracle.com> wrote: > >> This is a PV domain BTW, I guess xc_hvm_build.c wont'' be involved. I''ll >> instrument libxc and debug more... meanwhile I thought I''d post this. > > Yes, my mistake, and this points us straight at the problem. > > You see the xc_domain_memory_populate_physmap() call at the end of > libxc/xc_dom_x86.c:arch_setup_meminit()? That needs to be put in a for loop, > allocating no more than, say, a million pages at a time. > > The patch should be very simple, so I''ll leave the rest to you. > > -- Keir > _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel