netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Eliezer Tamir <eliezer.tamir@linux.intel.com>
To: David Miller <davem@davemloft.net>
Cc: Willem de Bruijn <willemb@google.com>,
	Or Gerlitz <or.gerlitz@gmail.com>,
	e1000-devel@lists.sourceforge.net, netdev@vger.kernel.org,
	HPA <hpa@zytor.com>, Amir Vadai <amirv@mellanox.com>,
	linux-kernel@vger.kernel.org,
	Eliezer Tamir <eliezer@tamir.org.il>,
	Jesse Brandeburg <jesse.brandeburg@intel.com>,
	Andi Kleen <andi@firstfloor.org>,
	Ben Hutchings <bhutchings@solarflare.com>,
	Eric Dumazet <erdnetdev@gmail.com>,
	Eilon Greenstien <eilong@broadcom.com>
Subject: [PATCH] sockperf: add SO_LL socketop support
Date: Tue, 11 Jun 2013 17:26:29 +0300	[thread overview]
Message-ID: <51B73395.7070706@linux.intel.com> (raw)
In-Reply-To: <20130611142415.17879.75569.stgit@ladj378.jer.intel.com>

Add lls socket option support to sockperf.
Right now we always get the option before set to show the option is 
working properly. We should probably remove that in an official release.
use --lls (value in usecs) to override global setting.
---

  src/Defs.h       |    3 +++
  src/SockPerf.cpp |   54 
+++++++++++++++++++++++++++++++++++++++++++++++++++++-
  2 files changed, 56 insertions(+), 1 deletions(-)

diff --git a/src/Defs.h b/src/Defs.h
index e38e3a4..87b45a0 100644
--- a/src/Defs.h
+++ b/src/Defs.h
@@ -161,6 +161,7 @@ enum {
      OPT_OUTPUT_PRECISION,           //35
      OPT_CLIENTPORT,                 //36
      OPT_CLIENTIP,                   //37
+    OPT_LLS,            //38
  };

  #define MODULE_NAME            "sockperf"
@@ -527,6 +528,8 @@ struct user_params_t {
  //    bool stream_mode; - use b_stream instead
      int mthread_server;
      struct timeval* select_timeout;
+    unsigned long lls_usecs;
+    bool lls_is_set;
      int sock_buff_size;
      int threads_num;
      char threads_affinity[MAX_ARGV_SIZE];
diff --git a/src/SockPerf.cpp b/src/SockPerf.cpp
index 41daf95..d76320f 100644
--- a/src/SockPerf.cpp
+++ b/src/SockPerf.cpp
@@ -207,6 +207,10 @@ static const AOPT_DESC  common_opt_desc[] =
          "Limit the lifetime of the message (default 2)."
      },
      {
+        OPT_LLS, AOPT_ARG, aopt_set_literal( 0 ), aopt_set_string( "lls" ),
+        "Turn on LLS via socket option (value = us to poll)."
+    },
+    {
          OPT_BUFFER_SIZE, AOPT_ARG, aopt_set_literal( 0 ), 
aopt_set_string( "buffer-size" ),
          "Set total socket receive/send buffer <size> in bytes (system 
defined by default)."
      },
