From owner-freebsd-arch@FreeBSD.ORG Mon Oct 6 05:35:39 2003 Return-Path: Delivered-To: freebsd-arch@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 34E5F16A4B3 for ; Mon, 6 Oct 2003 05:35:39 -0700 (PDT) Received: from xorpc.icir.org (xorpc.icir.org [192.150.187.68]) by mx1.FreeBSD.org (Postfix) with ESMTP id 66B1743FE1 for ; Mon, 6 Oct 2003 05:35:38 -0700 (PDT) (envelope-from rizzo@xorpc.icir.org) Received: from xorpc.icir.org (localhost [127.0.0.1]) by xorpc.icir.org (8.12.9p1/8.12.3) with ESMTP id h96CZbsd009556; Mon, 6 Oct 2003 05:35:37 -0700 (PDT) (envelope-from rizzo@xorpc.icir.org) Received: (from rizzo@localhost) by xorpc.icir.org (8.12.9p1/8.12.3/Submit) id h96CZbFQ009555; Mon, 6 Oct 2003 05:35:37 -0700 (PDT) (envelope-from rizzo) Date: Mon, 6 Oct 2003 05:35:37 -0700 From: Luigi Rizzo To: Poul-Henning Kamp Message-ID: <20031006053537.A9428@xorpc.icir.org> References: <21229.1065441969@critter.freebsd.dk> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.2.5.1i In-Reply-To: <21229.1065441969@critter.freebsd.dk>; from phk@phk.freebsd.dk on Mon, Oct 06, 2003 at 02:06:09PM +0200 cc: arch@freebsd.org Subject: Re: Alignment of disk-I/O from userland. X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 06 Oct 2003 12:35:39 -0000 On Mon, Oct 06, 2003 at 02:06:09PM +0200, Poul-Henning Kamp wrote: ... > If a userland program does a read or write on a disk device (/dev/ad0 > for instance), we do some VM swizzle in physio and the request is ^^^^^ I don't completely follow -- is this something you plan to do, or it is what we do now ? In the latter case then the code you show below is already causing trouble, and enforcing (or should we say "checking") that the alignment is respected would just make the problem evident (which is clearly desirable). In any case i guess it is unavoidable to implement some form of bounce buffers -- sometimes you just can't modify the binary that issues the read/write request. And if you can provide some optimization to bypass the bounce buffer after checking that the alignment is the correct one, then you are improving performance in some cases and not harming in the remaining ones, so i would say go for it... cheers luigi > in essence a zero-copy thing directly into the process' pages, and > as an sideeffect of this, the pointer passed to the device driver > has the same offset into a page as the users request (the lower 12 > bits on i386). > > That means that userland programs can send down I/O requests which > are not properly aligned. > > This program, in other words, would be a problem for some of our > disk controllers: > > #include > > int > main(int argc, char **argv) > { > char *p; > > p = malloc(8192); /* page aligned */ > read (0, p + 1, 2048); /* not */ > } > > Most code which does disk I/O from userland uses malloc'ed buffers for > the sectors and the alignment comes for free, but we currently have > no requirement that it be so. > > How much code (apart from newfs(8)!) would we break by enforcing a > minimum alignment of for instance 16 bytes on disk-I/O requests > from userland ? > > It would be a trivial matter to do the "bounce-buffering" somewhere > along the road, but I am not convinced it is the right thing to do > because all of sudden some requests would take a performance hit to > do a copy and some would not... > > Qualified, informed input requested. > > No Bikesheds please. > > Poul-Henning > > -- > Poul-Henning Kamp | UNIX since Zilog Zeus 3.20 > phk@FreeBSD.ORG | TCP/IP since RFC 956 > FreeBSD committer | BSD since 4.3-tahoe > Never attribute to malice what can adequately be explained by incompetence. > _______________________________________________ > freebsd-arch@freebsd.org mailing list > http://lists.freebsd.org/mailman/listinfo/freebsd-arch > To unsubscribe, send any mail to "freebsd-arch-unsubscribe@freebsd.org"