[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <1318616824.2525.12.camel@edumazet-laptop>
Date: Fri, 14 Oct 2011 20:27:04 +0200
From: Eric Dumazet <eric.dumazet@...il.com>
To: David Miller <davem@...emloft.net>
Cc: netdev@...r.kernel.org
Subject: Re: [PATCH net-next] niu: fix skb truesize underestimation
Le vendredi 14 octobre 2011 à 00:34 -0400, David Miller a écrit :
>
> It would be pretty amazing for a leak of this magnitude to exist for
> so long. :-)
>
> A page can be split into multiple blocks, each block is some power
> of two in size.
>
> The chip splits up "blocks" into smaller (also power of two)
> fragments, and these fragments are what we en-tail to the SKBs.
>
> So at the top level we give the chip blocks. We try to make this
> equal to PAGE_SIZE. But if PAGE_SIZE is really large we limit the
> block size to 1 << 15. Note that it is only when we enforce this
> block size limit that the compount_page(page)->_count atomic increment
> will occur. As long as PAGE_SIZE <= 1 << 15, rbr_blocks_per_page
> will be 1.
>
> When the chip takes a block and starts using it, it decides which
> fragment size to use for that block. Once a fragment size has been
> choosen for a block, it will not change.
>
> The fragment sizes the chip can use is stored in rp->rbr_sizes[]. We
> always configure the chip to use 256 byte and 1024 byte blocks, then
> depending upon the MTU and the PAGE_SIZE we'll optionally enable other
> sizes such as 2048, 4096, and 8192.
>
> When we get an RX packet the descriptor tells us the DMA address
> and the fragment size in use for the block that the memory at
> DMA address belongs to.
>
> So the two seperate page reference count grabs you see are handling
> references for memory being chopped up at two different levels.
>
> I can't see how we could optimize the intra-block refcounts any
> further. Part of the problem is that we don't know apriori what
> fragment size the chip will use for a given block.
>
Thanks for taking the time to explain this David :)
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists