Large virtual page size support.

Julian Elischer julian at elischer.org
Fri Jan 20 17:02:15 PST 2006


Alan Cox wrote:

>On Tue, Jan 17, 2006 at 11:18:56PM +0100, Poul-Henning Kamp wrote:
>  
>
>>In message <43CD612E.2060002 at elischer.org>, Julian Elischer writes:
>>    
>>
>>>Jeff Roberson wrote:
>>>
>>>      
>>>
>>>>I have implemented support in the vm for PAGE_SIZE values which are a 
>>>>multiple of the hardware page size.  This is primarily useful for two 
>>>>things:
>>>>        
>>>>
>>>Mach (and the VM system we inherrited from it) had this. I beieve it was 
>>>removed with teh comment
>>>"If we need this and someone is willing to support it it can be added 
>>>back" .
>>>      
>>>
>>It was a VAX artifact and not very usable.  I belive we have a couple
>>of comments and macros which still talk about "clicks".
>>    
>>
>
>Like Jeff's patch, Mach's VM design allowed for two distinct page
>sizes, one being the native, hardware page size and the other being a
>larger, abstract page size.  The essential difference between Jeff's
>patch and what Mach did on the VAX is that Mach's use of the native,
>hardware page size was entirely within the pmap and locore-level code.
>For example, the hardware-supported page size on the VAX was 512
>bytes.  However, as far as the machine-independent layer of the Mach
>kernel was concerned the page size was 4K bytes.  This included the
>machine-independent part of the virtual memory system; it too believed
>that the page size was 4K bytes.  As a consequences, the granularity
>of mappings and protection was 4K bytes.  Finally, there was nothing
>VAX-specific about the design and implementation of this feature.
>However, I don't recall any other pmap implementations having
>different native and abstract page sizes.  Today, I speculate that you
>could implement a distinct native and abstract page size on the sparc
>because different versions of processor have had different page sizes.
>Consequently, the ABI documents that I've seen don't specify a
>particular page size only that 64K bytes is the largest that a page
>will ever be; to learn the precise page size, they say that you must
>call the OS at run time.  So, you could use a larger abstract page
>without breaking the ABI.
>
>In constrast, Jeff's patch has both the machine-dependent and
>machine-independent layers knowing about both page sizes.  Moreover,
>the granularity of mappings and protection is still the native,
>hardware page size.  In other words, within the vm_map the page size
>is the native, hardware page size, but over in the vm_object the page
>size is the larger, abstract size.  (Reread the last sentence again
>before continuing.)  As you can imagine, this is a lot trickier to get
>right in the first place and maintain in the long run than what Mach
>did.  This is why Jeff is being so circumspect about committing this
>work.  Other the hand, it offers essentially the same benefits as what
>Mach did without breaking the i386 ABI.
>  
>

was this the reason that it was done in a different way?
What was the reason to not do it entirely in the pmap layer (e.g. Mach).
I know hte Maxh people were very proud of their implementation. It
always appeared in their technical descriptions.

The phrase "this is a lot trickier to [...] maintain in the long run"
worries me..   There must be a reason to not go with the simpler approach..
What was it?

>Alan
>  
>


More information about the freebsd-arch mailing list