Linux RDMA and InfiniBand development
 help / color / mirror / Atom feed
From: Leon Romanovsky <leon@kernel.org>
To: Yamin Friedman <yaminf@mellanox.com>
Cc: Jason Gunthorpe <jgg@mellanox.com>,
	Sagi Grimberg <sagi@grimberg.me>, Christoph Hellwig <hch@lst.de>,
	linux-rdma@vger.kernel.org
Subject: Re: [PATCH 2/4] RDMA/core: Introduce shared CQ pool API
Date: Tue, 12 May 2020 11:08:31 +0300	[thread overview]
Message-ID: <20200512080831.GH4814@unreal> (raw)
In-Reply-To: <eada151f-b763-f300-fb60-8b38c9a7be2d@mellanox.com>

On Tue, May 12, 2020 at 10:00:59AM +0300, Yamin Friedman wrote:
>
> On 5/11/2020 3:08 PM, Yamin Friedman wrote:
> >
> > On 5/11/2020 8:07 AM, Leon Romanovsky wrote:
> > > On Sun, May 10, 2020 at 05:55:55PM +0300, Yamin Friedman wrote:
> > > > Allow a ULP to ask the core to provide a completion queue based on a
> > > > least-used search on a per-device CQ pools. The device CQ pools
> > > > grow in a
> > > > lazy fashion when more CQs are requested.
> > > >
> > > > This feature reduces the amount of interrupts when using many QPs.
> > > > Using shared CQs allows for more effcient completion handling. It also
> > > > reduces the amount of overhead needed for CQ contexts.
> > > >
> > > > Test setup:
> > > > Intel(R) Xeon(R) Platinum 8176M CPU @ 2.10GHz servers.
> > > > Running NVMeoF 4KB read IOs over ConnectX-5EX across Spectrum switch.
> > > > TX-depth = 32. Number of cores refers to the initiator side.
> > > > Four disks are
> > > > accessed from each core. In the current case we have four CQs
> > > > per core and
> > > > in the shared case we have a single CQ per core. Until 14 cores
> > > > there is no
> > > > significant change in performance and the number of interrupts
> > > > per second
> > > > is less than a million in the current case.
> > > > ==================================================
> > > > |Cores|Current KIOPs  |Shared KIOPs  |improvement|
> > > > |-----|---------------|--------------|-----------|
> > > > |14   |2188           |2620          |19.7%      |
> > > > |-----|---------------|--------------|-----------|
> > > > |20   |2063           |2308          |11.8%      |
> > > > |-----|---------------|--------------|-----------|
> > > > |28   |1933           |2235          |15.6%      |
> > > > |=================================================
> > > > |Cores|Current avg lat|Shared avg lat|improvement|
> > > > |-----|---------------|--------------|-----------|
> > > > |14   |817us          |683us         |16.4%      |
> > > > |-----|---------------|--------------|-----------|
> > > > |20   |1239us         |1108us        |10.6%      |
> > > > |-----|---------------|--------------|-----------|
> > > > |28   |1852us         |1601us        |13.5%      |
> > > > ========================================================
> > > > |Cores|Current interrupts|Shared interrupts|improvement|
> > > > |-----|------------------|-----------------|-----------|
> > > > |14   |2131K/sec         |425K/sec         |80%        |
> > > > |-----|------------------|-----------------|-----------|
> > > > |20   |2267K/sec         |594K/sec         |73.8%      |
> > > > |-----|------------------|-----------------|-----------|
> > > > |28   |2370K/sec         |1057K/sec        |55.3%      |
> > > > ====================================================================
> > > > |Cores|Current 99.99th PCTL lat|Shared 99.99th PCTL lat|improvement|
> > > > |-----|------------------------|-----------------------|-----------|
> > > > |14   |85Kus                   |9Kus |88%        |
> > > > |-----|------------------------|-----------------------|-----------|
> > > > |20   |6Kus                    |5.3Kus |14.6%      |
> > > > |-----|------------------------|-----------------------|-----------|
> > > > |28   |11.6Kus                 |9.5Kus |18%        |
> > > > |===================================================================
> > > >
> > > > Performance improvement with 16 disks (16 CQs per core) is comparable.
> > > >
> > > > Signed-off-by: Yamin Friedman <yaminf@mellanox.com>
> > > > Reviewed-by: Or Gerlitz <ogerlitz@mellanox.com>
> > > > ---
> > > >   drivers/infiniband/core/core_priv.h |   8 ++
> > > >   drivers/infiniband/core/cq.c        | 145
> > > > ++++++++++++++++++++++++++++++++++++
> > > >   drivers/infiniband/core/device.c    |   3 +-
> > > >   include/rdma/ib_verbs.h             |  32 ++++++++
> > > >   4 files changed, 187 insertions(+), 1 deletion(-)
> > > >
> > > > diff --git a/drivers/infiniband/core/core_priv.h
> > > > b/drivers/infiniband/core/core_priv.h
> > > > index cf42acc..7fe9c13 100644
> > > > --- a/drivers/infiniband/core/core_priv.h
> > > > +++ b/drivers/infiniband/core/core_priv.h
> > > > @@ -191,6 +191,14 @@ static inline bool
> > > > rdma_is_upper_dev_rcu(struct net_device *dev,
> > > >       return netdev_has_upper_dev_all_rcu(dev, upper);
> > > >   }
> > > >
> > > > +struct ib_cq *ib_cq_pool_get(struct ib_device *dev, unsigned
> > > > int nr_cqe,
> > > > +                 int cpu_hint, enum ib_poll_context poll_ctx);
> > > > +void ib_cq_pool_put(struct ib_cq *cq, unsigned int nr_cqe);
> > > > +
> > > > +void ib_init_cq_pools(struct ib_device *dev);
> > > > +
> > > > +void ib_purge_cq_pools(struct ib_device *dev);
> > > I don't know how next patches compile to you, but "core_priv.h" is wrong
> > > place to put function declarations. You also put them here and in
> > > ib_verbs.h
> > > below.
> > >
> > > Also, it will be nice if you will use same naming convention like in
> > > mr_pool.h
> > I will remove the use of core_priv and look into refactoring the names.
> Init_cq_pools and purge_cq_pools are not exported functions they are for
> internal core use, is ib_verbs really the place for them?