@@ -292,7 +296,7 @@ static int proc_mode_help( int id, int argc, const 
char **argv )
      int   i = 0;

      printf(MODULE_NAME " is a tool for testing network latency and 
throughput.\n");
-    printf("version %s\n", STR(VERSION));
+    printf("version %s-lls\n", STR(VERSION));
      printf("\n");
      printf("Usage: " MODULE_NAME " <subcommand> [options] [args]\n");
      printf("Type: \'" MODULE_NAME " <subcommand> --help\' for help on 
a specific subcommand.\n");
@@ -1789,6 +1793,26 @@ static int parse_common_opt( const AOPT_OBJECT 
*common_obj )
              s_user_params.is_nonblocked_send = true;
          }

+        if ( !rc && aopt_check(common_obj, OPT_LLS) ) {
+            const char* optarg = aopt_value(common_obj, OPT_LLS);
+            if (optarg) {
+                errno = 0;
+                int value = strtoul(optarg, NULL, 0);
+                if (errno != 0 || value < 0) {
+                    log_msg("'-%d' Invalid LLS value: %s", OPT_LLS, 
optarg);
+                    rc = SOCKPERF_ERR_BAD_ARGUMENT;
+                }
+                else {
+                    s_user_params.lls_usecs = value;
+                    s_user_params.lls_is_set = true;
+                }
+            }
+            else {
+                log_msg("'-%d' Invalid value", OPT_LLS);
+                rc = SOCKPERF_ERR_BAD_ARGUMENT;
+            }
+        }
+
          if ( !rc && aopt_check(common_obj, OPT_RECV_LOOPING) ) {

              const char* optarg = aopt_value(common_obj, OPT_RECV_LOOPING);
@@ -2296,6 +2320,29 @@ int sock_set_reuseaddr(int fd)
      return rc;
  }

+#ifndef SO_LL
+#define SO_LL 46
+#endif
+int sock_set_lls(int fd)
+{
+    int rc = SOCKPERF_ERR_NONE;
+    unsigned long lls;
+    int size = sizeof(lls);
+
+    if(getsockopt(fd, SOL_SOCKET, SO_LL, &lls, (socklen_t *)&size) < 0){
+        log_err("getsockopt(SO_LL) failed");
+        return SOCKPERF_ERR_SOCKET;
+    } else
+        log_msg("socket option SO_LL default was %lu, changing to %lu", 
lls, s_user_params.lls_usecs);
+
+    if (setsockopt(fd, SOL_SOCKET, SO_LL, &(s_user_params.lls_usecs), 
sizeof(s_user_params.lls_usecs)) < 0) {
+        log_err("setsockopt(SO_LL) failed");
+        rc = SOCKPERF_ERR_SOCKET;
+    }
+    return rc;
+}
+
+
  int sock_set_snd_rcv_bufs(int fd)
  {
      /*
@@ -2460,6 +2507,11 @@ int prepare_socket(int fd, struct fds_data *p_data)
      }

      if (!rc &&
+            (s_user_params.lls_is_set == true))
+    {
+        rc = sock_set_lls(fd);
+    }
+    if (!rc &&
              (s_user_params.sock_buff_size > 0))
      {
          rc = sock_set_snd_rcv_bufs(fd);






------------------------------------------------------------------------------
This SF.net email is sponsored by Windows:

Build for Windows Store.

http://p.sf.net/sfu/windows-dev2dev
_______________________________________________
E1000-devel mailing list
E1000-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/e1000-devel
To learn more about Intel&#174; Ethernet, visit http://communities.intel.com/community/wired

  parent reply	other threads:[~2013-06-11 14:26 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-11 14:24 [PATCH net-next 0/2] net: low latency sockets follow ups Eliezer Tamir
2013-06-11 14:24 ` [PATCH net-next 1/2] net: remove NET_LL_RX_POLL config menue Eliezer Tamir
2013-06-12 22:12   ` David Miller
2013-06-13  2:01     ` Stephen Hemminger
2013-06-13  2:13       ` Eliezer Tamir
2013-06-13  8:00         ` Daniel Borkmann
2013-06-13 10:09           ` Eliezer Tamir
2013-06-11 14:24 ` [PATCH net-next 2/2] net:add socket option for low latency polling Eliezer Tamir
2013-06-11 14:45   ` Eric Dumazet
2013-06-11 15:37     ` Eliezer Tamir
2013-06-11 15:58       ` Eric Dumazet
2013-06-11 20:24   ` Ben Hutchings
2013-06-12  6:39     ` Eliezer Tamir
2013-06-11 14:26 ` Eliezer Tamir [this message]
2013-06-12  8:36   ` [PATCH] sockperf: add SO_LL socketop support Amir Vadai
2013-06-12  8:45     ` Eliezer Tamir
  -- strict thread matches above, loose matches on Subject: below --
2013-06-13 14:46 [PATCH v3 net-next 0/4] net: low latency sockets follow ups Eliezer Tamir
2013-06-13 14:49 ` [PATCH] sockperf: add SO_LL socketop support Eliezer Tamir
2013-06-13 15:03   ` Eliezer Tamir

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=51B73395.7070706@linux.intel.com \
    --to=eliezer.tamir@linux.intel.com \
    --cc=amirv@mellanox.com \
    --cc=andi@firstfloor.org \
    --cc=bhutchings@solarflare.com \
    --cc=davem@davemloft.net \
    --cc=e1000-devel@lists.sourceforge.net \
    --cc=eilong@broadcom.com \
    --cc=eliezer@tamir.org.il \
    --cc=erdnetdev@gmail.com \
    --cc=hpa@zytor.com \
    --cc=jesse.brandeburg@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=or.gerlitz@gmail.com \
    --cc=willemb@google.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;
as well as URLs for NNTP newsgroup(s).