All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2] mm: fix alginment of VMA for memory mapped files on THP
@ 2022-08-01 18:47 alexlzhu
  2022-08-02 18:06 ` David Sterba
  0 siblings, 1 reply; 3+ messages in thread
From: alexlzhu @ 2022-08-01 18:47 UTC (permalink / raw)
  To: kernel-team, linux-mm, clm, josef, dsterba, linux-btrfs, linux-kernel
  Cc: alexlzhu

From: alexlzhu <alexlzhu@fb.com>

With CONFIG_READ_ONLY_THP_FOR_FS, the Linux kernel supports using THPs for
read-only mmapped files, such as shared libraries. However, the
kernel makes no attempt to actually align those mappings on 2MB boundaries,
which makes it impossible to use those THPs most of the time. This issue
applies to general file mapping THP as well as existing setups using
CONFIG_READ_ONLY_THP_FOR_FS. This is easily fixed by using
thp_get_unmapped_area for the unmapped_area function in btrfs, which is
what ext2, ext4, fuse, and xfs all use. The problem can be seen in
/proc/PID/smaps where THPeligible is set to 0 on mappings to eligible
shared object files as shown below.

Before this patch:

7fc6a7e18000-7fc6a80cc000 r-xp 00000000 00:1e 199856
/usr/lib64/libcrypto.so.1.1.1k
Size:               2768 kB
THPeligible:    0
VmFlags: rd ex mr mw me

With this patch the library is mapped at a 2MB aligned address:

fbdfe200000-7fbdfe4b4000 r-xp 00000000 00:1e 199856
/usr/lib64/libcrypto.so.1.1.1k
Size:               2768 kB
THPeligible:    1
VmFlags: rd ex mr mw me

This fixes the alignment of VMAs for any mmap of a file that has the
rd and ex permissions and size >= 2MB. The VMA alignment and
THPeligible field for anonymous memory is handled separately and
is thus not effected by this change.

Signed-off-by: alexlzhu <alexlzhu@fb.com>
---
 fs/btrfs/file.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c
index 9dfde1af8a64..2423040db167 100644
--- a/fs/btrfs/file.c
+++ b/fs/btrfs/file.c
@@ -3808,6 +3808,7 @@ const struct file_operations btrfs_file_operations = {
 	.mmap		= btrfs_file_mmap,
 	.open		= btrfs_file_open,
 	.release	= btrfs_release_file,
+	.get_unmapped_area = thp_get_unmapped_area,
 	.fsync		= btrfs_sync_file,
 	.fallocate	= btrfs_fallocate,
 	.unlocked_ioctl	= btrfs_ioctl,
-- 
2.30.2


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

* Re: [PATCH v2] mm: fix alginment of VMA for memory mapped files on THP
  2022-08-01 18:47 [PATCH v2] mm: fix alginment of VMA for memory mapped files on THP alexlzhu
@ 2022-08-02 18:06 ` David Sterba
  2022-08-02 19:36   ` Alex Zhu (Kernel)
  0 siblings, 1 reply; 3+ messages in thread
From: David Sterba @ 2022-08-02 18:06 UTC (permalink / raw)
  To: alexlzhu
  Cc: kernel-team, linux-mm, clm, josef, dsterba, linux-btrfs, linux-kernel

On Mon, Aug 01, 2022 at 11:47:40AM -0700, alexlzhu@fb.com wrote:
> From: alexlzhu <alexlzhu@fb.com>
> 
> With CONFIG_READ_ONLY_THP_FOR_FS, the Linux kernel supports using THPs for
> read-only mmapped files, such as shared libraries. However, the
> kernel makes no attempt to actually align those mappings on 2MB boundaries,
> which makes it impossible to use those THPs most of the time. This issue
> applies to general file mapping THP as well as existing setups using
> CONFIG_READ_ONLY_THP_FOR_FS. This is easily fixed by using
> thp_get_unmapped_area for the unmapped_area function in btrfs, which is
> what ext2, ext4, fuse, and xfs all use.

Commit dbe6ec815641 ("ext2/4, xfs: call thp_get_unmapped_area() for pmd
mappings") adds the callback for DAX, that btrfs does not support so it
was left out.

> The problem can be seen in
> /proc/PID/smaps where THPeligible is set to 0 on mappings to eligible
> shared object files as shown below.
> 
> Before this patch:
> 
> 7fc6a7e18000-7fc6a80cc000 r-xp 00000000 00:1e 199856
> /usr/lib64/libcrypto.so.1.1.1k
> Size:               2768 kB
> THPeligible:    0
> VmFlags: rd ex mr mw me
> 
> With this patch the library is mapped at a 2MB aligned address:
> 
> fbdfe200000-7fbdfe4b4000 r-xp 00000000 00:1e 199856
> /usr/lib64/libcrypto.so.1.1.1k
> Size:               2768 kB
> THPeligible:    1
> VmFlags: rd ex mr mw me
> 
> This fixes the alignment of VMAs for any mmap of a file that has the
> rd and ex permissions and size >= 2MB. The VMA alignment and
> THPeligible field for anonymous memory is handled separately and
> is thus not effected by this change.
> 
> Signed-off-by: alexlzhu <alexlzhu@fb.com>

Please use full name for signed-off.

Also the subject should start with "btrfs:", this is not a memory
management patch. Thanks.

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

* Re: [PATCH v2] mm: fix alginment of VMA for memory mapped files on THP
  2022-08-02 18:06 ` David Sterba
@ 2022-08-02 19:36   ` Alex Zhu (Kernel)
  0 siblings, 0 replies; 3+ messages in thread
From: Alex Zhu (Kernel) @ 2022-08-02 19:36 UTC (permalink / raw)
  To: dsterba
  Cc: Kernel Team, linux-mm, Chris Mason, josef, dsterba, linux-btrfs,
	linux-kernel


> Commit dbe6ec815641 ("ext2/4, xfs: call thp_get_unmapped_area() for pmd
> mappings") adds the callback for DAX, that btrfs does not support so it
> was left out.

Commit 1854bc6e2420 ("mm/readahead: Align file mappings for non-DAX”) removed the DAX requirement. 
We should now be able to call thp_get_unmapped_area() for btrfs.

I’ll send out a v3 with the subject and sign off corrected. Thanks! 


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

end of thread, other threads:[~2022-08-02 19:36 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-01 18:47 [PATCH v2] mm: fix alginment of VMA for memory mapped files on THP alexlzhu
2022-08-02 18:06 ` David Sterba
2022-08-02 19:36   ` Alex Zhu (Kernel)

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.