From: Leon Romanovsky <leon@kernel.org>
To: Salil Mehta <salil.mehta@huawei.com>
Cc: "dledford@redhat.com" <dledford@redhat.com>,
"Huwei (Xavier)" <xavier.huwei@huawei.com>,
oulijun <oulijun@huawei.com>,
"mehta.salil.lnk@gmail.com" <mehta.salil.lnk@gmail.com>,
"linux-rdma@vger.kernel.org" <linux-rdma@vger.kernel.org>,
"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Linuxarm <linuxarm@huawei.com>,
"Zhangping (ZP)" <zhangping5@huawei.com>
Subject: Re: [PATCH for-next 03/11] IB/hns: Optimize the logic of allocating memory using APIs
Date: Mon, 21 Nov 2016 19:14:23 +0200 [thread overview]
Message-ID: <20161121171423.GA23083@leon.nu> (raw)
In-Reply-To: <F4CC6FACFEB3C54C9141D49AD221F7F91A7AD7DF@lhreml503-mbx>
[-- Attachment #1: Type: text/plain, Size: 4775 bytes --]
On Mon, Nov 21, 2016 at 04:12:38PM +0000, Salil Mehta wrote:
> > -----Original Message-----
> > From: Leon Romanovsky [mailto:leon@kernel.org]
> > Sent: Wednesday, November 16, 2016 8:36 AM
> > To: Salil Mehta
> > Cc: dledford@redhat.com; Huwei (Xavier); oulijun;
> > mehta.salil.lnk@gmail.com; linux-rdma@vger.kernel.org;
> > netdev@vger.kernel.org; linux-kernel@vger.kernel.org; Linuxarm;
> > Zhangping (ZP)
> > Subject: Re: [PATCH for-next 03/11] IB/hns: Optimize the logic of
> > allocating memory using APIs
> >
> > On Tue, Nov 15, 2016 at 03:52:46PM +0000, Salil Mehta wrote:
> > > > -----Original Message-----
> > > > From: Leon Romanovsky [mailto:leon@kernel.org]
> > > > Sent: Wednesday, November 09, 2016 7:22 AM
> > > > To: Salil Mehta
> > > > Cc: dledford@redhat.com; Huwei (Xavier); oulijun;
> > > > mehta.salil.lnk@gmail.com; linux-rdma@vger.kernel.org;
> > > > netdev@vger.kernel.org; linux-kernel@vger.kernel.org; Linuxarm;
> > > > Zhangping (ZP)
> > > > Subject: Re: [PATCH for-next 03/11] IB/hns: Optimize the logic of
> > > > allocating memory using APIs
> > > >
> > > > On Fri, Nov 04, 2016 at 04:36:25PM +0000, Salil Mehta wrote:
> > > > > From: "Wei Hu (Xavier)" <xavier.huwei@huawei.com>
> > > > >
> > > > > This patch modified the logic of allocating memory using APIs in
> > > > > hns RoCE driver. We used kcalloc instead of kmalloc_array and
> > > > > bitmap_zero. And When kcalloc failed, call vzalloc to alloc
> > > > > memory.
> > > > >
> > > > > Signed-off-by: Wei Hu (Xavier) <xavier.huwei@huawei.com>
> > > > > Signed-off-by: Ping Zhang <zhangping5@huawei.com>
> > > > > Signed-off-by: Salil Mehta <salil.mehta@huawei.com>
> > > > > ---
> > > > > drivers/infiniband/hw/hns/hns_roce_mr.c | 15 ++++++++-------
> > > > > 1 file changed, 8 insertions(+), 7 deletions(-)
> > > > >
> > > > > diff --git a/drivers/infiniband/hw/hns/hns_roce_mr.c
> > > > b/drivers/infiniband/hw/hns/hns_roce_mr.c
> > > > > index fb87883..d3dfb5f 100644
> > > > > --- a/drivers/infiniband/hw/hns/hns_roce_mr.c
> > > > > +++ b/drivers/infiniband/hw/hns/hns_roce_mr.c
> > > > > @@ -137,11 +137,12 @@ static int hns_roce_buddy_init(struct
> > > > hns_roce_buddy *buddy, int max_order)
> > > > >
> > > > > for (i = 0; i <= buddy->max_order; ++i) {
> > > > > s = BITS_TO_LONGS(1 << (buddy->max_order - i));
> > > > > - buddy->bits[i] = kmalloc_array(s, sizeof(long),
> > > > GFP_KERNEL);
> > > > > - if (!buddy->bits[i])
> > > > > - goto err_out_free;
> > > > > -
> > > > > - bitmap_zero(buddy->bits[i], 1 << (buddy->max_order -
> > i));
> > > > > + buddy->bits[i] = kcalloc(s, sizeof(long),
> > GFP_KERNEL);
> > > > > + if (!buddy->bits[i]) {
> > > > > + buddy->bits[i] = vzalloc(s * sizeof(long));
> > > >
> > > > I wonder, why don't you use directly vzalloc instead of kcalloc
> > > > fallback?
> > > As we know we will have physical contiguous pages if the kcalloc
> > > call succeeds. This will give us a chance to have better performance
> > > over the allocations which are just virtually contiguous through the
> > > function vzalloc(). Therefore, later has only been used as a fallback
> > > when our memory request cannot be entertained through kcalloc.
> > >
> > > Are you suggesting that there will not be much performance penalty
> > > if we use just vzalloc ?
> >
> > Not exactly,
> > I asked it, because we have similar code in our drivers and this
> > construction looks strange to me.
> >
> > 1. If performance is critical, we will use kmalloc.
> > 2. If performance is not critical, we will use vmalloc.
> >
> > But in this case, such construction shows me that we can live with
> > vmalloc performance and kmalloc allocation are not really needed.
> >
> > In your specific case, I'm not sure that kcalloc will ever fail.
> Performance is definitely critical here. Though, I agree this is bit
> unusual way of memory allocation. In actual, we were encountering
> memory alloc failures using kmalloc (if you see allocation amount
> is on the higher side and is exponential) so we ended up using
> vmalloc as fall back - It is very naïve allocation scheme.
I understand it, we did the same, see our mlx5_vzalloc call.
BTW, we used __GFP_NOWARN flag, which you should consider to use
in your case too.
>
> Maybe we need to rethink this allocation scheme part? Also, I can pull
> back this particular patch for now or just live with vzalloc() till
> we figure out proper solution to this?
It is up to you, I don't think that you should drop it, AFAIK, there is
no other proper solution.
>
> >
> > Thanks
> >
> >
> > >
> > > >
> > > > > + if (!buddy->bits[i])
> > > > > + goto err_out_free;
> > > > > + }
> > > > > }
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
next prev parent reply other threads:[~2016-11-21 17:14 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-04 16:36 [PATCH for-next 00/11] Code improvements & fixes for HNS RoCE driver Salil Mehta
2016-11-04 16:36 ` Salil Mehta
2016-11-04 16:36 ` [PATCH for-next 01/11] IB/hns: Add the interface for querying QP1 Salil Mehta
2016-11-04 16:36 ` Salil Mehta
[not found] ` <20161104163633.141880-2-salil.mehta-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2016-11-07 5:45 ` Anurup M
2016-11-07 5:45 ` Anurup M
2016-11-07 5:45 ` Anurup M
2016-11-07 11:45 ` Salil Mehta
2016-11-04 16:36 ` [PATCH for-next 02/11] IB/hns: Add code for refreshing CQ CI using TPTR Salil Mehta
2016-11-04 16:36 ` Salil Mehta
2016-11-04 16:36 ` [PATCH for-next 03/11] IB/hns: Optimize the logic of allocating memory using APIs Salil Mehta
2016-11-04 16:36 ` Salil Mehta
2016-11-09 7:21 ` Leon Romanovsky
2016-11-15 15:52 ` Salil Mehta
2016-11-16 8:36 ` Leon Romanovsky
2016-11-16 8:36 ` Leon Romanovsky
2016-11-21 16:12 ` Salil Mehta
2016-11-21 17:14 ` Leon Romanovsky [this message]
[not found] ` <20161121171423.GA23083-2ukJVAZIZ/Y@public.gmane.org>
2016-11-21 20:20 ` Salil Mehta
2016-11-21 20:20 ` Salil Mehta
2016-11-04 16:36 ` [PATCH for-next 04/11] IB/hns: add self loopback for CM Salil Mehta
2016-11-04 16:36 ` Salil Mehta
2016-11-04 16:36 ` [PATCH for-next 05/11] IB/hns: Modify the condition of notifying hardware loopback Salil Mehta
2016-11-04 16:36 ` Salil Mehta
2016-11-04 16:36 ` [PATCH for-next 06/11] IB/hns: Fix the bug for qp state in hns_roce_v1_m_qp() Salil Mehta
2016-11-04 16:36 ` Salil Mehta
[not found] ` <20161104163633.141880-1-salil.mehta-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2016-11-04 16:36 ` [PATCH for-next 07/11] IB/hns: Modify the macro for the timeout when cmd process Salil Mehta
2016-11-04 16:36 ` Salil Mehta
2016-11-04 16:36 ` Salil Mehta
2016-11-04 16:36 ` [PATCH for-next 09/11] IB/hns: Change qpn allocation to round-robin mode Salil Mehta
2016-11-04 16:36 ` Salil Mehta
2016-11-04 16:36 ` Salil Mehta
2016-11-09 7:24 ` Leon Romanovsky
2016-11-04 16:36 ` [PATCH for-next 11/11] IB/hns: Fix for Checkpatch.pl comment style errors Salil Mehta
2016-11-04 16:36 ` Salil Mehta
2016-11-04 16:36 ` Salil Mehta
2016-11-04 16:36 ` [PATCH for-next 08/11] IB/hns: Modify query info named port_num when querying RC QP Salil Mehta
2016-11-04 16:36 ` Salil Mehta
2016-11-04 16:36 ` [PATCH for-next 10/11] IB/hns: Implement the add_gid/del_gid and optimize the GIDs management Salil Mehta
2016-11-04 16:36 ` Salil Mehta
2016-11-07 8:17 ` Anurup M
2016-11-07 8:17 ` Anurup M
[not found] ` <58203884.6040808-hv44wF8Li93QT0dZR+AlfA@public.gmane.org>
2016-11-07 10:04 ` Shaobo Xu
2016-11-07 10:04 ` Shaobo Xu
2016-11-07 10:04 ` Shaobo Xu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20161121171423.GA23083@leon.nu \
--to=leon@kernel.org \
--cc=dledford@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rdma@vger.kernel.org \
--cc=linuxarm@huawei.com \
--cc=mehta.salil.lnk@gmail.com \
--cc=netdev@vger.kernel.org \
--cc=oulijun@huawei.com \
--cc=salil.mehta@huawei.com \
--cc=xavier.huwei@huawei.com \
--cc=zhangping5@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.