All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bagas Sanjaya <bagasdotme@gmail.com>
To: Anthony Yznaga <anthony.yznaga@oracle.com>,
	akpm@linux-foundation.org, willy@infradead.org,
	markhemm@googlemail.com, viro@zeniv.linux.org.uk,
	david@redhat.com, khalid@kernel.org
Cc: jthoughton@google.com, corbet@lwn.net, dave.hansen@intel.com,
	kirill@shutemov.name, luto@kernel.org, brauner@kernel.org,
	arnd@arndb.de, ebiederm@xmission.com, catalin.marinas@arm.com,
	mingo@redhat.com, peterz@infradead.org, liam.howlett@oracle.com,
	lorenzo.stoakes@oracle.com, vbabka@suse.cz, jannh@google.com,
	hannes@cmpxchg.org, mhocko@kernel.org, roman.gushchin@linux.dev,
	shakeel.butt@linux.dev, muchun.song@linux.dev,
	tglx@linutronix.de, cgroups@vger.kernel.org, x86@kernel.org,
	linux-doc@vger.kernel.org, linux-arch@vger.kernel.org,
	linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	mhiramat@kernel.org, rostedt@goodmis.org,
	vasily.averin@linux.dev, xhao@linux.alibaba.com, pcc@google.com,
	neilb@suse.de, maz@kernel.org
Subject: Re: [PATCH 01/20] mm: Add msharefs filesystem
Date: Tue, 4 Feb 2025 08:52:14 +0700	[thread overview]
Message-ID: <Z6FyztBFs1Mwm2_K@archie.me> (raw)
In-Reply-To: <20250124235454.84587-2-anthony.yznaga@oracle.com>

