[patch[ twa, bus_dma.h, busdma_machdep.c (amd64)
scottl at samsco.org
Sat Apr 29 21:03:38 UTC 2006
Sean Bryant wrote:
> I loaded up 6.1-Stable on a Dual Dual Core Opteron, with a 3ware
> 9550sx-4lp raid card in it and noticed a horrid boot time.
> Well after investigating the issue it turns out the twa driver had
> problems creating the bus_dmamaps. It was creating 255 request buffers
> and giving each of them a dma map.
This is exactly what is supposed to happen.
> Yippie! This leaves me with about a 7 - 10 minute boot time.
This is because contigmalloc is broken and does a N^2 search of pages,
starting with pages that are usually the least suitable for what it
wants. Yippie indeed. I committed a partial fix for this recently,
make sure that you have rev 126.96.36.199 of sys/vm/vm_contig.c.
> To correct this problem I created a bus_dmamap_create_v (should probably
> be called bus_dmamap_create_many as mux suggested) and this creates a
> large amount of dma maps all at once.
> Obviously to test I modified the twa driver to use the new function.
> I've seen no problems so far. let me know if you see any glaring errors.
> As there are probably some. Disk performance remained the same just
> speed up boot time considerably. This is only tested with amd64 code.
> The code *should* work with i386, but I wasn't able to test it. Please
> test and let me know of any problems.
> And I apologize ahead of time if this is useless I don't know much about
> the topic but was in need of a quick fix.
> Sean Bryant
Your method assumes that there will always be a bus_dmamap_t object
allocated. It's not explicitely wrong, but not very optimal either.
If the above fix to vm_contig.c doesn't help you, let me know and we
can work out a more complete fix. Another thing to tweak is to add
the following to /boot/loader.conf:
More information about the freebsd-stable