From: David Hildenbrand <david@redhat.com>
To: Anthony Yznaga <anthony.yznaga@oracle.com>, linux-mm@kvack.org
Cc: akpm@linux-foundation.org, andreyknvl@gmail.com, arnd@arndb.de,
bp@alien8.de, brauner@kernel.org, bsegall@google.com,
corbet@lwn.net, dave.hansen@linux.intel.com,
dietmar.eggemann@arm.com, ebiederm@xmission.com, hpa@zytor.com,
jakub.wartak@mailbox.org, jannh@google.com,
juri.lelli@redhat.com, khalid@kernel.org,
liam.howlett@oracle.com, linyongting@bytedance.com,
lorenzo.stoakes@oracle.com, luto@kernel.org,
markhemm@googlemail.com, maz@kernel.org, mhiramat@kernel.org,
mgorman@suse.de, mhocko@suse.com, mingo@redhat.com,
muchun.song@linux.dev, neilb@suse.de, osalvador@suse.de,
pcc@google.com, peterz@infradead.org, pfalcato@suse.de,
rostedt@goodmis.org, rppt@kernel.org, shakeel.butt@linux.dev,
surenb@google.com, tglx@linutronix.de, vasily.averin@linux.dev,
vbabka@suse.cz, vincent.guittot@linaro.org,
viro@zeniv.linux.org.uk, vschneid@redhat.com,
willy@infradead.org, x86@kernel.org, xhao@linux.alibaba.com,
linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-arch@vger.kernel.org
Subject: Re: [PATCH v3 00/22] Add support for shared PTEs across processes
Date: Mon, 8 Sep 2025 22:32:22 +0200 [thread overview]
Message-ID: <5b7e71e8-4e31-4699-b656-c35dce678a80@redhat.com> (raw)
In-Reply-To: <20250820010415.699353-1-anthony.yznaga@oracle.com>
On 20.08.25 03:03, Anthony Yznaga wrote:
> Memory pages shared between processes require page table entries
> (PTEs) for each process. Each of these PTEs consume some of
> the memory and as long as the number of mappings being maintained
> is small enough, this space consumed by page tables is not
> objectionable. When very few memory pages are shared between
> processes, the number of PTEs to maintain is mostly constrained by
> the number of pages of memory on the system. As the number of shared
> pages and the number of times pages are shared goes up, amount of
> memory consumed by page tables starts to become significant. This
> issue does not apply to threads. Any number of threads can share the
> same pages inside a process while sharing the same PTEs. Extending
> this same model to sharing pages across processes can eliminate this
> issue for sharing across processes as well.
>
> Some of the field deployments commonly see memory pages shared
> across 1000s of processes. On x86_64, each page requires a PTE that
> is 8 bytes long which is very small compared to the 4K page
> size. When 2000 processes map the same page in their address space,
> each one of them requires 8 bytes for its PTE and together that adds
> up to 8K of memory just to hold the PTEs for one 4K page. On a
> database server with 300GB SGA, a system crash was seen with
> out-of-memory condition when 1500+ clients tried to share this SGA
> even though the system had 512GB of memory. On this server, in the
> worst case scenario of all 1500 processes mapping every page from
> SGA would have required 878GB+ for just the PTEs. If these PTEs
> could be shared, the a substantial amount of memory saved.
>
> This patch series implements a mechanism that allows userspace
> processes to opt into sharing PTEs. It adds a new in-memory
> filesystem - msharefs. A file created on msharefs represents a
> shared region where all processes mapping that region will map
> objects within it with shared PTEs. When the file is created,
> a new host mm struct is created to hold the shared page tables
> and vmas for objects later mapped into the shared region. This
> host mm struct is associated with the file and not with a task.
> When a process mmap's the shared region, a vm flag VM_MSHARE
> is added to the vma. On page fault the vma is checked for the
> presence of the VM_MSHARE flag. If found, the host mm is
> searched for a vma that covers the fault address. Fault handling
> then continues using that host vma which establishes PTEs in the
> host mm. Fault handling in a shared region also links the shared
> page table to the process page table if the shared page table
> already exists.
Regarding the overall design, two important questions:
In the context of this series, how do we handle VMA-modifying functions
like mprotect/some madvise/mlock/mempolicy/...? Are they currently
blocked when applied to a mshare VMA?
And how are we handling other page table walkers that don't modify VMAs
like MADV_DONTNEED, smaps, migrate_pages, ... etc?
--
Cheers
David / dhildenb
next prev parent reply other threads:[~2025-09-08 20:32 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-08-20 1:03 [PATCH v3 00/22] Add support for shared PTEs across processes Anthony Yznaga
2025-08-20 1:03 ` [PATCH v3 01/22] mm: Add msharefs filesystem Anthony Yznaga
2025-09-08 18:29 ` Liam R. Howlett
2025-09-08 19:09 ` Anthony Yznaga
2025-09-10 12:14 ` Pedro Falcato
2025-09-10 12:46 ` David Hildenbrand
2025-08-20 1:03 ` [PATCH v3 02/22] mm/mshare: pre-populate msharefs with information file Anthony Yznaga
2025-08-20 1:03 ` [PATCH v3 03/22] mm/mshare: make msharefs writable and support directories Anthony Yznaga
2025-08-20 1:03 ` [PATCH v3 04/22] mm/mshare: allocate an mm_struct for msharefs files Anthony Yznaga
2025-08-20 1:03 ` [PATCH v3 05/22] mm/mshare: add ways to set the size of an mshare region Anthony Yznaga
2025-08-20 1:03 ` [PATCH v3 06/22] mm/mshare: Add a vma flag to indicate " Anthony Yznaga
2025-09-08 18:45 ` David Hildenbrand
2025-09-08 18:56 ` Anthony Yznaga
2025-09-08 19:02 ` David Hildenbrand
2025-09-08 19:03 ` Anthony Yznaga
2025-08-20 1:04 ` [PATCH v3 07/22] mm/mshare: Add mmap support Anthony Yznaga
2025-08-20 19:02 ` kernel test robot
2025-08-20 1:04 ` [PATCH v3 08/22] mm/mshare: flush all TLBs when updating PTEs in an mshare range Anthony Yznaga
2025-08-20 1:04 ` [PATCH v3 09/22] sched/numa: do not scan msharefs vmas Anthony Yznaga
2025-08-20 1:04 ` [PATCH v3 10/22] mm: add mmap_read_lock_killable_nested() Anthony Yznaga
2025-08-20 1:04 ` [PATCH v3 11/22] mm: add and use unmap_page_range vm_ops hook Anthony Yznaga
2025-08-21 15:40 ` kernel test robot
2025-08-20 1:04 ` [PATCH v3 12/22] mm: introduce PUD page table shared count Anthony Yznaga
2025-08-20 1:04 ` [PATCH v3 13/22] mm/mshare: prepare for page table sharing support Anthony Yznaga
2025-09-15 15:27 ` Lorenzo Stoakes
2025-08-20 1:04 ` [PATCH v3 14/22] x86/mm: enable page table sharing Anthony Yznaga
2025-08-20 1:04 ` [PATCH v3 15/22] mm: create __do_mmap() to take an mm_struct * arg Anthony Yznaga
2025-08-20 1:04 ` [PATCH v3 16/22] mm: pass the mm in vma_munmap_struct Anthony Yznaga
2025-08-20 1:04 ` [PATCH v3 17/22] sched/mshare: mshare ownership Anthony Yznaga
2025-08-20 1:04 ` [PATCH v3 18/22] mm/mshare: Add an ioctl for mapping objects in an mshare region Anthony Yznaga
2025-08-20 20:36 ` kernel test robot
2025-08-20 1:04 ` [PATCH v3 19/22] mm/mshare: Add an ioctl for unmapping " Anthony Yznaga
2025-08-20 1:04 ` [PATCH v3 20/22] mm/mshare: support mapping files and anon hugetlb " Anthony Yznaga
2025-08-20 1:04 ` [PATCH v3 21/22] mm/mshare: provide a way to identify an mm as an mshare host mm Anthony Yznaga
2025-08-20 1:04 ` [PATCH v3 22/22] mm/mshare: charge fault handling allocations to the mshare owner Anthony Yznaga
2025-09-08 18:50 ` David Hildenbrand
2025-09-08 19:21 ` Anthony Yznaga
2025-09-08 20:28 ` David Hildenbrand
2025-09-08 20:55 ` Anthony Yznaga
2025-09-08 20:32 ` David Hildenbrand [this message]
2025-09-08 20:59 ` [PATCH v3 00/22] Add support for shared PTEs across processes Matthew Wilcox
2025-09-08 21:14 ` Anthony Yznaga
2025-09-09 7:53 ` David Hildenbrand
2025-09-09 18:29 ` Anthony Yznaga
2025-09-09 19:06 ` Lorenzo Stoakes
2026-02-20 21:35 ` Kalesh Singh
2026-02-21 12:40 ` Pedro Falcato
2026-02-23 17:43 ` Kalesh Singh
2026-02-23 19:55 ` anthony.yznaga
2026-02-25 22:53 ` Kalesh Singh
2026-02-24 9:40 ` David Hildenbrand (Arm)
2026-02-25 23:06 ` Kalesh Singh
2026-02-26 9:02 ` David Hildenbrand (Arm)
2026-02-26 21:22 ` Pedro Falcato
2026-02-27 6:34 ` Kalesh Singh
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=5b7e71e8-4e31-4699-b656-c35dce678a80@redhat.com \
--to=david@redhat.com \
--cc=akpm@linux-foundation.org \
--cc=andreyknvl@gmail.com \
--cc=anthony.yznaga@oracle.com \
--cc=arnd@arndb.de \
--cc=bp@alien8.de \
--cc=brauner@kernel.org \
--cc=bsegall@google.com \
--cc=corbet@lwn.net \
--cc=dave.hansen@linux.intel.com \
--cc=dietmar.eggemann@arm.com \
--cc=ebiederm@xmission.com \
--cc=hpa@zytor.com \
--cc=jakub.wartak@mailbox.org \
--cc=jannh@google.com \
--cc=juri.lelli@redhat.com \
--cc=khalid@kernel.org \
--cc=liam.howlett@oracle.com \
--cc=linux-arch@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linyongting@bytedance.com \
--cc=lorenzo.stoakes@oracle.com \
--cc=luto@kernel.org \
--cc=markhemm@googlemail.com \
--cc=maz@kernel.org \
--cc=mgorman@suse.de \
--cc=mhiramat@kernel.org \
--cc=mhocko@suse.com \
--cc=mingo@redhat.com \
--cc=muchun.song@linux.dev \
--cc=neilb@suse.de \
--cc=osalvador@suse.de \
--cc=pcc@google.com \
--cc=peterz@infradead.org \
--cc=pfalcato@suse.de \
--cc=rostedt@goodmis.org \
--cc=rppt@kernel.org \
--cc=shakeel.butt@linux.dev \
--cc=surenb@google.com \
--cc=tglx@linutronix.de \
--cc=vasily.averin@linux.dev \
--cc=vbabka@suse.cz \
--cc=vincent.guittot@linaro.org \
--cc=viro@zeniv.linux.org.uk \
--cc=vschneid@redhat.com \
--cc=willy@infradead.org \
--cc=x86@kernel.org \
--cc=xhao@linux.alibaba.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox