From owner-svn-src-all@FreeBSD.ORG Sun Mar 29 10:02:30 2015 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [8.8.178.115]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 4FEC74E5; Sun, 29 Mar 2015 10:02:30 +0000 (UTC) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 30739BDA; Sun, 29 Mar 2015 10:02:30 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.9/8.14.9) with ESMTP id t2TA2Tfr021926; Sun, 29 Mar 2015 10:02:29 GMT (envelope-from mav@FreeBSD.org) Received: (from mav@localhost) by svn.freebsd.org (8.14.9/8.14.9/Submit) id t2TA2TbM021925; Sun, 29 Mar 2015 10:02:29 GMT (envelope-from mav@FreeBSD.org) Message-Id: <201503291002.t2TA2TbM021925@svn.freebsd.org> X-Authentication-Warning: svn.freebsd.org: mav set sender to mav@FreeBSD.org using -f From: Alexander Motin Date: Sun, 29 Mar 2015 10:02:29 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r280805 - head/sys/kern X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 29 Mar 2015 10:02:30 -0000 Author: mav Date: Sun Mar 29 10:02:29 2015 New Revision: 280805 URL: https://svnweb.freebsd.org/changeset/base/280805 Log: Add four new DDB commands to display vmem(9) statistics. In particular, such DDB commands were added: show vmem show all vmem show vmemdump show all vmemdump As possible usage, that allows to see KVA usage and fragmentation. Modified: head/sys/kern/subr_vmem.c Modified: head/sys/kern/subr_vmem.c ============================================================================== --- head/sys/kern/subr_vmem.c Sun Mar 29 07:48:02 2015 (r280804) +++ head/sys/kern/subr_vmem.c Sun Mar 29 10:02:29 2015 (r280805) @@ -1390,6 +1390,8 @@ vmem_dump(const vmem_t *vm , int (*pr)(c #endif /* defined(DDB) || defined(DIAGNOSTIC) */ #if defined(DDB) +#include + static bt_t * vmem_whatis_lookup(vmem_t *vm, vmem_addr_t addr) { @@ -1443,6 +1445,78 @@ vmem_print(vmem_addr_t addr, const char vmem_dump(vm, pr); } + +DB_SHOW_COMMAND(vmemdump, vmemdump) +{ + + if (!have_addr) { + db_printf("usage: show vmemdump \n"); + return; + } + + vmem_dump((const vmem_t *)addr, db_printf); +} + +DB_SHOW_ALL_COMMAND(vmemdump, vmemdumpall) +{ + const vmem_t *vm; + + LIST_FOREACH(vm, &vmem_list, vm_alllist) + vmem_dump(vm, db_printf); +} + +DB_SHOW_COMMAND(vmem, vmem_summ) +{ + const vmem_t *vm = (const void *)addr; + const bt_t *bt; + size_t ft[VMEM_MAXORDER], ut[VMEM_MAXORDER]; + size_t fs[VMEM_MAXORDER], us[VMEM_MAXORDER]; + int ord; + + if (!have_addr) { + db_printf("usage: show vmem \n"); + return; + } + + db_printf("vmem %p '%s'\n", vm, vm->vm_name); + db_printf("\tquantum:\t%zu\n", vm->vm_quantum_mask + 1); + db_printf("\tsize:\t%zu\n", vm->vm_size); + db_printf("\tinuse:\t%zu\n", vm->vm_inuse); + db_printf("\tfree:\t%zu\n", vm->vm_size - vm->vm_inuse); + db_printf("\tbusy tags:\t%d\n", vm->vm_nbusytag); + db_printf("\tfree tags:\t%d\n", vm->vm_nfreetags); + + memset(&ft, 0, sizeof(ft)); + memset(&ut, 0, sizeof(ut)); + memset(&fs, 0, sizeof(fs)); + memset(&us, 0, sizeof(us)); + TAILQ_FOREACH(bt, &vm->vm_seglist, bt_seglist) { + ord = SIZE2ORDER(bt->bt_size >> vm->vm_quantum_shift); + if (bt->bt_type == BT_TYPE_BUSY) { + ut[ord]++; + us[ord] += bt->bt_size; + } else if (bt->bt_type == BT_TYPE_FREE) { + ft[ord]++; + fs[ord] += bt->bt_size; + } + } + db_printf("\t\t\tinuse\tsize\t\tfree\tsize\n"); + for (ord = 0; ord < VMEM_MAXORDER; ord++) { + if (ut[ord] == 0 && ft[ord] == 0) + continue; + db_printf("\t%-15zu %zu\t%-15zu %zu\t%-16zu\n", + ORDER2SIZE(ord) << vm->vm_quantum_shift, + ut[ord], us[ord], ft[ord], fs[ord]); + } +} + +DB_SHOW_ALL_COMMAND(vmem, vmem_summall) +{ + const vmem_t *vm; + + LIST_FOREACH(vm, &vmem_list, vm_alllist) + vmem_summ((db_expr_t)vm, TRUE, count, modif); +} #endif /* defined(DDB) */ #define vmem_printf printf