Date: Fri, 9 Aug 2002 17:32:55 -0400 (EDT) From: Andrew Gallatin <gallatin@cs.duke.edu> To: Bosko Milekic <bmilekic@unixdaemons.com> Cc: ken@freebsd.org, freebsd-net@freebsd.org Subject: Re: Jumbo Clusters in mb_alloc Message-ID: <15700.13575.470677.723138@grasshopper.cs.duke.edu> In-Reply-To: <20020809164136.A88798@unixdaemons.com> References: <20020809151627.A88180@unixdaemons.com> <15700.9669.885383.727182@grasshopper.cs.duke.edu> <20020809164136.A88798@unixdaemons.com>
next in thread | previous in thread | raw e-mail | index | archive | help
Bosko Milekic writes: > > On Fri, Aug 09, 2002 at 04:27:49PM -0400, Andrew Gallatin wrote: > > > > Bosko Milekic writes: > > > > > > Hi guys, > > > > > > Can you put this (the attached) to use? > > > > > > It's the implementation of jumbo clusters within mb_alloc, as > > > discussed on -net not too long ago. > > > > > > I have not written the allocation interface yet as I would like to > > > know if you could put them to use in some of the drivers, and also > > > what you would need from the interface. > > > > I can certainly use this in my (3rd party) GM Myrinet driver. > > > > I think the tigon driver can be made to use this, but I have no tigon > > hardware anymore. I also think bge could be made to use this, but > > again, no hardware to play with it on. > > Excellent. > > So the question is what do you think would be a convenient interface? > This really boils down to how you plan to use it. I'm assuming that, > for example, you can do scatter DMA to each page (each buffer spans > /at most/ 3 pages, and only 2 pages on alpha) in the driver receive > code. So, assuming that's the case, we can provide an allocation > routine, something like m_getjmb() that will give you an mbuf and a > jumbo buf in one shot. Then you can extract the physical addresses > from the parts of the data region and scatter DMA to it. The buffers > with the mbuf would be easily freed with m_freem(). I already have code to extract physical address from an mbuf in such a way as to make sure that DMA does not cross page boundaries, but I'd hate to see this code replicated everywhere. Ideally, I'd love to see an interface where I call a function dma_map_mbuf_chain (m, ...) and get back an array of DMA addresses. Hmm.. WWNBD (what would NetBSD do..). Ah, yes: bus_dmamap_load_mbuf(sc->sc_dmat, dmamap, m0, BUS_DMA_WRITE|BUS_DMA_NOWAIT) != 0) { MGETHDR(m, M_DONTWAIT, MT_DATA); Methinks its high time we adopted this interface. > What about the send case, though? How do you want to determine The send case opens a huge can-of-worms. Lets say that somebody is forwarding between myrinet & GigE using FreeBSD, with myri0 on the myrinet network, and em0 on GigE. Let's assume that myri0 is using jumbo buffers, but em0 isn't jumbo aware & cannot accept them & the forwarded packets end up as garbage. Perhaps we need to add an IFCAP_JUMBOAWARE flag and somwhere (IF_DEQUE?) add a KASSERT to catch situaions like this. Or even.. ick, add code to copy to a normal mbuf chain. Drew To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-net" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?15700.13575.470677.723138>