Extreme contigmalloc() slowness with mpt driver

Scott Long scottl at samsco.org
Sat Jan 14 07:28:16 PST 2006


Steve Kargl wrote:
> On Sat, Jan 14, 2006 at 12:21:17AM -0500, Kris Kennaway wrote:
> 
>>I have an amd64 machine with 16GB of RAM that takes ages to boot (~40
>>minutes on 7.0).  This is because the mpt driver takes 20 minutes to
>>attach (with 2 instances).  This in turn is because the following code
>>from dev/mpt/mpt_pci.c:mpt_dma_mem_alloc() takes about 5 seconds to
>>execute, and it is run 256 times in a loop:
>>
>>                error = bus_dmamap_create(mpt->buffer_dmat, 0, &req->dmap);
>>
>>When I set vm.old_contigmalloc=1, the system boots without delay.
>>
>>This points to a bug in contigmalloc.
>>
> 
> 
> This is probably related to my recent reports of extremely
> slow probing of fxp0.  I have 12 GB on a Tyan K8S Pro and
> fxp0 takes on the order of 7 minutes to probe.
> 

Yep, that's the same reason.  THe issue here is that bus_dmamap_create
is using contigmalloc to allocate bounce pages for the device.  At the
request of Soeren, I recently upped the max limit on bounce pages from
512 to 4096.  Before that, drivers would quickly reach the max and then
move on.  Now that the max is a lot higher, I guess it points to a
scalability problem in the page search algorithm of contigmalloc.

Scott



More information about the freebsd-current mailing list