[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [Xen-devel] [RFC][Patches] Xen 1GB Page Table Support



Hi, Wei, 
        I digged out this thread from looooong history...
        Do you still have plan to push your 1gb_p2m and 1gb_tool patches into 
upstream? 
        I rebased them to fit the latest upstream code (the 1gb_tools.patch is 
not changed). 
        Comment on that or any new idea? Thanks!

Best Regards,
-- Dongxiao

Huang2, Wei wrote:
> Here are patches using the middle approach. It handles 1GB pages in
> PoD by remapping 1GB with 2MB pages & retry. I also added code for 1GB
> detection. Please comment.
> 
> Thanks a lot,
> 
> -Wei
> 
> -----Original Message-----
> From: dunlapg@xxxxxxxxx [mailto:dunlapg@xxxxxxxxx] On Behalf Of George
> Dunlap
> Sent: Wednesday, March 18, 2009 12:20 PM
> To: Huang2, Wei
> Cc: xen-devel@xxxxxxxxxxxxxxxxxxx; keir.fraser@xxxxxxxxxxxxx; Tim
> Deegan Subject: Re: [Xen-devel] [RFC][Patches] Xen 1GB Page Table
> Support 
> 
> Thanks for doing this work, Wei -- especially all the extra effort for
> the PoD integration.
> 
> One question: How well would you say you've tested the PoD
> functionality?  Or to put it the other way, how much do I need to
> prioritize testing this before the 3.4 release?
> 
> It wouldn't be a bad idea to do as you suggested, and break things
> into 2 meg pages for the PoD case.  In order to take the best
> advantage of this in a PoD scenario, you'd need to have a balloon
> driver that could allocate 1G of continuous *guest* p2m space, which
> seems a bit optimistic at this point...
> 
>  -George
> 
> 2009/3/18 Huang2, Wei <Wei.Huang2@xxxxxxx>:
>> Current Xen supports 2MB super pages for NPT/EPT. The attached
>> patches extend this feature to support 1GB pages. The PoD
>> (populate-on-demand) introduced by George Dunlap made P2M
>> modification harder. I tried to preserve existing PoD design by
>> introducing a 1GB PoD cache list. 
>> 
>> 
>> 
>> Note that 1GB PoD can be dropped if we don't care about 1GB when PoD
>> is enabled. In this case, we can just split 1GB PDPE into 512x2MB
>> PDE entries and grab pages from PoD super list. That can pretty much
>> make 1gb_p2m_pod.patch go away. 
>> 
>> 
>> 
>> Any comment/suggestion on design idea will be appreciated.
>> 
>> 
>> 
>> Thanks,
>> 
>> 
>> 
>> -Wei
>> 
>> 
>> 
>> 
>> 
>> The following is the description:
>> 
>> === 1gb_tools.patch ===
>> 
>> Extend existing setup_guest() function. Basically, it tries to
>> allocate 1GB pages whenever available. If this request fails, it
>> falls back to 2MB. If both fail, then 4KB pages will be used.
>> 
>> 
>> 
>> === 1gb_p2m.patch ===
>> 
>> * p2m_next_level()
>> 
>> Check PSE bit of L3 page table entry. If 1GB is found (PSE=1), we
>> split 1GB into 512 2MB pages. 
>> 
>> 
>> 
>> * p2m_set_entry()
>> 
>> Configure the PSE bit of L3 P2M table if page order == 18 (1GB).
>> 
>> 
>> 
>> * p2m_gfn_to_mfn()
>> 
>> Add support for 1GB case when doing gfn to mfn translation. When L3
>> entry is marked as POPULATE_ON_DEMAND, we call
>> 2m_pod_demand_populate(). Otherwise, we do the regular address
>> translation (gfn ==> mfn). 
>> 
>> 
>> 
>> * p2m_gfn_to_mfn_current()
>> 
>> This is similar to p2m_gfn_to_mfn(). When L3 entry s marked as
>> POPULATE_ON_DEMAND, it demands a populate using
>> p2m_pod_demand_populate(). Otherwise, it does a normal translation.
>> 1GB page is taken into consideration. 
>> 
>> 
>> 
>> * set_p2m_entry()
>> 
>> Request 1GB page
>> 
>> 
>> 
>> * audit_p2m()
>> 
>> Support 1GB while auditing p2m table.
>> 
>> 
>> 
>> * p2m_change_type_global()
>> 
>> Deal with 1GB page when changing global page type.
>> 
>> 
>> 
>> === 1gb_p2m_pod.patch ===
>> 
>> * xen/include/asm-x86/p2m.h
>> 
>> Minor change to deal with PoD. It separates super page cache list
>> into 2MB and 1GB lists. Similarly, we record last gpfn of sweeping
>> for both 2MB and 1GB. 
>> 
>> 
>> 
>> * p2m_pod_cache_add()
>> 
>> Check page order and add 1GB super page into PoD 1GB cache list.
>> 
>> 
>> 
>> * p2m_pod_cache_get()
>> 
>> Grab a page from cache list. It tries to break 1GB page into 512 2MB
>> pages if 2MB PoD list is empty. Similarly, 4KB can be requested from
>> super pages. The breaking order is 2MB then 1GB.
>> 
>> 
>> 
>> * p2m_pod_cache_target()
>> 
>> This function is used to set PoD cache size. To increase PoD target,
>> we try to allocate 1GB from xen domheap. If this fails, we try 2MB.
>> If both fail, we try 4KB which is guaranteed to work.
>> 
>> 
>> 
>> To decrease the target, we use a similar approach. We first try to
>> free 1GB pages from 1GB PoD cache list. If such request fails, we
>> try 2MB PoD cache list. If both fail, we try 4KB list.
>> 
>> 
>> 
>> * p2m_pod_zero_check_superpage_1gb()
>> 
>> This adds a new function to check for 1GB page. This function is
>> similar to p2m_pod_zero_check_superpage_2mb().
>> 
>> 
>> 
>> * p2m_pod_zero_check_superpage_1gb()
>> 
>> We add a new function to sweep 1GB page from guest memory. This is
>> the same as p2m_pod_zero_check_superpage_2mb().
>> 
>> 
>> 
>> * p2m_pod_demand_populate()
>> 
>> The trick of this function is to do remap_and_retry if
>> p2m_pod_cache_get() fails. When p2m_pod_get() fails, this function
>> will splits p2m table entry into smaller ones (e.g. 1GB ==> 2MB or
>> 2MB ==> 4KB). That can guarantee populate demands always work. 
>> 
>> 
>> 
>> 
>> 
>> _______________________________________________
>> Xen-devel mailing list
>> Xen-devel@xxxxxxxxxxxxxxxxxxx
>> http://lists.xensource.com/xen-devel

Attachment: 1gb_tools.patch
Description: 1gb_tools.patch

Attachment: 1gb_p2m_rebase.patch
Description: 1gb_p2m_rebase.patch

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.