Alignment of disk-I/O from userland.
From: Poul-Henning Kamp (phk_at_phk.freebsd.dk)
Date: 10/06/03
- Previous message: Harti Brandt: "Re: adding if_dev member to struct ifnet"
- Next in thread: Luigi Rizzo: "Re: Alignment of disk-I/O from userland."
- Reply: Luigi Rizzo: "Re: Alignment of disk-I/O from userland."
- Reply: Garrett Wollman: "Re: Alignment of disk-I/O from userland."
- Maybe reply: Mark Valentine: "Re: Alignment of disk-I/O from userland."
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
To: arch@freebsd.org Date: Mon, 06 Oct 2003 14:06:09 +0200
Some disk controllers require that the memory buffer for a DMA
transfer be aligned on a particular bounday, typically four bytes,
but in some cases larger than that.
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
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"
- Previous message: Harti Brandt: "Re: adding if_dev member to struct ifnet"
- Next in thread: Luigi Rizzo: "Re: Alignment of disk-I/O from userland."
- Reply: Luigi Rizzo: "Re: Alignment of disk-I/O from userland."
- Reply: Garrett Wollman: "Re: Alignment of disk-I/O from userland."
- Maybe reply: Mark Valentine: "Re: Alignment of disk-I/O from userland."
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]