From owner-freebsd-fs@freebsd.org Tue Mar 29 21:26:03 2016 Return-Path: Delivered-To: freebsd-fs@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 84BFAAE21BC for ; Tue, 29 Mar 2016 21:26:03 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from mailman.ysv.freebsd.org (mailman.ysv.freebsd.org [IPv6:2001:1900:2254:206a::50:5]) by mx1.freebsd.org (Postfix) with ESMTP id 70E8F1DBA for ; Tue, 29 Mar 2016 21:26:03 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: by mailman.ysv.freebsd.org (Postfix) id 6CB44AE21BB; Tue, 29 Mar 2016 21:26:03 +0000 (UTC) Delivered-To: fs@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 6A12EAE21BA for ; Tue, 29 Mar 2016 21:26:03 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from cell.glebi.us (glebi.us [96.95.210.25]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client CN "cell.glebi.us", Issuer "cell.glebi.us" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4D5931DB8; Tue, 29 Mar 2016 21:26:02 +0000 (UTC) (envelope-from glebius@FreeBSD.org) Received: from cell.glebi.us (localhost [127.0.0.1]) by cell.glebi.us (8.15.2/8.15.2) with ESMTPS id u2TLPtUV058307 (version=TLSv1.2 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Tue, 29 Mar 2016 14:25:56 -0700 (PDT) (envelope-from glebius@FreeBSD.org) Received: (from glebius@localhost) by cell.glebi.us (8.15.2/8.15.2/Submit) id u2TLPtDE058306; Tue, 29 Mar 2016 14:25:55 -0700 (PDT) (envelope-from glebius@FreeBSD.org) X-Authentication-Warning: cell.glebi.us: glebius set sender to glebius@FreeBSD.org using -f Date: Tue, 29 Mar 2016 14:25:55 -0700 From: Gleb Smirnoff To: Bruce Evans Cc: fs@freebsd.org, rmacklem@freebsd.org Subject: Re: nfs pessimized by vnode pages changes Message-ID: <20160329212555.GP2616@FreeBSD.org> References: <20160327144755.Y4269@besplex.bde.org> <20160329090209.Q1020@besplex.bde.org> <20160329001623.GC2616@FreeBSD.org> <20160329122721.D1549@besplex.bde.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20160329122721.D1549@besplex.bde.org> User-Agent: Mutt/1.5.24 (2015-08-30) X-BeenThere: freebsd-fs@freebsd.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: Filesystems List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 29 Mar 2016 21:26:03 -0000 On Tue, Mar 29, 2016 at 01:24:27PM +1100, Bruce Evans wrote: B> > B> I couldn't get full-fs-block input to work right in ncl_getpages(). In B> > B> the old version, vm_fault_hold() almost always calls it with the pages B> > B> for exactly 1 full block, because vm_fault_additional_pages() somehow B> > B> finds this many pages. B> > B> > The last quoted paragraph is a correct observation. According to your B> > investigations, prior to r292373 NFS was doing multiple page pageins, B> > despite it should have reported that it can't. My reading of the code B> > is the same: both before r292373 and after r292373 NFS should page in B> > a single page at request. I quickly reviewed the whole codepath and I B> > can't see how with older code it was able to do multiple page pageins. B> B> I found it. In old versions, vm_fault_additional_pages() exists and B> calls vnode_pager_haspage() to locate some additional pages. B> VOP_BMAP() is vop_stdbmap() for nfs. This doesn't locate any B> additional fs blocks, but vnode_pager_haspage() locates the page within B> the single nfs block and returns the number of pages to read behind and B> ahead to fill in the block. Hmm, the code in vnode_pager_generic_getpages() after my change does pretty much the same: /* Recalculate blocks available after/before to pages. */ poff = (foff % bsize) / PAGE_SIZE; before *= pagesperblock; before += poff; after *= pagesperblock; after += pagesperblock - (poff + 1); So, we got zeroes in 'after' and 'before' after vop_stdbmap. But here we add 'poff' to them, which should yield in the same read sizes as before. I will debug that. -- Totus tuus, Glebius.