Index: sys/kern/kern_proc.c =================================================================== --- sys/kern/kern_proc.c +++ sys/kern/kern_proc.c @@ -2623,6 +2623,9 @@ if (obj->backing_object == NULL) kve->kve_private_resident = obj->resident_page_count; + else + kve->kve_shared_resident = + obj->resident_page_count; kern_proc_vmmap_resident(map, entry, &kve->kve_resident, &super); if (super) Index: sys/sys/user.h =================================================================== --- sys/sys/user.h +++ sys/sys/user.h @@ -534,7 +534,8 @@ uint64_t _kve_obj; /* handle of anon obj */ } kve_type_spec; uint64_t kve_vn_rdev; /* Device id if device. */ - int _kve_ispare[8]; /* Space for more stuff. */ + int kve_shared_resident; /* Number of shared pages. */ + int _kve_ispare[7]; /* Space for more stuff. */ /* Truncated before copyout in sysctl */ char kve_path[PATH_MAX]; /* Path to VM obj, if any. */ }; Index: usr.bin/procstat/procstat.1 =================================================================== --- usr.bin/procstat/procstat.1 +++ usr.bin/procstat/procstat.1 @@ -25,7 +25,7 @@ .\" .\" $FreeBSD$ .\" -.Dd February 13, 2021 +.Dd November 3, 2021 .Dt PROCSTAT 1 .Os .Sh NAME @@ -631,6 +631,8 @@ resident pages .It PRES private resident pages +.It SRES +shared resident pages .It REF reference count .It SHD Index: usr.bin/procstat/procstat_vm.c =================================================================== --- usr.bin/procstat/procstat_vm.c +++ usr.bin/procstat/procstat_vm.c @@ -49,14 +49,15 @@ { struct kinfo_vmentry *freep, *kve; int ptrwidth; - int i, cnt; + int i, cnt, nres, nshr, nprv; const char *str, *lstr; + nres = nshr = nprv = 0; ptrwidth = 2*sizeof(void *) + 2; if ((procstat_opts & PS_OPT_NOHEADER) == 0) - xo_emit("{T:/%5s %*s %*s %3s %4s %4s %3s %3s %-5s %-2s %-s}\n", + xo_emit("{T:/%5s %*s %*s %3s %4s %4s %4s %3s %3s %-5s %-2s %-s}\n", "PID", ptrwidth, "START", ptrwidth, "END", "PRT", "RES", - "PRES", "REF", "SHD", "FLAG", "TP", "PATH"); + "PRES", "SRES", "REF", "SHD", "FLAG", "TP", "PATH"); xo_emit("{ek:process_id/%d}", kipp->ki_pid); @@ -91,6 +92,11 @@ xo_emit("{:kve_resident/%4d/%d} ", kve->kve_resident); xo_emit("{:kve_private_resident/%4d/%d} ", kve->kve_private_resident); + xo_emit("{:kve_shared_resident/%4d/%d} ", + kve->kve_shared_resident); + nres += kve->kve_resident; + nprv += kve->kve_private_resident; + nshr += kve->kve_shared_resident; xo_emit("{:kve_ref_count/%3d/%d} ", kve->kve_ref_count); xo_emit("{:kve_shadow_count/%3d/%d} ", kve->kve_shadow_count); xo_emit("{d:copy_on_write/%-1s}", kve->kve_flags & @@ -170,6 +176,9 @@ xo_emit("{:kve_path/%-s/%s}\n", kve->kve_path); xo_close_instance("vm"); } + xo_emit("{:label/%47s/%s} {:resident_total/%4d/%d} " + "{:private_total/%4d/%d} {:shared_total/%4d/%d}\n", "Totals(pages)", + nres, nprv, nshr); xo_close_list("vm"); free(freep); }