linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [RFC] mmap(MAP_CONTIG)
@ 2017-10-03 23:56 Mike Kravetz
  2017-10-04 11:54 ` Michal Nazarewicz
                   ` (4 more replies)
  0 siblings, 5 replies; 63+ messages in thread
From: Mike Kravetz @ 2017-10-03 23:56 UTC (permalink / raw)
  To: linux-mm, linux-kernel, linux-api
  Cc: Marek Szyprowski, Michal Nazarewicz, Aneesh Kumar K.V,
	Joonsoo Kim, Guy Shattah, Christoph Lameter, Mike Kravetz

At Plumbers this year, Guy Shattah and Christoph Lameter gave a presentation
titled 'User space contiguous memory allocation for DMA' [1].  The slides
point out the performance benefits of devices that can take advantage of
larger physically contiguous areas.

When such physically contiguous allocations are done today, they are done
within drivers themselves in an ad-hoc manner.  In addition to allocations
for DMA, allocations of this type are also performed for buffers used by
coprocessors and other acceleration engines.

As mentioned in the presentation, posix specifies an interface to obtain
physically contiguous memory.  This is via typed memory objects as described
in the posix_typed_mem_open() man page.  Since Linux today does not follow
the posix typed memory object model, adding infrastructure for contiguous
memory allocations seems to be overkill.  Instead, a proposal was suggested
to add support via a mmap flag: MAP_CONTIG.

mmap(MAP_CONTIG) would have the following semantics:
- The entire mapping (length size) would be backed by physically contiguous
  pages.
- If 'length' physically contiguous pages can not be allocated, then mmap
  will fail.
- MAP_CONTIG only works with MAP_ANONYMOUS mappings.
- MAP_CONTIG will lock the associated pages in memory.  As such, the same
  privileges and limits that apply to mlock will also apply to MAP_CONTIG.
- A MAP_CONTIG mapping can not be expanded.
- At fork time, private MAP_CONTIG mappings will be converted to regular
  (non-MAP_CONTIG) mapping in the child.  As such a COW fault in the child
  will not require a contiguous allocation.

Some implementation considerations:
- alloc_contig_range() or similar will be used for allocations larger
  than MAX_ORDER.
- MAP_CONTIG should imply MAP_POPULATE.  At mmap time, all pages for the
  mapping must be 'pre-allocated', and they can only be used for the mapping,
  so it makes sense to 'fault in' all pages.
- Using 'pre-allocated' pages in the fault paths may be intrusive.
- We need to keep keep track of those pre-allocated pages until the vma is
  tore down, especially if free_contig_range() must be called.

Thoughts?
- Is such an interface useful?
- Any other ideas on how to achieve the same functionality?
- Any thoughts on implementation?

I have started down the path of pre-allocating contiguous pages at mmap
time and hanging those off the vma(vm_private_data) with some kludges to
use the pages at fault time.  It is really ugly, which is why I am not
sharing the code.  Hoping for some comments/suggestions.

[1] https://www.linuxplumbersconf.org/2017/ocw/proposals/4669
-- 
Mike Kravetz

^ permalink raw reply	[flat|nested] 63+ messages in thread

end of thread, other threads:[~2017-10-24 22:49 UTC | newest]

Thread overview: 63+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-10-03 23:56 [RFC] mmap(MAP_CONTIG) Mike Kravetz
2017-10-04 11:54 ` Michal Nazarewicz
2017-10-04 17:08   ` Mike Kravetz
2017-10-04 21:29     ` Laura Abbott
2017-10-04 13:49 ` Anshuman Khandual
2017-10-04 16:05   ` Christopher Lameter
2017-10-04 17:38     ` Mike Kravetz
2017-10-04 17:35   ` Mike Kravetz
2017-10-05  7:06 ` Vlastimil Babka
2017-10-05 14:30   ` Christopher Lameter
2017-10-12  1:46 ` [RFC PATCH 0/3] Add mmap(MAP_CONTIG) support Mike Kravetz
2017-10-12  1:46   ` [RFC PATCH 1/3] mm/map_contig: Add VM_CONTIG flag to vma struct Mike Kravetz
2017-10-12  1:46   ` [RFC PATCH 2/3] mm/map_contig: Use pre-allocated pages for VM_CONTIG mappings Mike Kravetz
2017-10-12 11:04     ` Anshuman Khandual
2017-10-12  1:46   ` [RFC PATCH 3/3] mm/map_contig: Add mmap(MAP_CONTIG) support Mike Kravetz
2017-10-12 11:22     ` Anshuman Khandual
2017-10-13 15:14       ` Christopher Lameter
2017-10-12 14:37     ` Michal Hocko
2017-10-12 17:19       ` Mike Kravetz
2017-10-13  8:40         ` Michal Hocko
2017-10-13 15:20           ` Christopher Lameter
2017-10-13 15:28             ` Michal Hocko
2017-10-13 15:42               ` Christopher Lameter
2017-10-13 15:47                 ` Michal Hocko
2017-10-13 15:56                   ` Christopher Lameter
2017-10-13 16:17                     ` Michal Hocko
2017-10-15  7:50                       ` Guy Shattah
2017-10-16  8:24                         ` Michal Hocko
2017-10-16  9:11                           ` Guy Shattah
2017-10-16 12:32                             ` Michal Hocko
2017-10-16 16:00                               ` Christopher Lameter
2017-10-16 17:42                                 ` Michal Hocko
2017-10-16 17:56                                   ` Christopher Lameter
2017-10-16 18:17                                     ` Michal Hocko
2017-10-23 15:25                                   ` David Nellans
2017-10-17 10:50                               ` Guy Shattah
2017-10-17 10:59                                 ` Michal Hocko
2017-10-17 13:22                                 ` Michal Nazarewicz
2017-10-17 14:20                                   ` Guy Shattah
2017-10-17 17:44                                     ` Vlastimil Babka
2017-10-17 18:23                                     ` Mike Kravetz
2017-10-17 19:56                                       ` Vlastimil Babka
2017-10-16 10:33                         ` Michal Nazarewicz
2017-10-16 11:09                           ` Guy Shattah
2017-10-16 17:43                         ` Mike Kravetz
2017-10-16 18:07                           ` Michal Hocko
2017-10-16 20:32                             ` Mike Kravetz
2017-10-16 20:58                               ` Michal Hocko
2017-10-16 21:03                               ` Laura Abbott
2017-10-16 21:18                                 ` Mike Kravetz
2017-10-17  6:59                               ` Vlastimil Babka
2017-10-15  6:58                   ` Pavel Machek
2017-10-16  8:18                     ` Michal Hocko
2017-10-16  9:54                       ` Pavel Machek
2017-10-16 12:18                         ` Michal Hocko
2017-10-16 16:02                           ` Christopher Lameter
2017-10-16 17:33                             ` Michal Hocko
2017-10-16 17:53                               ` Christopher Lameter
2017-10-15  8:07     ` Guy Shattah
2017-10-12 10:36   ` [RFC PATCH 0/3] " Anshuman Khandual
2017-10-12 14:25     ` Anshuman Khandual
2017-10-23 22:10 ` [RFC] mmap(MAP_CONTIG) Dave Hansen
2017-10-24 22:49   ` Mike Kravetz

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).