freebsd-current

[Prev] Thread [Next]  |  [Prev] Date [Next]

Re: [PATCH RFC]: Bus_dma eats all available memory Scott Long Fri Jun 26 08:00:18 2009

Piotr Zięcik wrote:
Thursday 25 June 2009 20:30:27 Scott Long napisał(a):
Piotr Zięcik wrote:
Hi

While working on new driver for FreeBSD I have found a problem in bus_dma
subsystem. Every time when bus_dmamap_create() is called on bus_dma tag
using bounce zone, at least 1 page in bounce zone is allocated. This
causes eating of all avaible memory by bounce zone. Problem affects i386,
amd64 and arm.
The code block that you point at can only be entered if the maxpages
limit has not been reached.  However, the max limit is per zone, not
global, and there's no easy way to make it be global.  Are you creating
an excessive number of tags/zones?

Driver creates one tag and and one map everytime when new request arrives.
Both are freed after processing. Driver can queue maximum 64 requests, so
it there will not be more than 64 tags and 64 maps. Debugging shows that the limit is never reached and number of tags and maps is around 30 - 40. In my oppinion this is not excessive number of tags.


Tags and maps should be allocated at driver initialization time, not
every time a request comes in.  The problem here isn't the MAX() test,
it's that the MIN_ALLOC_COMP test is getting fooled because the tag
keeps on getting recycled.  The correct fix is likely to move the flag
into the bounce zone object.  But in general, you should not be
allocating and freeing tags and maps so often, they are meant to have a
long lifespan.

Scott
_______________________________________________
[EMAIL PROTECTED] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-current
To unsubscribe, send any mail to "[EMAIL PROTECTED]"