Download raw body.
uvm_pmr_cache_drain(): return number of freed pages
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?
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_ */
uvm_pmr_cache_drain(): return number of freed pages