Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 6 Oct 2003 05:35:37 -0700
From:      Luigi Rizzo <rizzo@icir.org>
To:        Poul-Henning Kamp <phk@phk.freebsd.dk>
Cc:        arch@freebsd.org
Subject:   Re: Alignment of disk-I/O from userland.
Message-ID:  <20031006053537.A9428@xorpc.icir.org>
In-Reply-To: <21229.1065441969@critter.freebsd.dk>; from phk@phk.freebsd.dk on Mon, Oct 06, 2003 at 02:06:09PM %2B0200
References:  <21229.1065441969@critter.freebsd.dk>

next in thread | previous in thread | raw e-mail | index | archive | help
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 <stdlib.h>
> 
> 	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"



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20031006053537.A9428>