Re: Alignment of disk-I/O from userland.

From: Harti Brandt (brandt_at_fokus.fraunhofer.de)
Date: 10/07/03

  • Next message: Jeff Roberson: "Re: Alignment of disk-I/O from userland."
    Date: Tue, 7 Oct 2003 09:25:16 +0200 (CEST)
    To: Scott Long <scottl@freebsd.org>
    
    

    On Mon, 6 Oct 2003, Scott Long wrote:

    SL>On Mon, 6 Oct 2003, Poul-Henning Kamp wrote:
    SL>> In message <200310062146.h96Lkpx0093486@khavrinen.lcs.mit.edu>, Garrett Wollman
    SL>> writes:
    SL>>
    SL>> >I think that gives us plenary authority to require appropriate
    SL>> >alignment of data buffers used to access disk devices directly.
    SL>>
    SL>> Well, apart from us wedging or botching the request rather than
    SL>> return a consistent error we're standards compliant then.
    SL>>
    SL>> It has been mentioned on #thatchannel that busdma should take care
    SL>> of this by copying the request as necessary. Faced with the prospect
    SL>> of a request several megabytes in size, I don't like the prospect
    SL>> of malloc/bcopy too much.
    SL>
    SL>Working around hardware requirements from the block layer gets messy.
    SL>You obviously don't want to manually align buffers that are distined
    SL>for hardware that doesn't care about the alignment. How do you
    SL>communicate this property upwards from the driver? Callbacks? Extra
    SL>flags in disk_create()? It's all rather messy that way. We already
    SL>have the busdma interface whose sole purpose is to take system
    SL>buffers and prepare them for transfer to/from hardware. It already
    SL>understands the concept of alignment, though it only applies it to
    SL>buffers that it allocates, not buffers that are handed to it. Fixing

    This seems to be not true. The alignment parameter for the busdma tag is
    more or less ignored in all backends. With the old malloc code you could
    simply make sure that the buffer you request is at least the size of
    alignment you need. With UMA this doesn't work anymore. I bumped into this
    problem while writing several ATM drivers which need alignment of 16 or 32
    byte. At the moment the driver does this alignment itself by allocating a
    large enough dmamem buffer and fiddling with the pointers.

    harti

    SL>that would be easy, and would allow for optimizations based on the
    SL>bus (GART and IOMMU remapping). It also keeps the property down at
    SL>the device driver where it belongs.
    SL>
    SL>As for returning an error code for a buffer that we (arbitrarily) believe
    SL>to be too big to align, I'm not sure that it's a valid thing to worry
    SL>about. People expect their hardware to Just Work, regardless of how cheap
    SL>it is. If someone buys a cheap card with a cheap DMA engine, their cost
    SL>comes in from higher system time per I/O. If they don't like that, they
    SL>can complain to the manufacturer and/or buy a better card. I'm not aware
    SL>of Linux nor OSX rejecting I/O based on arbitrary size limits.
    SL>
    SL>Scott
    SL>_______________________________________________
    SL>freebsd-arch@freebsd.org mailing list
    SL>http://lists.freebsd.org/mailman/listinfo/freebsd-arch
    SL>To unsubscribe, send any mail to "freebsd-arch-unsubscribe@freebsd.org"
    SL>

    -- 
    harti brandt,
    http://www.fokus.fraunhofer.de/research/cc/cats/employees/hartmut.brandt/private
    brandt@fokus.fraunhofer.de, harti@freebsd.org
    _______________________________________________
    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: Jeff Roberson: "Re: Alignment of disk-I/O from userland."

    Relevant Pages

    • Re: general purpose driver for Printer Port?
      ... If I have computer running this funky proposed "parallel port" driver, it would'nt need any support for conventional printer port operation anymore. ... USB is attractive and more modern way to go but, it's more expensive on hardware and I've yet to find anything that lets actual USB connected hardware, directly generate an interrupt? ... Let the standard version handle the hardware and have the filter maintain a request for data it places into its buffers holding on to them until requested. ...
      (microsoft.public.development.device.drivers)
    • Re: general purpose driver for Printer Port?
      ... I would consider using a filter on the standard parallel port driver since ... Switching your hardware to use USB may be the best solution ... Separate buffers for INPUT and OUTPUT of course. ...
      (microsoft.public.development.device.drivers)
    • Re: Translating virtual address to physical address in CE 6.0
      ... Your *driver* for the device would be able to accomplish this, ... and program the hardware. ... physical addresses of some buffers. ... various pages into memory. ...
      (microsoft.public.windowsce.embedded)
    • Re: [BUG] slab debug vs. L1 alignement
      ... > SCSI device does not currently have any alignment restrictions. ... This must then be handled by the driver. ... Specifying that DMA buffers must be cache-line aligned would ...
      (Linux-Kernel)
    • Re: Alignment of disk-I/O from userland.
      ... >>alignment of data buffers used to access disk devices directly. ... Working around hardware requirements from the block layer gets messy. ... You obviously don't want to manually align buffers that are distined ... People expect their hardware to Just Work, regardless of how cheap ...
      (freebsd-arch)