tech-kern archive

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

Re: Introducing non-RAM managed page ("device page")



OK, the previous mail was misleading.  Let me rephrease:

- Make struct vm_page opaque.  It's not always a page cache.  And,
- introduce "device pages".

>    UVM allocates a managed page's state (struct vm_page) for each page-sized 
> RAM,
>    because its main purpose is "page cache" - cache of on-disk page-sized 
> data.
>    OTOH, "device pages" is always volatile.  They're not cache.
> 
> i think there are more reasons than simple page cache issues.
>    
>    I'd propose a simple extension to struct vm_page handling.  Make ``struct
>    vm_page *'' either a pointer to its object *or* a magic integral value, 
> which
>    contains physical address (or offset of its physical device's base).  
> Users of
>    struct vm_page * have to check if it's really a RAM's vm_page, like
>    
>       if (uvm_pageisdevice_p(pg)) {
>               ...
>       }
>    
>    If anyone knows things I'm missing, please let me know.
> 
> there are hundreds of uses of this that would need to be updated.  it
> seems like a very invasive hack to support your use-cases.

Some checks need to be added.  If a given struct vm_page * is known, no
extra check is needed.  I don't think those changes will be hundreds.

> can you do it with the "wasteful" full vm_page and see what happens?
> this seems like a premature and extremely invasive optimisation.

It's possible, of course.

> i'd like to see some more support in the MI VM code to handle different
> page sizes (large ones :-) and other similar problems in the future, but
> this does not seem like the right way forward to me.

Masao


Home | Main Index | Thread Index | Old Index