From: Martin Pieuchot Subject: tweak uvm view in systat(1) To: tech@openbsd.org Date: Wed, 22 Jan 2025 11:33:50 +0100 Diff below makes some room in the UVM view of systat(1) for upcoming counters related to running the fault handler in parallel. The following values, unused on OpenBSD, are no longer displayed: - `anonmin', `vtextmin', `vnodemin', `anonminpct', `vtextminpct', `vnodeminpct' The following value, currently displayed twice, is now printed only in the "Swap Counters" section: - `swpgonly' The "Per-CPU Counters" is moved around to allow the "Fault Counters" block to grow. While here, also document this section. =============== Before: ======= 3 users Load 2.08 1.99 2.08 (1-21 of 31) oliva.grenadille.ne 11:17:15 ===== Page Counters ===== Stats Counters ===== Fault Counters 1887K npages 5109K FAULTS fltnoram 642868 FREE 5298K TRAPS fltnoanon 326792 ACTIVE 1248K intrs fltnoamap 271567 inactive 5475K swtch fltpgwait paging 3072K softs fltpgrele 71540 wired 14008K SYSCALLS 1091K fltrelck 80414 zeropages pageins 1070K fltrelckok 34 percpucaches pgswapin 995K FLTANGET pgswapout fltanretry 6563 forks 306939 FLTAMCOPY ===== Pageout Params 14 forks_ppwait 177678 fltnamap 64427 freemin 4690 forks_sharevm 1070K FLTNOMAP 85902 freetarg 39105 pga_zerohit 1522K FLTLGET inactarg 36250 pga_zeromiss 1092K fltget 644277 wiredmax 958008 FLT_ANON anonmin ===== Daemon Counters 61851 flt_acow vtextmin pdwoke 1397K FLT_OBJ vnodemin pdrevs 105328 flt_prcopy anonminpct pdswout 2609K FLT_PRZERO vtextminpct swpgonly vnodeminpct pdfreed ===== Swap Counters pdscans 1 nswapdev ===== Misc Counters pdanscan 2028K swpages fpswtch pdobscan swpginuse 21 KMAPENT pdreact swpgonly pdbusy nswget ===== Constants pdpageouts 4096 pagesize pdpending ===== Per-CPU Counters 4095 pagemask pddeact 3984K PCPHIT 12 pageshift 562403 PCPMISS ============== After: ====== 3 users Load 2.35 2.21 2.14 (1-21 of 31) oliva.grenadille.ne 11:23:57 ===== Page Counters ===== Stats Counters ===== Fault Counters 1887K npages 5452K FAULTS fltnoram 636129 FREE 5649K TRAPS fltnoanon 330906 ACTIVE 1284K intrs fltnoamap 271515 inactive 5673K swtch fltpgwait paging 3127K softs fltpgrele 74099 wired 14552K SYSCALLS 1174K fltrelck 79954 zeropages pageins 1152K fltrelckok 20 PERCPUCACHES pgswapin 1023K FLTANGET pgswapout fltanretry 6726 forks 323942 FLTAMCOPY ===== Pageout Params 14 forks_ppwait 186437 fltnamap 64427 freemin 4775 forks_sharevm 1140K FLTNOMAP 85902 freetarg 40035 pga_zerohit 1626K FLTLGET inactarg 36298 pga_zeromiss 1174K fltget 644277 wiredmax 983704 FLT_ANON 63891 flt_acow ===== Daemon Counters 1499K FLT_OBJ ===== Per-CPU Counters pdwoke 106635 flt_prcopy 4277K PCPHIT pdrevs 2823K FLT_PRZERO 604650 PCPMISS pdswout pdfreed pdscans ===== Misc Counters pdanscan fpswtch pdobscan 21 KMAPENT pdreact ===== Swap Counters pdbusy 1 nswapdev ===== Constants pdpageouts 2028K swpages 4096 pagesize pdpending swpginuse 4095 pagemask pddeact swpgonly 12 pageshift nswget Ok? Index: systat.1 =================================================================== RCS file: /cvs/src/usr.bin/systat/systat.1,v diff -u -p -r1.123 systat.1 --- systat.1 25 Sep 2024 06:13:01 -0000 1.123 +++ systat.1 22 Jan 2025 10:25:09 -0000 @@ -687,18 +687,12 @@ target number of free pages target number of inactive pages .It wiredmax maximum number of wired pages -.It anonmin -minimum threshold for anon pages -.It vtextmin -minimum threshold for vtext pages -.It vnodemin -minimum threshold for vnode pages -.It anonminpct -minimum percent anon pages -.It vtextminpct -minimum percent vtext pages -.It vnodeminpct -minimum percent vnode pages +.Pp +.It Per-CPU Counters: +.It pcphit +pages allocated from a per-CPU cache since boot +.It pcpmiss +times a per-CPU cache was empty when allocating a page .Pp .It Swap Counters: .It nswapdev Index: uvm.c =================================================================== RCS file: /cvs/src/usr.bin/systat/uvm.c,v diff -u -p -r1.10 uvm.c --- uvm.c 18 May 2024 09:02:34 -0000 1.10 +++ uvm.c 22 Jan 2025 10:11:17 -0000 @@ -103,51 +103,51 @@ struct uvmline uvmline[] = { { &uvmexp.wiredmax, &last_uvmexp.wiredmax, "wiredmax", NULL, NULL, NULL, &uvmexp.flt_anon, &last_uvmexp.flt_anon, "flt_anon" }, - { &uvmexp.anonmin, &last_uvmexp.anonmin, "anonmin", - NULL, NULL, "Daemon Counters", + { NULL, NULL, NULL, + NULL, NULL, NULL, &uvmexp.flt_acow, &last_uvmexp.flt_acow, "flt_acow" }, - { &uvmexp.vtextmin, &last_uvmexp.vtextmin, "vtextmin", - &uvmexp.pdwoke, &last_uvmexp.pdwoke, "pdwoke", + { NULL, NULL, NULL, + NULL, NULL, "Daemon Counters", &uvmexp.flt_obj, &last_uvmexp.flt_obj, "flt_obj" }, - { &uvmexp.vnodemin, &last_uvmexp.vnodemin, "vnodemin", - &uvmexp.pdrevs, &last_uvmexp.pdrevs, "pdrevs", + { NULL, NULL, "Per-CPU Counters", + &uvmexp.pdwoke, &last_uvmexp.pdwoke, "pdwoke", &uvmexp.flt_prcopy, &last_uvmexp.flt_prcopy, "flt_prcopy" }, - { &uvmexp.anonminpct, &last_uvmexp.anonminpct, "anonminpct", - &uvmexp.pdswout, &last_uvmexp.pdswout, "pdswout", + { &uvmexp.pcphit, &last_uvmexp.pcphit, "pcphit", + &uvmexp.pdrevs, &last_uvmexp.pdrevs, "pdrevs", &uvmexp.flt_przero, &last_uvmexp.flt_przero, "flt_przero" }, - { &uvmexp.vtextminpct, &last_uvmexp.vtextminpct, "vtextminpct", - &uvmexp.swpgonly, &last_uvmexp.swpgonly, "swpgonly", + { &uvmexp.pcpmiss, &last_uvmexp.pcpmiss, "pcpmiss", + &uvmexp.pdswout, &last_uvmexp.pdswout, "pdswout", NULL, NULL, NULL }, - { &uvmexp.vnodeminpct, &last_uvmexp.vnodeminpct, "vnodeminpct", + { NULL, NULL, NULL, &uvmexp.pdfreed, &last_uvmexp.pdfreed, "pdfreed", - NULL, NULL, "Swap Counters" }, + NULL, NULL, NULL }, { NULL, NULL, NULL, &uvmexp.pdscans, &last_uvmexp.pdscans, "pdscans", - &uvmexp.nswapdev, &last_uvmexp.nswapdev, "nswapdev" }, + NULL, NULL, NULL }, { NULL, NULL, "Misc Counters", &uvmexp.pdanscan, &last_uvmexp.pdanscan, "pdanscan", - &uvmexp.swpages, &last_uvmexp.swpages, "swpages" }, + NULL, NULL, NULL }, { &uvmexp.fpswtch, &last_uvmexp.fpswtch, "fpswtch", &uvmexp.pdobscan, &last_uvmexp.pdobscan, "pdobscan", - &uvmexp.swpginuse, &last_uvmexp.swpginuse, "swpginuse" }, + NULL, NULL, NULL }, { &uvmexp.kmapent, &last_uvmexp.kmapent, "kmapent", &uvmexp.pdreact, &last_uvmexp.pdreact, "pdreact", - &uvmexp.swpgonly, &last_uvmexp.swpgonly, "swpgonly" }, + NULL, NULL, "Swap Counters" }, { NULL, NULL, NULL, &uvmexp.pdbusy, &last_uvmexp.pdbusy, "pdbusy", - &uvmexp.nswget, &last_uvmexp.nswget, "nswget" }, + &uvmexp.nswapdev, &last_uvmexp.nswapdev, "nswapdev" }, { NULL, NULL, "Constants", &uvmexp.pdpageouts, &last_uvmexp.pdpageouts, "pdpageouts", - NULL, NULL, NULL }, + &uvmexp.swpages, &last_uvmexp.swpages, "swpages" }, { &uvmexp.pagesize, &last_uvmexp.pagesize, "pagesize", &uvmexp.pdpending, &last_uvmexp.pdpending, "pdpending", - NULL, NULL, "Per-CPU Counters" }, + &uvmexp.swpginuse, &last_uvmexp.swpginuse, "swpginuse" }, { &uvmexp.pagemask, &last_uvmexp.pagemask, "pagemask", &uvmexp.pddeact, &last_uvmexp.pddeact, "pddeact", - &uvmexp.pcphit, &last_uvmexp.pcphit, "pcphit" }, + &uvmexp.swpgonly, &last_uvmexp.swpgonly, "swpgonly" }, { &uvmexp.pageshift, &last_uvmexp.pageshift, "pageshift", NULL, NULL, NULL, - &uvmexp.pcpmiss, &last_uvmexp.pcpmiss, "pcpmiss" } + &uvmexp.nswget, &last_uvmexp.nswget, "nswget" } }; field_def fields_uvm[] = {