From owner-freebsd-fs@FreeBSD.ORG Fri Apr 16 13:58:14 2010 Return-Path: Delivered-To: freebsd-fs@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 81E57106564A for ; Fri, 16 Apr 2010 13:58:14 +0000 (UTC) (envelope-from avg@icyb.net.ua) Received: from citadel.icyb.net.ua (citadel.icyb.net.ua [212.40.38.140]) by mx1.freebsd.org (Postfix) with ESMTP id C97838FC28 for ; Fri, 16 Apr 2010 13:58:13 +0000 (UTC) Received: from odyssey.starpoint.kiev.ua (alpha-e.starpoint.kiev.ua [212.40.38.101]) by citadel.icyb.net.ua (8.8.8p3/ICyb-2.3exp) with ESMTP id QAA02734 for ; Fri, 16 Apr 2010 16:58:11 +0300 (EEST) (envelope-from avg@icyb.net.ua) Message-ID: <4BC86CF3.7060708@icyb.net.ua> Date: Fri, 16 Apr 2010 16:58:11 +0300 From: Andriy Gapon User-Agent: Thunderbird 2.0.0.24 (X11/20100319) MIME-Version: 1.0 To: freebsd-fs@FreeBSD.org X-Enigmail-Version: 0.95.7 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Cc: Subject: some arc_reclaim_needed stats X-BeenThere: freebsd-fs@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Filesystems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 16 Apr 2010 13:58:14 -0000 I added some statistics gathering code to arc_reclaim_needed (see a diff below) and got these results: vfs.zfs.arc_reclaim_kmem_used: 192 vfs.zfs.arc_reclaim_paging_target: 72505 vfs.zfs.arc_reclaim_pages_needed: 17 vfs.zfs.arc_reclaim_arc_c_max: 150 vfs.zfs.arc_reclaim_needfree: 1693 Are these numbers useful in any way? :-) What do they tell? Perhaps vm_paging_target() check is a bit too aggressive? Thanks! diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c index ca8ffb1..6db69e1 100644 --- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c +++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c @@ -2040,6 +2040,24 @@ arc_shrink(void) static int needfree = 0; +static int arc_reclaim_needfree = 0; +static int arc_reclaim_arc_c_max = 0; +static int arc_reclaim_pages_needed = 0; +static int arc_reclaim_paging_target = 0; +static int arc_reclaim_kmem_used = 0; + +SYSCTL_INT(_vfs_zfs, OID_AUTO, arc_reclaim_needfree, CTLFLAG_RD, + &arc_reclaim_needfree, 0, "Later"); +SYSCTL_INT(_vfs_zfs, OID_AUTO, arc_reclaim_arc_c_max, CTLFLAG_RD, + &arc_reclaim_arc_c_max, 0, "Later"); +SYSCTL_INT(_vfs_zfs, OID_AUTO, arc_reclaim_pages_needed, CTLFLAG_RD, + &arc_reclaim_pages_needed, 0, "Later"); +SYSCTL_INT(_vfs_zfs, OID_AUTO, arc_reclaim_paging_target, CTLFLAG_RD, + &arc_reclaim_paging_target, 0, "Later"); +SYSCTL_INT(_vfs_zfs, OID_AUTO, arc_reclaim_kmem_used, CTLFLAG_RD, + &arc_reclaim_kmem_used, 0, "Later"); + +/* XXX AVG ZFS BOOKMARK */ static int arc_reclaim_needed(void) { @@ -2048,10 +2066,14 @@ arc_reclaim_needed(void) #endif #ifdef _KERNEL - if (needfree) + if (needfree) { + arc_reclaim_needfree++; return (1); - if (arc_size > arc_c_max) + } + if (arc_size > arc_c_max) { + arc_reclaim_arc_c_max++; return (1); + } if (arc_size <= arc_c_min) return (0); @@ -2059,8 +2081,14 @@ arc_reclaim_needed(void) * If pages are needed or we're within 2048 pages * of needing to page need to reclaim */ - if (vm_pages_needed || (vm_paging_target() > -2048)) + if (vm_pages_needed) { + arc_reclaim_pages_needed++; + return (1); + } + if ((vm_paging_target() > -2048)) { + arc_reclaim_paging_target++; return (1); + } #if 0 /* @@ -2105,8 +2133,10 @@ arc_reclaim_needed(void) return (1); #endif #else - if (kmem_used() > (kmem_size() * 3) / 4) + if (kmem_used() > (kmem_size() * 3) / 4) { + arc_reclaim_kmem_used++; return (1); + } #endif #else -- Andriy Gapon