[ofa-general] Re: Low NFS RDMA performance with Connect X
Michael S. Tsirkin
mst at dev.mellanox.co.il
Wed Sep 5 19:52:44 PDT 2007
> Quoting James Lentini <jlentini at netapp.com>:
> Subject: RE: Low NFS RDMA performance with Connect X
>
>
>
> On Wed, 5 Sep 2007, Kuchimanchi, Ramachandra wrote:
>
> > John Leidel <john.leidel at gmail.com> wrote:
> >
> > > In doing some testing with ConnectX, I noticed a similar issue in MPI
> > > performance. The fix was simply to upgrade to the latetest and greatest
> > > firmware.
> >
> > I tried with the latest ConnectX Firmware, version 2.2, and the Iozone
> > numbers are almost similar to what I posted previously and very low as
> > compared to the MT25208 numbers.
> >
> > NFS RDMA folks, any ideas as to why this is happening with Connect X ?
>
> We are bringing up our Connect X systems now (we're waiting on a
> replacement memory dimm for our server). We'll be experimenting with
> the performance on Connect X over the next few weeks.
>
> Both the client and server code bases have been updated substantially
> since the Mellanox SDK was released. Results are likely to be
> different on the newer code.
>
> Finally, it is conceivable that there will need to be performance
> tweeks for the Connect X hardware. For Tavor hardware, ULPs use a 1KB
> MTU to achieve maximum performance (see the setup of the path_mtu QP
> attribute in net/sunrpc/xprtrdma/verbs.c).
One thing worth a try is interrupt coalescing.
The simplest way to check is probably to apply the following patch
and see if it helps. You can also try tweaking cq_max_count and
cq_period module parameters.
--->
From: Michael S. Tsirkin <mst at dev.mellanox.co.il>
Subject: [PATCH] IB/mlx4: enable interrupt coalescing
Enable interrupt coalescing for CQs in mlx4
Signed-off-by: Michael S. Tsirkin <mst at dev.mellanox.co.il>
---
diff --git a/drivers/net/mlx4/cq.c b/drivers/net/mlx4/cq.c
index 39253d0..b58dd75 100644
--- a/drivers/net/mlx4/cq.c
+++ b/drivers/net/mlx4/cq.c
@@ -42,6 +42,14 @@
#include "mlx4.h"
#include "icm.h"
+static int cq_max_count = 16;
+static int cq_period = 10;
+
+module_param(cq_max_count, int, 0444);
+MODULE_PARM_DESC(cq_max_count, "number of CQEs to generate event");
+module_param(cq_period, int, 0444);
+MODULE_PARM_DESC(cq_period, "time in usec for CQ event generation");
+
struct mlx4_cq_context {
__be32 flags;
u16 reserved1[3];
@@ -174,6 +182,8 @@ int mlx4_cq_alloc(struct mlx4_dev *dev, int nent, struct mlx4_mtt *mtt,
cq_context->mtt_base_addr_h = mtt_addr >> 32;
cq_context->mtt_base_addr_l = cpu_to_be32(mtt_addr & 0xffffffff);
cq_context->db_rec_addr = cpu_to_be64(db_rec);
+ cq_context->cq_max_count = cq_max_count;
+ cq_context->cq_period = cq_period;
err = mlx4_SW2HW_CQ(dev, mailbox, cq->cqn);
mlx4_free_cmd_mailbox(dev, mailbox);
--
MST
More information about the general
mailing list