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
next prev parent reply other threads:[~2020-05-12 8:08 UTC|newest]
Thread overview: 28+ 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-12 3:08 ` 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 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.