[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <54419489.4040007@redhat.com>
Date: Fri, 17 Oct 2014 15:13:29 -0700
From: Alexander Duyck <alexander.h.duyck@...hat.com>
To: Eric Dumazet <eric.dumazet@...il.com>,
Alexander Duyck <alexander.duyck@...il.com>
CC: David Laight <David.Laight@...LAB.COM>,
"Jiafei.Pan@...escale.com" <Jiafei.Pan@...escale.com>,
David Miller <davem@...emloft.net>,
"jkosina@...e.cz" <jkosina@...e.cz>,
"netdev@...r.kernel.org" <netdev@...r.kernel.org>,
"LeoLi@...escale.com" <LeoLi@...escale.com>,
"linux-doc@...r.kernel.org" <linux-doc@...r.kernel.org>
Subject: Re: [PATCH] net: use hardware buffer pool to allocate skb
On 10/17/2014 12:51 PM, Eric Dumazet wrote:
> On Fri, 2014-10-17 at 12:38 -0700, Alexander Duyck wrote:
>
>> That's not what I am saying, but there is a trade-off we always have to
>> take into account. Cutting memory overhead will likely have an impact
>> on performance. I would like to make the best informed trade-off in
>> that regard rather than just assuming worst case always for the driver.
> It seems you misunderstood me. You believe I suggested doing another
> allocation strategy in the drivers.
>
> This was not the case.
>
> This allocation strategy is wonderful. I repeat : This is wonderful.
No, I think I understand you. I'm just not sure listing this as a 4K
allocation in truesize makes sense. The problem is the actual
allocation can be either 2K or 4K, and my concern is that by setting it
to 4K we are going to be hurting the case where the actual allocation to
the socket is only 2K for the half page w/ reuse.
I was brining up the other allocation strategy to prove a point. From my
perspective it wouldn't make any more sense to assign 32K to the
truesize for an allocated fragment using __netdev_alloc_frag, but it can
suffer the same type of issues only to a greater extent due to the use
of the compound page. Just because it is shared among many more uses
doesn't mean it couldn't end up in a scenario where one socket somehow
keeps queueing up the 32K pages and sitting on them. I would think all
it would take is 1 bad acting flow interleaved in ~20 active flows to
suddenly gobble up a ton of memory without it being accounted for.
> We only have to make sure we do not fool memory management layers, when
> they do not understand where the memory is.
>
> Apparently you think it is hard, while it really is not.
I think you are over simplifying it. By setting it to 4K there are
situations where a socket will be double charged for getting two halves
of the same page. In these cases there will be a negative impact on
performance as the number of frames that can be queued is reduced. What
you are proposing is possibly overreporting memory use by a factor of 2
instead of possibly under-reporting it by a factor of 2.
I would be more moved by data than just conjecture on what the driver is
or isn't doing. My theory is that most of the time the page is reused
so 2K is the correct value to report, and very seldom would 4K ever be
the correct value. This is what I have seen historically with igb/ixgbe
using the page reuse. If you have cases that show that the page isn't
being reused then we can explore the 4K truesize change, but until then
I think the page is likely being reused and we should probably just
stick with the 2K value as we should be getting at least 2 uses per page.
Thanks,
Alex
--
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