• Liam R. Howlett's avatar
    mm/vma.h: optimise vma_munmap_struct · 723e1e8b
    Liam R. Howlett authored
    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 */
    };
    
    Link: https://lkml.kernel.org/r/20240830040101.822209-22-Liam.Howlett@oracle.comSigned-off-by: default avatarLiam R. Howlett <Liam.Howlett@Oracle.com>
    Reviewed-by: default avatarLorenzo Stoakes <lorenzo.stoakes@oracle.com>
    Cc: Bert Karwatzki <spasswolf@web.de>
    Cc: Jeff Xu <jeffxu@chromium.org>
    Cc: Jiri Olsa <olsajiri@gmail.com>
    Cc: Kees Cook <kees@kernel.org>
    Cc: Lorenzo Stoakes <lstoakes@gmail.com>
    Cc: Mark Brown <broonie@kernel.org>
    Cc: Matthew Wilcox <willy@infradead.org>
    Cc: "Paul E. McKenney" <paulmck@kernel.org>
    Cc: Paul Moore <paul@paul-moore.com>
    Cc: Sidhartha Kumar <sidhartha.kumar@oracle.com>
    Cc: Suren Baghdasaryan <surenb@google.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    723e1e8b
vma.h 15.1 KB