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

Re: [Xen-devel] Questions on EPT dump and creation

2011/7/18 Tim Deegan <Tim.Deegan@xxxxxxxxxx>

At 21:57 +0800 on 18 Jul (1311026244), YAO wrote:
> First, I used "xm debug-key D" to dump ept mappings. But I have a doubt
> about the mapping.
> I started a 32bit HVM which memory is 512, so the max gfn should be 0x1ffff.
> But the result of "xm dmesg" showed gfn->mfn mapping until 0xfffff.
> Output looked like below:
> (XEN) gfn: fc012 Âmfn: 179e6
> (XEN) gfn: fc013 Âmfn: 179e5
> (XEN) gfn: fee00 Âmfn: 2e8
> (XEN) gfn: feffb Âmfn: 178fd
> (XEN) gfn: feffc Âmfn: 178fc
> (XEN) gfn: feffd Âmfn: 178fb
> (XEN) gfn: feffe Âmfn: 178fa
> (XEN) gfn: fefff Âmfn: 178f9
> (XEN) gfn: fffff Âmfn: 2eb
> What I think is every HVM has one EPT table and the table maps the allocated
> memory like from 0 to 0x1ffff, why does the HVM ept map all the 4G space?
> Isn't it unneccessary and waste of memory?

Guest PFN-space is not contiguous. ÂLike a real PC, there are some
areas of the address space just below 4GB that are used for special
things like MMIO. ÂSo you should see RAM up to about 512MiB, then a big
gap, and then the entries above.

> Second, I want to copy the system ept and used the copy for later
> translation. Since the HVM is 512M, so I need one PML4 pointed by eptp, one
> PDP pointed by PML4 entry[0], one PD pointed by PDP entry[0], 512 PT's
> pointed by all PD entries. After all settings are done, I'v got gfn->mfn
> mapping of 1G memory. I think it should be working, but not. Where am I
> wrong? What would I pay attention to?

As you noticed there are some entries that are not in the bottom
512MiB; you'll need to handle those as well.

Other than that it's hard to tell from your description. ÂWhat are you
trying to achieve by copying the p2m?

Hi, Tim
Thanks for your reply. Copying the ept table is my first step, next I want to switch between system ept and my own ept smoothly.
Attach is my code of copying ept and switching ept, I wish you could take a look at it.

I copied exactly every mapping one by one, but when I dumped the gfn->mfn mapping(I've modified ept_dump_p2m_table to find unequal entry),
there are some strange output like this:

(XEN) gfn: 200 Âmfn: 117def Âmy_mfn: 10d600
(XEN) gfn: 400 Âmfn: 117dee Âmy_mfn: 111200
(XEN) gfn: 600 Âmfn: 117ded Âmy_mfn: 111000
(XEN) gfn: 800 Âmfn: 117dec Âmy_mfn: 10de00
(XEN) gfn: 14a00 Âmfn: 1176bb Âmy_mfn: 10800
(XEN) gfn: 14c00 Âmfn: 1176ba Âmy_mfn: 10600
(XEN) gfn: 14e00 Âmfn: 1176b9 Âmy_mfn: 10400
(XEN) gfn: 15000 Âmfn: 1176b8 Âmy_mfn: 10200
(XEN) gfn: 1f600 Âmfn: 117b46 Âmy_mfn: 4200
(XEN) gfn: 1f800 Âmfn: 117b45 Âmy_mfn: 4000

It shouldn't have any unequal entry, I thought...and
Every mismatch has a step of 0x200 until 0x1f800, which really confused me.



Tim Deegan <Tim.Deegan@xxxxxxxxxx>
Principal Software Engineer, Xen Platform Team
Citrix Systems UK Ltd. Â(Company #02937203, SL9 0BG)

Attachment: mycode.c
Description: Text Data

Xen-devel mailing list



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