On Mon, Jul 20, 2026 at 03:38:16PM +0800, [email protected] wrote:
> > > > This patch establishes fields within the vm_area_struct type to store 
> > > > the
> > > > virtual page offset of VMAs.
> > > >
> > > > The virtual page offset of a VMA is equal to vma->vm_start >> 
> > > > PAGE_SHIFT if
> > > > they are unfaulted or were not remapped, otherwise it is equal to this
> > > > value at the point of first fault.
> > > >
> > > > Currently, anonymous folios belonging to CoW'd MAP_PRIVATE-mapped
> > > > file-backed VMAs are tracked by their file offset. By adding virtual 
> > > > offset
> > > > as a property of VMAs, we can now track them by their virtual page 
> > > > offset
> > > > instead.
> > > >
> > > > By tracking this, we provide the means by which to eliminate this
> > > > inconsistency, and more importantly lay the foundations for future work 
> > > > for
> > > > the scalable CoW anonymous rmap rework.
> > > >
> > > > This patch simply adds the fields and some simple helpers. Subsequent
> > > > patches will update mm code to make use of these fields correctly.
> > > >
> > > > The fields chosen are packed in the VMA such that, for 64-bit kernel
> > > > builds, no additional space is taken up.
> > >
> > > It is not necessarily true that no additional memory will be consumed, as 
> > > it
> > > depends on whether the baseline kernel has CONFIG_PER_VMA_LOCK enabled.
> >
> > We are moving to this being permanently enabled.
> >
> > > Moreover, in the future evolution of mm, maintaining this benefit would
> > > require that the layout of struct vm_area_struct before __vm_virt_pgoff_lo
> > > remains unchanged, which seems impractical.
> >
> > It isn't, we are very careful with this struct.
>
> Ok, That will be nice.
>
> >
> > >
> > > My personal suggestion is: maybe we could simply add an unsigned long 
> > > field,
> > > say vm_virt_pgoff, without worrying about the increased memory footprint 
> > > for
> > > now. Additionally, it would be helpful to add some comments clarifying the
> > > difference between this new field and the existing vm_pgoff, to aid 
> > > understanding.
> >
> > Nope that'd add 64 bytes per VMA for a typical usage which can add up to a 
> > lot.
>
> Okay, but I hope at least we could be a bit more verbose in the comments, 
> because
> __vm_virt_pgoff_lo and __vm_virt_pgoff_hi are located somewhat far apart from 
> each
> other, which might cause considerable confusion for others seeing these two
> variables for the first time, and clarify difference between this new field 
> and the
> existing vm_pgoff, to aid understanding.

OK, I've added comments, these ultimately refer to the vma_start_virt_pgoff()
comment which gives further details.

>
> Thanks.

Cheers, Lorenzo

Reply via email to