linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
From: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>
To: "Liam R. Howlett" <Liam.Howlett@oracle.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	Suren Baghdasaryan <surenb@google.com>,
	Matthew Wilcox <willy@infradead.org>,
	Vlastimil Babka <vbabka@suse.cz>,
	sidhartha.kumar@oracle.com, Bert Karwatzki <spasswolf@web.de>,
	Jiri Olsa <olsajiri@gmail.com>, Kees Cook <kees@kernel.org>,
	"Paul E . McKenney" <paulmck@kernel.org>
Subject: Re: [PATCH v7 21/21] mm/vma.h: Optimise vma_munmap_struct
Date: Thu, 22 Aug 2024 20:41:36 +0100	[thread overview]
Message-ID: <1ef65eb7-dfc4-45c4-99db-b29609287b56@lucifer.local> (raw)
In-Reply-To: <20240822192543.3359552-22-Liam.Howlett@oracle.com>

On Thu, Aug 22, 2024 at 03:25:43PM GMT, Liam R. Howlett wrote:
> From: "Liam R. Howlett" <Liam.Howlett@Oracle.com>
>
> The vma_munmap_struct has a hole of 4 bytes and pushes the struct to
> three cachelines.  Relocating the three booleans upwards allows for the
> struct to only use two cachelines (as reported by pahole on amd64).
>
> Before:
> struct vma_munmap_struct {
>         struct vma_iterator *      vmi;                  /*     0     8 */
>         struct vm_area_struct *    vma;                  /*     8     8 */
>         struct vm_area_struct *    prev;                 /*    16     8 */
>         struct vm_area_struct *    next;                 /*    24     8 */
>         struct list_head *         uf;                   /*    32     8 */
>         long unsigned int          start;                /*    40     8 */
>         long unsigned int          end;                  /*    48     8 */
>         long unsigned int          unmap_start;          /*    56     8 */
>         /* --- cacheline 1 boundary (64 bytes) --- */
>         long unsigned int          unmap_end;            /*    64     8 */
>         int                        vma_count;            /*    72     4 */
>
>         /* XXX 4 bytes hole, try to pack */
>
>         long unsigned int          nr_pages;             /*    80     8 */
>         long unsigned int          locked_vm;            /*    88     8 */
>         long unsigned int          nr_accounted;         /*    96     8 */
>         long unsigned int          exec_vm;              /*   104     8 */
>         long unsigned int          stack_vm;             /*   112     8 */
>         long unsigned int          data_vm;              /*   120     8 */
>         /* --- cacheline 2 boundary (128 bytes) --- */
>         bool                       unlock;               /*   128     1 */
>         bool                       clear_ptes;           /*   129     1 */
>         bool                       closed_vm_ops;        /*   130     1 */
>
>         /* size: 136, cachelines: 3, members: 19 */
>         /* sum members: 127, holes: 1, sum holes: 4 */
>         /* padding: 5 */
>         /* last cacheline: 8 bytes */
> };
>
> After:
> struct vma_munmap_struct {
>         struct vma_iterator *      vmi;                  /*     0     8 */
>         struct vm_area_struct *    vma;                  /*     8     8 */
>         struct vm_area_struct *    prev;                 /*    16     8 */
>         struct vm_area_struct *    next;                 /*    24     8 */
>         struct list_head *         uf;                   /*    32     8 */
>         long unsigned int          start;                /*    40     8 */
>         long unsigned int          end;                  /*    48     8 */
>         long unsigned int          unmap_start;          /*    56     8 */
>         /* --- cacheline 1 boundary (64 bytes) --- */
>         long unsigned int          unmap_end;            /*    64     8 */
>         int                        vma_count;            /*    72     4 */
>         bool                       unlock;               /*    76     1 */
>         bool                       clear_ptes;           /*    77     1 */
>         bool                       closed_vm_ops;        /*    78     1 */
>
>         /* XXX 1 byte hole, try to pack */
>
>         long unsigned int          nr_pages;             /*    80     8 */
>         long unsigned int          locked_vm;            /*    88     8 */
>         long unsigned int          nr_accounted;         /*    96     8 */
>         long unsigned int          exec_vm;              /*   104     8 */
>         long unsigned int          stack_vm;             /*   112     8 */
>         long unsigned int          data_vm;              /*   120     8 */
>
>         /* size: 128, cachelines: 2, members: 19 */
>         /* sum members: 127, holes: 1, sum holes: 1 */
> };
>
> Signed-off-by: Liam R. Howlett <Liam.Howlett@Oracle.com>

Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@oracle.com>

