[ofa-general] [PATCH] qperf: adding SL option for RDMA tests

Yevgeny Kliteynik kliteyn at dev.mellanox.co.il
Wed Jan 30 06:22:20 PST 2008


Hi Johann,

I'd like to add to qperf a command line parameter to for
changing the SL of the QP/AH (for RDMA tests).
This is being used mainly in order to check the QoS feature
and performance on different VLs.

I'm not sure I figured out the option thing in qperf right,
but in any case, the following patch does the job for me.

Please review and let me know what you think.

-- Yevgeny

Signed-off-by:  Yevgeny Kliteynik <kliteyn at dev.mellanox.co.il>
---
 src/help.txt |    4 ++++
 src/qperf.c  |   11 ++++++++++-
 src/qperf.h  |    3 +++
 src/rdma.c   |    6 ++++--
 4 files changed, 21 insertions(+), 3 deletions(-)

diff --git a/src/help.txt b/src/help.txt
index 59195cb..ec00356 100644
--- a/src/help.txt
+++ b/src/help.txt
@@ -77,6 +77,7 @@ Opts
     --timeout Time (-T)                 Set timeout
       --loc_timeout Time (-lT)          Set local timeout
       --rem_timeout Time (-rT)          Set remote timeout
+    --service_level SL (-sl)            Set Service Level to SL for RDMA tests
     --unify_nodes (-un)                 Unify nodes
     --unify_units (-uu)                 Unify units
     --use_bits_per_sec (-ub)            Use bits/sec rather than bytes/sec
@@ -184,6 +185,9 @@ Options
           Set local timeout to Time.
       --rem_timeout Time (-rT)
           Set local timeout to Time.
+    --service_level SL (-sl)
+          Set Service Level to SL.  This is the SL used for RDMA tests only.
+          The default SL is 0.
     --unify_nodes (-un)
           Unify the nodes.  Describe them in terms of local and remote rather
           than send and receive.
diff --git a/src/qperf.c b/src/qperf.c
index fd4c24f..06ff2d5 100644
--- a/src/qperf.c
+++ b/src/qperf.c
@@ -280,6 +280,7 @@ PAR_NAME ParName[] ={
     { "sock_buf_size",  L_SOCK_BUF_SIZE,  R_SOCK_BUF_SIZE },
     { "time",           L_TIME,           R_TIME          },
     { "timeout",        L_TIMEOUT,        R_TIMEOUT       },
+    { "service_level",  L_SL,             R_SL            },
 };


@@ -317,6 +318,8 @@ PAR_INFO ParInfo[P_N] ={
     { R_TIME,           't',  &RReq.time            },
     { L_TIMEOUT,        't',  &Req.timeout          },
     { R_TIMEOUT,        't',  &RReq.timeout         },
+    { L_SL,             'q',  &Req.sl               },
+    { R_SL,             'q',  &RReq.sl              },
 };


@@ -392,6 +395,8 @@ OPTION Options[] ={
     {   "-rT",                0, &opt_time, R_TIMEOUT                        },
     { "--server_timeout",     0, &opt_misc, 's', 't'                         },
     {   "-st",                0, &opt_misc, 's', 't'                         },
+    { "--service_level",      0, &opt_long, L_SL,            R_SL            },
+    {   "-sl",                0, &opt_long, L_SL,            R_SL            },
     { "--unify_nodes",        0, &opt_misc, 'u', 'n'                         },
     {   "-un",                0, &opt_misc, 'u', 'n'                         },
     { "--unify_units",        0, &opt_misc, 'u', 'u'                         },
@@ -1217,6 +1222,8 @@ client(TEST *test)
     par_use(R_AFFINITY);
     par_use(L_TIME);
     par_use(R_TIME);
+    par_use(L_SL);
+    par_use(R_SL);

     set_affinity();
     RReq.ver_maj = VER_MAJ;
@@ -1848,7 +1855,7 @@ show_rest(void)
         uint64_t lr = LStat.r.no_bytes;
         uint64_t rs = RStat.s.no_bytes;
         uint64_t rr = RStat.r.no_bytes;
-
+
         if (ls && !rs && rr && !lr) {
             srmode = 1;
             resnS = &Res.l;
@@ -2385,6 +2392,7 @@ enc_req(REQ *host)
     enc_int(host->no_msgs,       sizeof(host->no_msgs));
     enc_int(host->sock_buf_size, sizeof(host->sock_buf_size));
     enc_int(host->time,          sizeof(host->time));
+    enc_int(host->sl,            sizeof(host->sl));
     enc_str(host->id,            sizeof(host->id));
 }

@@ -2411,6 +2419,7 @@ dec_req(REQ *host)
     host->no_msgs       = dec_int(sizeof(host->no_msgs));
     host->sock_buf_size = dec_int(sizeof(host->sock_buf_size));
     host->time          = dec_int(sizeof(host->time));
+    host->sl            = dec_int(sizeof(host->sl));
     dec_str(host->id, sizeof(host->id));
 }

diff --git a/src/qperf.h b/src/qperf.h
index 0c42361..2539f61 100644
--- a/src/qperf.h
+++ b/src/qperf.h
@@ -119,6 +119,8 @@ typedef enum {
     R_TIME,
     L_TIMEOUT,
     R_TIMEOUT,
+    L_SL,
+    R_SL,
     P_N
 } PAR_INDEX;

@@ -156,6 +158,7 @@ typedef struct REQ {
     uint32_t    no_msgs;                /* Number of messages */
     uint32_t    sock_buf_size;          /* Socket buffer size */
     uint32_t    time;                   /* Duration in seconds */
+    uint8_t     sl;                     /* Service Level */
     char        id[STRSIZE];            /* Identifier */
     char        rate[STRSIZE];          /* Rate */
 } REQ;
diff --git a/src/rdma.c b/src/rdma.c
index b0cd067..5208d4d 100644
--- a/src/rdma.c
+++ b/src/rdma.c
@@ -1596,7 +1596,8 @@ ib_prepare(IBDEV *ibdev)
         .ah_attr            = {
             .dlid           = ibdev->rcon.lid,
             .port_num       = ibdev->port,
-            .static_rate    = ibdev->rate
+            .static_rate    = ibdev->rate,
+            .sl             = Req.sl
         }
     };
     struct ibv_qp_attr rts_attr ={
@@ -1610,7 +1611,8 @@ ib_prepare(IBDEV *ibdev)
     struct ibv_ah_attr ah_attr ={
         .dlid           = ibdev->rcon.lid,
         .port_num       = ibdev->port,
-        .static_rate    = ibdev->rate
+        .static_rate    = ibdev->rate,
+        .sl             = Req.sl
     };

     if (ibdev->trans == IBV_QPT_UD) {
-- 
1.5.1.4




More information about the general mailing list