On Wed, Jan 15, 2025 at 5:37 PM Wei Yang <richard.weiyang@xxxxxxxxx> wrote: > > On Wed, Jan 15, 2025 at 07:01:56AM -0800, Suren Baghdasaryan wrote: > >On Wed, Jan 15, 2025 at 4:05 AM Wei Yang <richard.weiyang@xxxxxxxxx> wrote: > >> > >> On Tue, Jan 14, 2025 at 07:12:20PM -0800, Suren Baghdasaryan wrote: > >> >On Tue, Jan 14, 2025 at 6:58 PM Wei Yang <richard.weiyang@xxxxxxxxx> wrote: > >> >> > >> >> On Fri, Jan 10, 2025 at 08:25:58PM -0800, Suren Baghdasaryan wrote: > >> >> >@@ -6354,7 +6422,6 @@ struct vm_area_struct *lock_vma_under_rcu(struct mm_struct *mm, > >> >> > struct vm_area_struct *vma; > >> >> > > >> >> > rcu_read_lock(); > >> >> >-retry: > >> >> > vma = mas_walk(&mas); > >> >> > if (!vma) > >> >> > goto inval; > >> >> >@@ -6362,13 +6429,6 @@ struct vm_area_struct *lock_vma_under_rcu(struct mm_struct *mm, > >> >> > if (!vma_start_read(vma)) > >> >> > goto inval; > >> >> > > >> >> >- /* Check if the VMA got isolated after we found it */ > >> >> >- if (is_vma_detached(vma)) { > >> >> >- vma_end_read(vma); > >> >> >- count_vm_vma_lock_event(VMA_LOCK_MISS); > >> >> >- /* The area was replaced with another one */ > >> >> >- goto retry; > >> >> >- } > >> >> > >> >> We have a little behavior change here. > >> >> > >> >> Originally, if we found an detached vma, we may retry. But now, we would go to > >> >> the slow path directly. > >> > > >> >Hmm. Good point. I think the easiest way to keep the same > >> >functionality is to make vma_start_read() return vm_area_struct* on > >> >success, NULL on locking failure and EAGAIN if vma was detached > >> >(vm_refcnt==0). Then the same retry with VMA_LOCK_MISS can be done in > >> >the case of EAGAIN. > >> > > >> > >> Looks good to me. > >> > >> >> > >> >> Maybe we can compare the event VMA_LOCK_MISS and VMA_LOCK_ABORT > >> >> to see the percentage of this case. If it shows this is a too rare > >> >> case to impact performance, we can ignore it. > >> >> > >> >> Also the event VMA_LOCK_MISS recording is removed, but the definition is > >> >> there. We may record it in the vma_start_read() when oldcnt is 0. > >> >> > >> >> BTW, the name of VMA_LOCK_SUCCESS confuse me a little. I thought it indicates > >> >> lock_vma_under_rcu() successfully get a valid vma. But seems not. Sounds we > >> >> don't have an overall success/failure statistic in vmstat. > >> > > >> >Are you referring to the fact that we do not increment > >> >VMA_LOCK_SUCCESS if we successfully locked a vma but have to retry the > >> > >> Something like this. I thought we would increase VMA_LOCK_SUCCESS on success. > >> > >> >page fault (in which we increment VMA_LOCK_RETRY instead)? > >> > > >> > >> I don't follow this. > > > >Sorry, I meant to say "in which case we increment VMA_LOCK_RETRY > >instead". IOW, when we successfully lock the vma but have to retry the > >pagefault, we increment VMA_LOCK_RETRY without incrementing > >VMA_LOCK_SUCCESS. > > > > Yes, this makes me confused about what VMA_LOCK_SUCCESS represents. I'll need to look into the history of why we account it this way but this is out of scope for this patchset. > > >> > >> >> > >> >> > /* > >> >> > * At this point, we have a stable reference to a VMA: The VMA is > >> >> > * locked and we know it hasn't already been isolated. > >> >> > >> >> -- > >> >> Wei Yang > >> >> Help you, Help me > >> > >> -- > >> Wei Yang > >> Help you, Help me > > -- > Wei Yang > Help you, Help me