![]() ![]() This long-term pinning makesĪn underlying design problem more obvious. Over the years, more GUP uses have appeared (virtualization, deviceĭrivers, RDMA) that can keep the pages they get via GUP for a long period Process address space changes such as munmap(), mremap(), etc. Not synchronized with memory-mapped access to that data, nor with any Was small enough that there were not (we think) any reported problems.Īlso, userspace was expected to understand and accept that Direct IO was Pattern, and as such, the window for a concurrent writeback of GUP'd page Perform a direct copy to or from that page. To get the struct page behind a virtual address and to let storage hardware GUP was first introduced for Direct IO (O_DIRECT), allowing filesystem code Which have already occurred in the field. That file-backed memory + GUP is a recipe for potential problems, some of GUP has critical limitations that have been overlooked in particular, GUPĭoes not interact correctly with filesystems in all situations. For a long time, theĪPI to achieve that was get_user_pages ("GUP") and its variations. Memory that is specified via process virtual address. Some kernel components (file systems, device drivers) need to access Performance: here is an fio run on an NVMe drive, using this for the fio You really want to try some early testing) to run things such as fio. (there is git repo with that, which gets rebased madly, but it's there if This seems to be working pretty well here. ![]() The page_cache_add_speculative() routine. ģ) Tracking, instrumentation, and documentation patches, once all the callĤ) A small refactoring patch that I'm also going to submit separately, for Those are in various states of progress and disrepair, at. NOT shown: all of the other 100+ gup call site conversions. ![]() Infiniband/mm: convert put_page() to put_user_page*() Mm: introduce put_user_page*(), placeholder versions This approach has theĪdditional advantage of being very lightweight and therefore fast, becauseī) unlike previous approaches, there is no need to remove and re-add toĬ) it uses the same lock-free algorithms that get_user_pages alreadyġ) A patch to get the call site conversion started: (discussed in more detail in "track gup-pinned pages" commit description)ĭoes not require any additional struct page fields. But now that the dust has settled, it's time to show a I'm calling this RFC v2, even though with all the discussion it actually Mike Marciniszyn, Ralph Campbell, Tom Talpey, LKML, Jerome Glisse, Matthew Wilcox, Michal Hocko, Mike Rapoport, ` (8 more replies) 0 siblings, 9 replies 40+ messages in threadĬc: Al Viro, Christian Benvenuti, Christoph Hellwig,Ĭhristopher Lameter, Dan Williams, Dave Chinner,ĭennis Dalessandro, Doug Ledford, Jan Kara, Jason Gunthorpe, 5:21 ` mm: introduce put_user_page*(), placeholder versions john.hubbard RFC v2: mm: gup/dma tracking All of help / color / mirror / Atom feed * RFC v2: mm: gup/dma tracking 5:21 john.hubbard ![]()
0 Comments
Leave a Reply. |