I don't know, probably better to group them together because you
will need to put ib_cq_pool_put/ib_cq_pool_get in the ib_verbs.h anyway.

Thanks

  reply	other threads:[~2020-05-12  8:08 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-10 14:55 [PATCH 0/4] Introducing RDMA shared CQ pool Yamin Friedman
2020-05-10 14:55 ` [PATCH 1/4] infiniband/core: Add protection for shared CQs used by ULPs Yamin Friedman
2020-05-11  4:37   ` Leon Romanovsky
2020-05-11  8:39     ` Sagi Grimberg
2020-05-11 11:52       ` Yamin Friedman
2020-05-11 11:59     ` Yamin Friedman
2020-05-11 16:45       ` Leon Romanovsky
2020-05-10 14:55 ` [PATCH 2/4] RDMA/core: Introduce shared CQ pool API Yamin Friedman
2020-05-11  5:07   ` Leon Romanovsky
2020-05-11 12:08     ` Yamin Friedman
2020-05-11 16:39       ` Leon Romanovsky
2020-05-12  7:00       ` Yamin Friedman
2020-05-12  8:08         ` Leon Romanovsky [this message]
2020-05-11  8:49   ` Sagi Grimberg
2020-05-11 12:03     ` Yamin Friedman
2020-05-12  6:55       ` Sagi Grimberg
2020-05-12  8:40         ` Yamin Friedman
2020-05-12  3:08   ` [RDMA/core] 7b491b3fb2: BUG:kernel_hang_in_test_stage kernel test robot
2020-05-10 14:55 ` [PATCH 3/4] nvme-rdma: use new shared CQ mechanism Yamin Friedman
2020-05-11  8:50   ` Sagi Grimberg
2020-05-11 16:29   ` Max Gurtovoy
2020-05-10 14:55 ` [PATCH 4/4] nvmet-rdma: " Yamin Friedman
2020-05-11  8:50   ` Sagi Grimberg
2020-05-10 15:04 ` [PATCH 0/4] Introducing RDMA shared CQ pool Gal Pressman
2020-05-10 15:17   ` Yamin Friedman
2020-05-11  8:34 ` Sagi Grimberg
2020-05-11 12:24   ` Yamin Friedman

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=20200512080831.GH4814@unreal \
    --to=leon@kernel.org \
    --cc=hch@lst.de \
    --cc=jgg@mellanox.com \
    --cc=linux-rdma@vger.kernel.org \
    --cc=sagi@grimberg.me \
    --cc=yaminf@mellanox.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox