From owner-svn-src-all@FreeBSD.ORG Wed Jun 10 01:21:32 2009 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id C24AA106566C; Wed, 10 Jun 2009 01:21:32 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id A6F8E8FC20; Wed, 10 Jun 2009 01:21:32 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n5A1LWQZ089721; Wed, 10 Jun 2009 01:21:32 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n5A1LWVO089719; Wed, 10 Jun 2009 01:21:32 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200906100121.n5A1LWVO089719@svn.freebsd.org> From: Kip Macy Date: Wed, 10 Jun 2009 01:21:32 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r193878 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.5 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: Wed, 10 Jun 2009 01:21:33 -0000 Author: kmacy Date: Wed Jun 10 01:21:32 2009 New Revision: 193878 URL: http://svn.freebsd.org/changeset/base/193878 Log: As far as I can tell systems that have less than 4GB are more often hurt by prefetched than helped. On i386 systems and systems with less than 4GB, prefetch is now disabled by default. I've added a prefetch enable tunable, to enable prefetching for those systems. The prefetch disable tunable will continue to unconditionally disable prefetching. Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_zfetch.c Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Wed Jun 10 01:20:46 2009 (r193877) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c Wed Jun 10 01:21:32 2009 (r193878) @@ -158,6 +158,8 @@ static int arc_grow_retry = 60; */ static int arc_min_prefetch_lifespan; +extern int zfs_prefetch_disable; +extern int zfs_prefetch_enable; static int arc_dead; /* @@ -3549,6 +3551,19 @@ arc_init(void) mutex_init(&zfs_write_limit_lock, NULL, MUTEX_DEFAULT, NULL); #ifdef _KERNEL +#ifdef __i386__ + if (zfs_prefetch_enable != 1) { + printf("ZFS NOTICE: prefetch is disabled by default on i386" + " - add enable to tunable to change.\n" ); + zfs_prefetch_disable=1; + } +#endif + if ((((uint64_t)physmem * PAGESIZE) < (1ULL << 32)) && + (zfs_prefetch_enable != 1) && (zfs_prefetch_disable != 1)) { + printf("ZFS NOTICE: system has less than 4GB and prefetch enable is not set" + "... disabling.\n"); + zfs_prefetch_disable=1; + } /* Warn about ZFS memory and address space requirements. */ if (((uint64_t)physmem * PAGESIZE) < (256 + 128 + 64) * (1 << 20)) { printf("ZFS WARNING: Recommended minimum RAM size is 512MB; " Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_zfetch.c ============================================================================== --- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_zfetch.c Wed Jun 10 01:20:46 2009 (r193877) +++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/dmu_zfetch.c Wed Jun 10 01:21:32 2009 (r193878) @@ -38,6 +38,7 @@ */ int zfs_prefetch_disable = 0; +int zfs_prefetch_enable = 0; /* max # of streams per zfetch */ uint32_t zfetch_max_streams = 8; @@ -52,6 +53,9 @@ SYSCTL_DECL(_vfs_zfs); TUNABLE_INT("vfs.zfs.prefetch_disable", &zfs_prefetch_disable); SYSCTL_INT(_vfs_zfs, OID_AUTO, prefetch_disable, CTLFLAG_RDTUN, &zfs_prefetch_disable, 0, "Disable prefetch"); +TUNABLE_INT("vfs.zfs.prefetch_enable", &zfs_prefetch_enable); +SYSCTL_INT(_vfs_zfs, OID_AUTO, prefetch_enable, CTLFLAG_RDTUN, + &zfs_prefetch_enable, 0, "Enable prefetch for systems with less than 4GB"); SYSCTL_NODE(_vfs_zfs, OID_AUTO, zfetch, CTLFLAG_RW, 0, "ZFS ZFETCH"); TUNABLE_INT("vfs.zfs.zfetch.max_streams", &zfetch_max_streams); SYSCTL_UINT(_vfs_zfs_zfetch, OID_AUTO, max_streams, CTLFLAG_RDTUN,