> ---
>  mm/vma.h | 7 ++++---
>  1 file changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/mm/vma.h b/mm/vma.h
> index 7047fedce459..c774642697a0 100644
> --- a/mm/vma.h
> +++ b/mm/vma.h
> @@ -40,15 +40,16 @@ struct vma_munmap_struct {
>  	unsigned long unmap_start;      /* Unmap PTE start */
>  	unsigned long unmap_end;        /* Unmap PTE end */
>  	int vma_count;                  /* Number of vmas that will be removed */
> +	bool unlock;                    /* Unlock after the munmap */
> +	bool clear_ptes;                /* If there are outstanding PTE to be cleared */
> +	bool closed_vm_ops;		/* call_mmap() was encountered, so vmas may be closed */
> +	/* 1 byte hole */
>  	unsigned long nr_pages;         /* Number of pages being removed */
>  	unsigned long locked_vm;        /* Number of locked pages */
>  	unsigned long nr_accounted;     /* Number of VM_ACCOUNT pages */
>  	unsigned long exec_vm;
>  	unsigned long stack_vm;
>  	unsigned long data_vm;
> -	bool unlock;                    /* Unlock after the munmap */
> -	bool clear_ptes;                /* If there are outstanding PTE to be cleared */
> -	bool closed_vm_ops;		/* call_mmap() was encountered, so vmas may be closed */
>  };
>
>  #ifdef CONFIG_DEBUG_VM_MAPLE_TREE
> --
> 2.43.0
>


      reply	other threads:[~2024-08-22 19:42 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-08-22 19:25 [PATCH v7 00/21] Avoid MAP_FIXED gap exposure Liam R. Howlett
2024-08-22 19:25 ` [PATCH v7 01/21] mm/vma: Correctly position vma_iterator in __split_vma() Liam R. Howlett
2024-08-22 19:25 ` [PATCH v7 02/21] mm/vma: Introduce abort_munmap_vmas() Liam R. Howlett
2024-08-22 19:25 ` [PATCH v7 03/21] mm/vma: Introduce vmi_complete_munmap_vmas() Liam R. Howlett
2024-08-22 19:25 ` [PATCH v7 04/21] mm/vma: Extract the gathering of vmas from do_vmi_align_munmap() Liam R. Howlett
2024-08-22 19:25 ` [PATCH v7 05/21] mm/vma: Introduce vma_munmap_struct for use in munmap operations Liam R. Howlett
2024-08-22 19:25 ` [PATCH v7 06/21] mm/vma: Change munmap to use vma_munmap_struct() for accounting and surrounding vmas Liam R. Howlett
2024-08-23  8:43   ` Bert Karwatzki
2024-08-23  9:55     ` Lorenzo Stoakes
2024-08-23 10:42       ` Bert Karwatzki
2024-08-23 11:39         ` Lorenzo Stoakes
2024-08-23 11:37     ` Lorenzo Stoakes
2024-08-23 13:30   ` [PATCH] mm/vma: fix bookkeeping checks Liam R. Howlett
2024-08-22 19:25 ` [PATCH v7 07/21] mm/vma: Extract validate_mm() from vma_complete() Liam R. Howlett
2024-08-22 19:25 ` [PATCH v7 08/21] mm/vma: Inline munmap operation in mmap_region() Liam R. Howlett
2024-08-22 19:25 ` [PATCH v7 09/21] mm/vma: Expand mmap_region() munmap call Liam R. Howlett
2024-08-22 19:25 ` [PATCH v7 10/21] mm/vma: Support vma == NULL in init_vma_munmap() Liam R. Howlett
2024-08-22 19:25 ` [PATCH v7 11/21] mm/mmap: Reposition vma iterator in mmap_region() Liam R. Howlett
2024-08-22 19:25 ` [PATCH v7 12/21] mm/vma: Track start and end for munmap in vma_munmap_struct Liam R. Howlett
2024-08-26 14:01   ` Geert Uytterhoeven
2024-08-26 14:12     ` Lorenzo Stoakes
2024-08-22 19:25 ` [PATCH v7 13/21] mm: Clean up unmap_region() argument list Liam R. Howlett
2024-08-22 19:25 ` [PATCH v7 14/21] mm/mmap: Avoid zeroing vma tree in mmap_region() Liam R. Howlett
2024-08-22 19:25 ` [PATCH v7 15/21] mm: Change failure of MAP_FIXED to restoring the gap on failure Liam R. Howlett
2024-08-27 17:15   ` [PATCH] mm/vma: Fix null pointer dereference in vms_abort_munmap_vmas() Liam R. Howlett
2024-08-22 19:25 ` [PATCH v7 16/21] mm/mmap: Use PHYS_PFN in mmap_region() Liam R. Howlett
2024-08-22 19:25 ` [PATCH v7 17/21] mm/mmap: Use vms accounted pages " Liam R. Howlett
2024-08-22 19:25 ` [PATCH v7 18/21] ipc/shm, mm: Drop do_vma_munmap() Liam R. Howlett
2024-08-22 19:25 ` [PATCH v7 19/21] mm: Move may_expand_vm() check in mmap_region() Liam R. Howlett
2024-08-22 19:25 ` [PATCH v7 20/21] mm/vma: Drop incorrect comment from vms_gather_munmap_vmas() Liam R. Howlett
2024-08-22 19:25 ` [PATCH v7 21/21] mm/vma.h: Optimise vma_munmap_struct Liam R. Howlett
2024-08-22 19:41   ` Lorenzo Stoakes [this message]

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=1ef65eb7-dfc4-45c4-99db-b29609287b56@lucifer.local \
    --to=lorenzo.stoakes@oracle.com \
    --cc=Liam.Howlett@oracle.com \
    --cc=akpm@linux-foundation.org \
    --cc=kees@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=olsajiri@gmail.com \
    --cc=paulmck@kernel.org \
    --cc=sidhartha.kumar@oracle.com \
    --cc=spasswolf@web.de \
    --cc=surenb@google.com \
    --cc=vbabka@suse.cz \
    --cc=willy@infradead.org \
    /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;
as well as URLs for NNTP newsgroup(s).