Alignment of disk-I/O from userland.

From: Poul-Henning Kamp (phk_at_phk.freebsd.dk)
Date: 10/06/03

  • Next message: Luigi Rizzo: "Re: Alignment of disk-I/O from userland."
    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"
    

  • Next message: Luigi Rizzo: "Re: Alignment of disk-I/O from userland."