Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 26 Sep 2007 11:51:00 -0600
From:      Scott Long <scottl@samsco.org>
To:        Hans Petter Selasky <hselasky@c2i.net>
Cc:        freebsd-scsi@freebsd.org, freebsd-usb@freebsd.org, freebsd-net@freebsd.org
Subject:   Re: Request for feedback on common data backstore in the kernel
Message-ID:  <46FA9C04.9060603@samsco.org>
In-Reply-To: <200709260131.49156.hselasky@c2i.net>
References:  <200709260131.49156.hselasky@c2i.net>

next in thread | previous in thread | raw e-mail | index | archive | help
Hans Petter Selasky wrote:
> Hi,
> 
> Please keep me CC'ed, hence I'm not on all these lists.
> 
> In the kernel we currently have two different data backstores:
> 
> struct mbuf
> 
> and 
> 
> struct buf
> 
> These two backstores serve two different device types. "mbufs" are for network 
> devices and "buf" is for disk devices.
> 
> Problem:
> 
> The current backstores are loaded into DMA by using the BUS-DMA framework. 
> This appears not to be too fast according to Kip Macy. See:
> 
> http://perforce.freebsd.org/chv.cgi?CH=126455
> 

Busdma isn't fast enough for 1Gb and 10Gb network drivers that are
trying to max out their packet rates.  It's still fine for storage
drivers and other slow/medium speed device drivers, like USB and
Firewire.  I am working on techniques to make the API easier to use
and the implementation fast enough for the aforementioned devices.

> Some ideas I have:
> 
> When a buffer is out out of range for a hardware device and a data-copy is 
> needed I want to simply copy that data in smaller parts to/from a 
> pre-allocated bounce buffer. I want to avoid allocating this buffer 
> when "bus_dmamap_load()" is called.

I think you've missed the point of having architecture portable drivers.
John-Mark describes this further.  It also makes little sense to push
the responsibility for handling bounce buffers out of a central
subsystem and back into every driver.

Scott




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