[-- Attachment #1: Type: text/plain, Size: 4051 bytes --]

On Fri, Jan 24, 2025 at 03:54:35PM -0800, Anthony Yznaga wrote:
> diff --git a/Documentation/filesystems/msharefs.rst b/Documentation/filesystems/msharefs.rst
> new file mode 100644
> index 000000000000..c3c7168aa18f
> --- /dev/null
> +++ b/Documentation/filesystems/msharefs.rst
> @@ -0,0 +1,107 @@
> +.. SPDX-License-Identifier: GPL-2.0
> +
> +=====================================================
> +msharefs - a filesystem to support shared page tables
> +=====================================================
> +
> +msharefs is a ram-based filesystem that allows multiple processes to
> +share page table entries for shared pages. To enable support for
> +msharefs the kernel must be compiled with CONFIG_MSHARE set.
> +
> +msharefs is typically mounted like this::
> +
> +	mount -t msharefs none /sys/fs/mshare
> +
> +A file created on msharefs creates a new shared region where all
> +processes mapping that region will map it using shared page table
> +entries. ioctls are used to initialize or retrieve the start address
> +and size of a shared region and to map objects in the shared
> +region. It is important to note that an msharefs file is a control
> +file for the shared region and does not contain the contents
> +of the region itself.
> +
> +Here are the basic steps for using mshare::
> +
> +1. Mount msharefs on /sys/fs/mshare::
> +
> +	mount -t msharefs msharefs /sys/fs/mshare
> +
> +2. mshare regions have alignment and size requirements. Start
> +   address for the region must be aligned to an address boundary and
> +   be a multiple of fixed size. This alignment and size requirement
> +   can be obtained by reading the file ``/sys/fs/mshare/mshare_info``
> +   which returns a number in text format. mshare regions must be
> +   aligned to this boundary and be a multiple of this size.
> +
> +3. For the process creating an mshare region::
> +
> +a. Create a file on /sys/fs/mshare, for example:

Should the creating mshare region sublist be nested list?

> +
> +.. code-block:: c
> +
> +	fd = open("/sys/fs/mshare/shareme",
> +			O_RDWR|O_CREAT|O_EXCL, 0600);
> +
> +b. Establish the starting address and size of the region:
> +
> +.. code-block:: c
> +
> +	struct mshare_info minfo;
> +
> +	minfo.start = TB(2);
> +	minfo.size = BUFFER_SIZE;
> +	ioctl(fd, MSHAREFS_SET_SIZE, &minfo);
> +
> +c. Map some memory in the region:
> +
> +.. code-block:: c
> +
> +	struct mshare_create mcreate;
> +
> +	mcreate.addr = TB(2);
> +	mcreate.size = BUFFER_SIZE;
> +	mcreate.offset = 0;
> +	mcreate.prot = PROT_READ | PROT_WRITE;
> +	mcreate.flags = MAP_ANONYMOUS | MAP_SHARED | MAP_FIXED;
> +	mcreate.fd = -1;
> +
> +	ioctl(fd, MSHAREFS_CREATE_MAPPING, &mcreate);
> +
> +d. Map the mshare region into the process:
> +
> +.. code-block:: c
> +
> +	mmap((void *)TB(2), BUF_SIZE,
> +		PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
> +
> +e. Write and read to mshared region normally.
> +
> +
> +4. For processes attaching an mshare region::
> +
> +a. Open the file on msharefs, for example:
> +
> +.. code-block:: c
> +
> +	fd = open("/sys/fs/mshare/shareme", O_RDWR);
> +
> +b. Get information about mshare'd region from the file:
> +
> +.. code-block:: c
> +
> +	struct mshare_info minfo;
> +
> +	ioctl(fd, MSHAREFS_GET_SIZE, &minfo);
> +
> +c. Map the mshare'd region into the process:
> +
> +.. code-block:: c
> +
> +	mmap(minfo.start, minfo.size,
> +		PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
> +
> +5. To delete the mshare region:
> +
> +.. code-block:: c
> +
> +		unlink("/sys/fs/mshare/shareme");

Sphinx reports htmldocs warnings:

Documentation/filesystems/msharefs.rst:25: WARNING: Literal block expected; none found. [docutils]
Documentation/filesystems/msharefs.rst:38: WARNING: Literal block expected; none found. [docutils]
Documentation/filesystems/msharefs.rst:82: WARNING: Literal block expected; none found. [docutils]

Thanks.

-- 
An old man doll... just what I always wanted! - Clara

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]

  parent reply	other threads:[~2025-02-04  1:52 UTC|newest]

Thread overview: 37+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-01-24 23:54 [PATCH 00/20] Add support for shared PTEs across processes Anthony Yznaga
2025-01-24 23:54 ` [PATCH 01/20] mm: Add msharefs filesystem Anthony Yznaga
2025-01-25  3:13   ` Randy Dunlap
2025-01-25 20:05     ` Anthony Yznaga
2025-01-25 21:10       ` Matthew Wilcox
2025-01-27 17:01         ` Anthony Yznaga
2025-02-04  1:52   ` Bagas Sanjaya [this message]
2025-02-04 16:41     ` Anthony Yznaga
2025-01-24 23:54 ` [PATCH 02/20] mm/mshare: pre-populate msharefs with information file Anthony Yznaga
2025-01-24 23:54 ` [PATCH 03/20] mm/mshare: make msharefs writable and support directories Anthony Yznaga
2025-01-24 23:54 ` [PATCH 04/20] mm/mshare: allocate an mm_struct for msharefs files Anthony Yznaga
2025-01-24 23:54 ` [PATCH 05/20] mm/mshare: Add ioctl support Anthony Yznaga
2025-01-24 23:54 ` [PATCH 06/20] mm/mshare: Add a vma flag to indicate an mshare region Anthony Yznaga
2025-01-24 23:54 ` [PATCH 07/20] mm/mshare: Add mmap support Anthony Yznaga
2025-01-24 23:54 ` [PATCH 08/20] mm/mshare: flush all TLBs when updating PTEs in an mshare range Anthony Yznaga
2025-01-24 23:54 ` [PATCH 09/20] sched/numa: do not scan msharefs vmas Anthony Yznaga
2025-01-24 23:54 ` [PATCH 10/20] mm: add mmap_read_lock_killable_nested() Anthony Yznaga
2025-01-24 23:54 ` [PATCH 11/20] mm: add and use unmap_page_range vm_ops hook Anthony Yznaga
2025-01-24 23:54 ` [PATCH 12/20] mm/mshare: prepare for page table sharing support Anthony Yznaga
2025-01-24 23:54 ` [PATCH 13/20] x86/mm: enable page table sharing Anthony Yznaga
2025-01-24 23:54 ` [PATCH 14/20] mm: create __do_mmap() to take an mm_struct * arg Anthony Yznaga
2025-01-24 23:54 ` [PATCH 15/20] mm: pass the mm in vma_munmap_struct Anthony Yznaga
2025-01-24 23:54 ` [PATCH 16/20] mshare: add MSHAREFS_CREATE_MAPPING Anthony Yznaga
2025-01-24 23:54 ` [PATCH 17/20] mshare: add MSHAREFS_UNMAP Anthony Yznaga
2025-01-24 23:54 ` [PATCH 18/20] mm/mshare: provide a way to identify an mm as an mshare host mm Anthony Yznaga
2025-01-24 23:54 ` [PATCH 19/20] mm/mshare: get memcg from current->mm instead of mshare mm Anthony Yznaga
2025-01-24 23:54 ` [PATCH 20/20] mm/mshare: associate a mem cgroup with an mshare file Anthony Yznaga
2025-01-27 22:33 ` [PATCH 00/20] Add support for shared PTEs across processes Andrew Morton
2025-01-27 23:59   ` Anthony Yznaga
2025-01-28  9:21   ` David Hildenbrand
2025-01-28  7:11 ` Bagas Sanjaya
2025-01-28 19:53   ` Anthony Yznaga
2025-01-28  9:36 ` David Hildenbrand
2025-01-28 19:40   ` Anthony Yznaga
2025-01-29  0:11 ` Andrew Morton
2025-01-29  0:25   ` Anthony Yznaga
2025-01-29  0:59     ` Matthew Wilcox

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=Z6FyztBFs1Mwm2_K@archie.me \
    --to=bagasdotme@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=anthony.yznaga@oracle.com \
    --cc=arnd@arndb.de \
    --cc=brauner@kernel.org \
    --cc=catalin.marinas@arm.com \
    --cc=cgroups@vger.kernel.org \
    --cc=corbet@lwn.net \
    --cc=dave.hansen@intel.com \
    --cc=david@redhat.com \
    --cc=ebiederm@xmission.com \
    --cc=hannes@cmpxchg.org \
    --cc=jannh@google.com \
    --cc=jthoughton@google.com \
    --cc=khalid@kernel.org \
    --cc=kirill@shutemov.name \
    --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=lorenzo.stoakes@oracle.com \
    --cc=luto@kernel.org \
    --cc=markhemm@googlemail.com \
    --cc=maz@kernel.org \
    --cc=mhiramat@kernel.org \
    --cc=mhocko@kernel.org \
    --cc=mingo@redhat.com \
    --cc=muchun.song@linux.dev \
    --cc=neilb@suse.de \
    --cc=pcc@google.com \
    --cc=peterz@infradead.org \
    --cc=roman.gushchin@linux.dev \
    --cc=rostedt@goodmis.org \
    --cc=shakeel.butt@linux.dev \
    --cc=tglx@linutronix.de \
    --cc=vasily.averin@linux.dev \
    --cc=vbabka@suse.cz \
    --cc=viro@zeniv.linux.org.uk \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.