From: Mark Kettenis Subject: Re: uvm_pmr_cache_drain(): return number of freed pages To: Martin Pieuchot Cc: tech@openbsd.org Date: Mon, 30 Sep 2024 11:57:07 +0200 > Date: Mon, 30 Sep 2024 10:14:50 +0200 > From: Martin Pieuchot > > To reduce accesses to the global `uvmexp.free', I'd like know how many > pages have been freed by every "shrinker". In this case change > uvm_pmr_cache_drain() such that it returns the number of freed pages. > > ok? ok kettenis@ > Index: uvm/uvm_pmemrange.c > =================================================================== > RCS file: /cvs/src/sys/uvm/uvm_pmemrange.c,v > diff -u -p -r1.67 uvm_pmemrange.c > --- uvm/uvm_pmemrange.c 18 Aug 2024 08:18:49 -0000 1.67 > +++ uvm/uvm_pmemrange.c 30 Sep 2024 08:11:15 -0000 > @@ -2279,7 +2279,7 @@ uvm_pmr_cache_get(int flags) > return pg; > } > > -void > +unsigned int > uvm_pmr_cache_free(struct uvm_pmr_cache_item *upci) > { > struct pglist pgl; > @@ -2296,6 +2296,8 @@ uvm_pmr_cache_free(struct uvm_pmr_cache_ > atomic_sub_int(&uvmexp.percpucaches, upci->upci_npages); > upci->upci_npages = 0; > memset(upci->upci_pages, 0, sizeof(upci->upci_pages)); > + > + return i; > } > > void > @@ -2337,16 +2339,19 @@ uvm_pmr_cache_put(struct vm_page *pg) > splx(s); > } > > -void > +unsigned int > uvm_pmr_cache_drain(void) > { > struct uvm_pmr_cache *upc = &curcpu()->ci_uvm; > + unsigned int freed = 0; > int s; > > s = splvm(); > - uvm_pmr_cache_free(&upc->upc_magz[0]); > - uvm_pmr_cache_free(&upc->upc_magz[1]); > + freed += uvm_pmr_cache_free(&upc->upc_magz[0]); > + freed += uvm_pmr_cache_free(&upc->upc_magz[1]); > splx(s); > + > + return freed; > } > > #else /* !(MULTIPROCESSOR && __HAVE_UVM_PERCPU) */ > @@ -2363,8 +2368,9 @@ uvm_pmr_cache_put(struct vm_page *pg) > uvm_pmr_freepages(pg, 1); > } > > -void > +unsigned int > uvm_pmr_cache_drain(void) > { > + return 0; > } > #endif > Index: uvm/uvm_pmemrange.h > =================================================================== > RCS file: /cvs/src/sys/uvm/uvm_pmemrange.h,v > diff -u -p -r1.17 uvm_pmemrange.h > --- uvm/uvm_pmemrange.h 1 May 2024 12:54:27 -0000 1.17 > +++ uvm/uvm_pmemrange.h 30 Sep 2024 08:11:15 -0000 > @@ -149,7 +149,7 @@ struct vm_page *uvm_pmr_extract_range(s > struct pglist *); > struct vm_page *uvm_pmr_cache_get(int); > void uvm_pmr_cache_put(struct vm_page *); > -void uvm_pmr_cache_drain(void); > +unsigned int uvm_pmr_cache_drain(void); > > > #endif /* _UVM_UVM_PMEMRANGE_H_ */ > >