WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

Re: [Xen-devel] pagetable pinning question

To: Christian Limpach <chris@xxxxxx>
Subject: Re: [Xen-devel] pagetable pinning question
From: Keir Fraser <Keir.Fraser@xxxxxxxxxxxx>
Date: Wed, 04 Feb 2004 08:16:27 +0000
Cc: xen-devel@xxxxxxxxxxxxxxxxxxxxx
Delivery-date: Wed, 04 Feb 2004 08:20:14 +0000
Envelope-to: steven.hand@xxxxxxxxxxxx
In-reply-to: Your message of "Tue, 03 Feb 2004 20:21:22 +0100." <0b1b01c3ea8a$ea40fd60$070414ac@pin>
List-archive: <http://sourceforge.net/mailarchive/forum.php?forum=xen-devel>
List-help: <mailto:xen-devel-request@lists.sourceforge.net?subject=help>
List-id: List for Xen developers <xen-devel.lists.sourceforge.net>
List-post: <mailto:xen-devel@lists.sourceforge.net>
List-subscribe: <https://lists.sourceforge.net/lists/listinfo/xen-devel>, <mailto:xen-devel-request@lists.sourceforge.net?subject=subscribe>
List-unsubscribe: <https://lists.sourceforge.net/lists/listinfo/xen-devel>, <mailto:xen-devel-request@lists.sourceforge.net?subject=unsubscribe>
Sender: xen-devel-admin@xxxxxxxxxxxxxxxxxxxxx
> I want to use pinning for the L1/L2 pagetables.  The currently activated
> pagetable maps itself and that works great.  But I (or rather whoever wrote
> the pagetable code) also wants to map inactive pagetables and this doesn't
> work because of the following check in get_twisted_l2_table:
>     if ( (l2v >> PAGE_SHIFT) != entry_pfn )
>     {
>         MEM_LOG("L2 tables may not map _other_ L2 tables!\n");
> 
> Are there counting or protection issues why this is disallowed or was it
> just not needed for Linux/Windows?

Both. 

Linux doesn't use linear pagetables, and Windows only has each page
directory mapping itself. 

Also, reference counting is somehat more complicated -- currently we
only track one mutually-exclusive type per page frame (writeable, page
directory, page table, or segment-descriptor table). If we allow page
directories to map other page directories then we really want to track
the "uses as page directory" and "uses as page table" separately.

Consider a page directory D mapped as a linear pagetable into every
other page directory in the system. If D is freed and subsequently
reused as a page table, we won't change Xen's 'type field' for D until
all mappings of D in other page tables have been blown away.

I see two possibilities:
 1. Whenever a PD is freed, require the guest to expunge all mappings
 of the PD from other page directories. Otherwise subsequent attempts
 to use the PD as a pagetable will fail.
 2. Reference count "used as PD" and "used as PT" separately. These
 counts could be maintained in the same memory word since the former
 count is always going to be very small.

Case 1 can easily be implemented -- would it be a reasonable fit with
NetBSD's operation when a page directory is released?
 
> I guess a work around would be to switch to the inactive pagetable and
> switch back when the mapping is no longer needed...

I guess it depends how often a process accesses another's PTEs. Maybe
fork times and CoW-fault latencies might be slowed down if you took
this approach? 

I can remove the check in Xen and requrie the guest to be involved in
cleaning up when a page directory is released, if this is a suitable
approach for NetBSD.

 -- Keir


-------------------------------------------------------
The SF.Net email is sponsored by EclipseCon 2004
Premiere Conference on Open Tools Development and Integration
See the breadth of Eclipse activity. February 3-5 in Anaheim, CA.
http://www.eclipsecon.org/osdn
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.sourceforge.net/lists/listinfo/xen-devel