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