Request for feedback on common data backstore in the kernel
Scott Long
scottl at samsco.org
Wed Sep 26 10:51:26 PDT 2007
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
More information about the freebsd-scsi
mailing list