From: Matthew Dillon Date: Wed, 22 May 2019 02:24:20 +0000 (-0700) Subject: kernel - VM rework part 19 - Cleanup X-Git-Tag: v5.7.0~60 X-Git-Url: https://gitweb.dragonflybsd.org/dragonfly.git/commitdiff_plain/d0be0ca8820415fce97c1201fb78a2f9f91fe2e5 kernel - VM rework part 19 - Cleanup * vmpageinfo breaks down the kernel load size, vm_page_array size, and buffer headers for the buffer cache, all of which are major boot-time wired kernel memory. Note that the vm_page_array[] uses 3.1% of physical memory. Its a lot, but there is no convenient way to make it less. --- diff --git a/test/debug/kmapinfo.c b/test/debug/kmapinfo.c index 59abd5cb50..9e29c10796 100644 --- a/test/debug/kmapinfo.c +++ b/test/debug/kmapinfo.c @@ -290,7 +290,6 @@ entryid(vm_subsys_t id, int *realmemp) *realmem = 1; return("IPIQ"); case VM_SUBSYS_PVENTRY: - *realmem = 1; return("PVENTRY"); case VM_SUBSYS_PML4: *realmem = 1; diff --git a/test/debug/vmpageinfo.c b/test/debug/vmpageinfo.c index 31cb3d55c4..b1e1ecbc20 100644 --- a/test/debug/vmpageinfo.c +++ b/test/debug/vmpageinfo.c @@ -72,6 +72,12 @@ struct nlist Nl[] = { { "_vm_page_array" }, { "_vm_page_array_size" }, { "_kernel_object" }, + { "_nbuf" }, + { "_nswbuf_mem" }, + { "_nswbuf_kva" }, + { "_nswbuf_raw" }, + { "_kernbase" }, + { "__end" }, { NULL } }; @@ -84,6 +90,11 @@ int vm_page_hash_mask; struct vm_page *vm_page_array; struct vm_object *kernel_object_ptr; int vm_page_array_size; +long nbuf; +long nswbuf_mem; +long nswbuf_kva; +long nswbuf_raw; +long kern_size; void checkpage(kvm_t *kd, vm_page_t mptr, vm_page_t m, struct vm_object *obj); static void kkread_vmpage(kvm_t *kd, u_long addr, vm_page_t m); @@ -167,6 +178,11 @@ main(int ac, char **av) kkread(kd, Nl[0].n_value, &vm_page_array, sizeof(vm_page_array)); kkread(kd, Nl[1].n_value, &vm_page_array_size, sizeof(vm_page_array_size)); kernel_object_ptr = (void *)Nl[2].n_value; + kkread(kd, Nl[3].n_value, &nbuf, sizeof(nbuf)); + kkread(kd, Nl[4].n_value, &nswbuf_mem, sizeof(nswbuf_mem)); + kkread(kd, Nl[5].n_value, &nswbuf_kva, sizeof(nswbuf_kva)); + kkread(kd, Nl[6].n_value, &nswbuf_raw, sizeof(nswbuf_raw)); + kern_size = Nl[8].n_value - Nl[7].n_value; /* * Scan the vm_page_array validating all pages with associated objects @@ -353,7 +369,7 @@ main(int ac, char **av) printf("%8.2fM wired vnode (in buffer cache)\n", count_wired_vnode * 4096.0 / 1048576.0); - printf("%8.2fM wired in-pmap\n", + printf("%8.2fM wired in-pmap (probably vnode pages also in buffer cache)\n", count_wired_in_pmap * 4096.0 / 1048576.0); printf("%8.2fM wired pgtable\n", count_wired_pgtable * 4096.0 / 1048576.0); @@ -361,10 +377,20 @@ main(int ac, char **av) count_wired_anon * 4096.0 / 1048576.0); printf("%8.2fM wired kernel_object\n", count_wired_kernel * 4096.0 / 1048576.0); + + printf("\t%8.2fM vm_page_array\n", + vm_page_array_size * sizeof(struct vm_page) / 1048576.0); + printf("\t%8.2fM buf, swbuf_mem, swbuf_kva, swbuf_raw\n", + (nbuf + nswbuf_mem + nswbuf_kva + nswbuf_raw) * + sizeof(struct buf) / 1048576.0); + printf("\t%8.2fM kernel binary\n", kern_size / 1048576.0); + printf("\t(also add in KMALLOC id kmapinfo, or loosely, vmstat -m)\n"); + printf("%8.2fM wired other (unknown object)\n", count_wired_obj_other * 4096.0 / 1048576.0); printf("%8.2fM wired other (no object, probably kernel)\n", count_wired_other * 4096.0 / 1048576.0); + printf("%8.2fM WIRED TOTAL\n", count_wired * 4096.0 / 1048576.0);