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. >> >> > /* >> > * 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