On Wed, Nov 20, 2024 at 11:02 PM Shakeel Butt <shakeel.butt@xxxxxxxxx> wrote: > > On Wed, Nov 20, 2024 at 04:33:37PM -0800, Suren Baghdasaryan wrote: > [...] > > > > > > > > > > Do we just want 'struct vm_area_struct' to be cacheline aligned or do we > > > > > want 'struct vma_lock vm_lock' to be on a separate cacheline as well? > > > > > > > > We want both to minimize cacheline sharing. > > > > > > > > > > For later, you will need to add a pad after vm_lock as well, so any > > > future addition will not share the cacheline with vm_lock. I would do > > > something like below. This is a nit and can be done later. > > > > > > diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h > > > index 7654c766cbe2..5cc4fff163a0 100644 > > > --- a/include/linux/mm_types.h > > > +++ b/include/linux/mm_types.h > > > @@ -751,10 +751,12 @@ struct vm_area_struct { > > > #endif > > > struct vm_userfaultfd_ctx vm_userfaultfd_ctx; > > > #ifdef CONFIG_PER_VMA_LOCK > > > + CACHELINE_PADDING(__pad1__); > > > /* Unstable RCU readers are allowed to read this. */ > > > - struct vma_lock vm_lock ____cacheline_aligned_in_smp; > > > + struct vma_lock vm_lock; > > > + CACHELINE_PADDING(__pad2__); > > > #endif > > > -} __randomize_layout; > > > +} __randomize_layout ____cacheline_aligned_in_smp; > > > > I thought SLAB_HWCACHE_ALIGN for vm_area_cachep added in this patch > > would have the same result, no? > > > > SLAB_HWCACHE_ALIGN is more about the slub allocator allocating cache > aligned memory. It does not say anything about the internals of the > struct for which the kmem_cache is being created. The > ____cacheline_aligned_in_smp tag in your patch made sure that the field > vm_lock will be put in a new cacheline and there can be a hole between > vm_lock and the previous field if the previous field is not ending at > the cacheline boundary. Please note that if you add a new field after > vm_lock (without cacheline alignment tag), it will be on the same > cacheline as vm_lock. So, your code is achieving the vm_lock on its own > cacheline goal but vm_lock being the only field on that cacheline is not > being achieved. Sorry, I should have been more clear. It's ok if some fields which are rarely accessed in the pagefault path are placed in the same cacheling with vm_lock. In fact I've done that to pack them better in the previous version of this patchset here: https://lore.kernel.org/all/20241111205506.3404479-5-surenb@xxxxxxxxxx/ (removed for now based on the feedback). So, vm_lock being the only field on the cacheline is not my goal. After this patchset I'm planning to try packing the members better and save some memory. >