[RFC PATCH 0/4] Convert perf ringbuffer to folios

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

 



The motivation here is to remove uses of page->mapping as part of the
quest to shrink struct page.  I'm unsure about some of this as the perf
ringbuffers present some new challenges that we haven't faced before.

Perf has three different ways of allocating memory for the ring buffer.
There's an individual pages way, a vmalloc way and a physically contiguous
way (for the aux buffers).  The fault handler can map all three.

The fault handler can map the _first_ page read-write, but all subsequent
pages are mapped read-only.  That makes calling vm_insert_page() not
feasible; that would allow all pages to be mapped read-write (yes?)
So the fault handler sets vmf->page and returns, in order to let
finish_fault() set it up.

I'm not really sure why page/folio->mapping needs to be set by the
fault handler.  What goes wrong if we leave it as NULL?  Likewise, do
we really need to set ->index?  I've taken that out for now, but maybe
that'll make something fail (perhaps an rmap walk?  Do we really need to
do rmap walks on device driver mappings?)

I don't like drivers playing these games with pages/folios.  I think we
need better support for these kinds of things.  Probably in the form of
helpers, given how unusual some of perf's requirements are.

More broadly, we don't have a detailed plan for how vmalloc memory gets
handled in a memdesc world.  For the vast majority of vmalloc allocations,
the pages allocated need no descriptor; they're only accessed through
the virtual address by the CPU.  This is a case where we need to mmap
the vmalloc memory.  There are also cases where we need to do I/O to
vmalloc memory; we need to understand what fields from struct page are
really needed for each of these two requirements.

Matthew Wilcox (Oracle) (4):
  perf: Convert perf_mmap_(alloc,free)_page to folios
  mm: Add vmalloc_user_node()
  perf: Use vmalloc_to_folio()
  perf: Use folios for the aux ringbuffer & pagefault path

 include/linux/mm.h          |  5 +++
 include/linux/vmalloc.h     | 17 +++++++-
 kernel/events/core.c        | 13 ++++--
 kernel/events/ring_buffer.c | 83 +++++++++++++++++--------------------
 mm/vmalloc.c                |  9 ++--
 5 files changed, 72 insertions(+), 55 deletions(-)

-- 
2.40.1





[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [eCos]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux