From patchwork Mon Jan 8 18:05:07 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Fastabend X-Patchwork-Id: 857004 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="XhdT4hn8"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zFjqW50rfz9s82 for ; Tue, 9 Jan 2018 05:05:27 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755013AbeAHSFY (ORCPT ); Mon, 8 Jan 2018 13:05:24 -0500 Received: from mail-pf0-f196.google.com ([209.85.192.196]:38983 "EHLO mail-pf0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754535AbeAHSFT (ORCPT ); Mon, 8 Jan 2018 13:05:19 -0500 Received: by mail-pf0-f196.google.com with SMTP id e11so2784822pff.6 for ; Mon, 08 Jan 2018 10:05:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:from:to:cc:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=OsSlJuWigH9fxTbHBoeUpoKKOVkxt+FfRmy3WsB+Lq4=; b=XhdT4hn8Yb5njYiZw7U7JqsGLS6G+s41RBcJvpuxCGyIgLekpdr8l74F4+bwCzTXPz vZ96n4sv7KkE2xJqOL4z7SXqFjNDteYiaaaxnDe6Dbww+qRKf1z+i5zl7zH+gZU+NdX4 RbP+z+nalhYcpJXK6TU9oBygzTHtuS5tiBIkzxINAEhShxmWYMNqduytZ7FAohi/3/h4 +3JdHEPt9OVQcM61DZiILSUEyjVsEJZdYaY3d9GAdfZu5cjMxVMwSIx3eN2r4P1TXufa Gn1ye8ipcex8/SRM65WRyHPt+vuCMNhSZ58zD2zJ4sVrxwoI2Jhd1xT/DVRz1uAB5xWp uCCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:date:message-id:in-reply-to :references:user-agent:mime-version:content-transfer-encoding; bh=OsSlJuWigH9fxTbHBoeUpoKKOVkxt+FfRmy3WsB+Lq4=; b=J1KVO5cS1USyeH/32xEkyiNK3l1RJReCflgAIRNosWXXjZAlJuNdW1JDb+uIkQY/Um vKVLAmbrGQLJtEoBCo9+ySotACcYeeX1tWnmHoe8+9PG9UFqY3tdY1vUyKxUhEcS6tSO Rz+JDJ2oN513Nuu5X7r5ZHPe3Xz5V6GIrsB1qUhl3rCxv/BW28sKPqPheuzHpMYenu9q dtRsKhJXOEOKWdu+n6WHrlO0AayiJDtdDa4mS4rhJbbAks4fGwYH+HCMXKB3XNvmtCTm z69ELmC2XYZuim2qd+ziyeP9jJlOeGeI09lTQxbQlu/BJm9y7yCJ/jO1OV0G3YgmYCqc lWkw== X-Gm-Message-State: AKGB3mInH3xwotGONBsd57FqBNFlgOLylfOYwCvk0Po70vTEWpEws3p/ hr4/8iN0jVydM/ACUVuN0znmAA== X-Google-Smtp-Source: ACJfBos4+euRMa+cW0WtvAEByWEA/qtHIzmyBFW7QW3p9q+jY9NDzkAZ7Zf8/Ayr1ismqAdDHGNqWA== X-Received: by 10.99.125.16 with SMTP id y16mr9996893pgc.1.1515434718691; Mon, 08 Jan 2018 10:05:18 -0800 (PST) Received: from [127.0.1.1] ([75.106.27.153]) by smtp.gmail.com with ESMTPSA id f79sm27709311pfd.45.2018.01.08.10.05.12 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 08 Jan 2018 10:05:17 -0800 (PST) Subject: [bpf-next PATCH 1/7] bpf: refactor sockmap sample program update for arg parsing From: John Fastabend To: john.fastabend@gmail.com, ast@kernel.org, daniel@iogearbox.net Cc: netdev@vger.kernel.org Date: Mon, 08 Jan 2018 10:05:07 -0800 Message-ID: <20180108180507.13647.62367.stgit@john-Precision-Tower-5810> In-Reply-To: <20180108180302.13647.13866.stgit@john-Precision-Tower-5810> References: <20180108180302.13647.13866.stgit@john-Precision-Tower-5810> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org sockmap sample program takes arguments from cmd line but it reads them in using offsets into the array. Because we want to add more arguments in the future lets do proper argument handling. Also refactor code to pull apart sock init and ping/pong test. This allows us to add new tests in the future. Signed-off-by: John Fastabend Acked-by: Jesper Dangaard Brouer --- samples/sockmap/sockmap_user.c | 142 +++++++++++++++++++++++++++++----------- 1 file changed, 103 insertions(+), 39 deletions(-) diff --git a/samples/sockmap/sockmap_user.c b/samples/sockmap/sockmap_user.c index 7cc9d22..5cbe7a5 100644 --- a/samples/sockmap/sockmap_user.c +++ b/samples/sockmap/sockmap_user.c @@ -35,6 +35,8 @@ #include #include +#include + #include "../bpf/bpf_load.h" #include "../bpf/bpf_util.h" #include "../bpf/libbpf.h" @@ -46,15 +48,39 @@ #define S1_PORT 10000 #define S2_PORT 10001 -static int sockmap_test_sockets(int rate, int dot) +/* global sockets */ +int s1, s2, c1, c2, p1, p2; + +static const struct option long_options[] = { + {"help", no_argument, NULL, 'h' }, + {"cgroup", required_argument, NULL, 'c' }, + {"rate", required_argument, NULL, 'r' }, + {"verbose", no_argument, NULL, 'v' }, + {0, 0, NULL, 0 } +}; + +static void usage(char *argv[]) +{ + int i; + + printf(" Usage: %s --cgroup \n", argv[0]); + printf(" options:\n"); + for (i = 0; long_options[i].name != 0; i++) { + printf(" --%-12s", long_options[i].name); + if (long_options[i].flag != NULL) + printf(" flag (internal value:%d)\n", + *long_options[i].flag); + else + printf(" -%c\n", long_options[i].val); + } + printf("\n"); +} + +static int sockmap_init_sockets(void) { - int i, sc, err, max_fd, one = 1; - int s1, s2, c1, c2, p1, p2; + int i, err, one = 1; struct sockaddr_in addr; - struct timeval timeout; - char buf[1024] = {0}; int *fds[4] = {&s1, &s2, &c1, &c2}; - fd_set w; s1 = s2 = p1 = p2 = c1 = c2 = 0; @@ -134,6 +160,8 @@ static int sockmap_test_sockets(int rate, int dot) if (err < 0 && errno != EINPROGRESS) { perror("connect c2 failed()\n"); goto out; + } else if (err < 0) { + err = 0; } /* Accept Connecrtions */ @@ -149,23 +177,32 @@ static int sockmap_test_sockets(int rate, int dot) goto out; } - max_fd = p2; - timeout.tv_sec = 10; - timeout.tv_usec = 0; - printf("connected sockets: c1 <-> p1, c2 <-> p2\n"); printf("cgroups binding: c1(%i) <-> s1(%i) - - - c2(%i) <-> s2(%i)\n", c1, s1, c2, s2); +out: + return err; +} + +static int forever_ping_pong(int rate, int verbose) +{ + struct timeval timeout; + char buf[1024] = {0}; + int sc; + + timeout.tv_sec = 10; + timeout.tv_usec = 0; /* Ping/Pong data from client to server */ sc = send(c1, buf, sizeof(buf), 0); if (sc < 0) { perror("send failed()\n"); - goto out; + return sc; } do { - int s, rc, i; + int s, rc, i, max_fd = p2; + fd_set w; /* FD sets */ FD_ZERO(&w); @@ -193,7 +230,7 @@ static int sockmap_test_sockets(int rate, int dot) if (rc < 0) { if (errno != EWOULDBLOCK) { perror("recv failed()\n"); - break; + return rc; } } @@ -205,35 +242,60 @@ static int sockmap_test_sockets(int rate, int dot) sc = send(i, buf, rc, 0); if (sc < 0) { perror("send failed()\n"); - break; + return sc; } } - sleep(rate); - if (dot) { + + if (rate) + sleep(rate); + + if (verbose) { printf("."); fflush(stdout); } } while (running); -out: - close(s1); - close(s2); - close(p1); - close(p2); - close(c1); - close(c2); - return err; + return 0; } int main(int argc, char **argv) { - int rate = 1, dot = 1; + int rate = 1, verbose = 0; + int opt, longindex, err, cg_fd = 0; char filename[256]; - int err, cg_fd; - char *cg_path; - cg_path = argv[argc - 1]; + while ((opt = getopt_long(argc, argv, "hvc:r:", + long_options, &longindex)) != -1) { + switch (opt) { + /* Cgroup configuration */ + case 'c': + cg_fd = open(optarg, O_DIRECTORY, O_RDONLY); + if (cg_fd < 0) { + fprintf(stderr, "ERROR: (%i) open cg path failed: %s\n", + cg_fd, optarg); + return cg_fd; + } + break; + case 'r': + rate = atoi(optarg); + break; + case 'v': + verbose = 1; + break; + case 'h': + default: + usage(argv); + return -1; + } + } + + if (!cg_fd) { + fprintf(stderr, "%s requires cgroup option: --cgroup \n", + argv[0]); + return -1; + } + snprintf(filename, sizeof(filename), "%s_kern.o", argv[0]); running = 1; @@ -247,14 +309,6 @@ int main(int argc, char **argv) return 1; } - /* Cgroup configuration */ - cg_fd = open(cg_path, O_DIRECTORY, O_RDONLY); - if (cg_fd < 0) { - fprintf(stderr, "ERROR: (%i) open cg path failed: %s\n", - cg_fd, cg_path); - return cg_fd; - } - /* Attach programs to sockmap */ err = bpf_prog_attach(prog_fd[0], map_fd[0], BPF_SK_SKB_STREAM_PARSER, 0); @@ -280,15 +334,25 @@ int main(int argc, char **argv) return err; } - err = sockmap_test_sockets(rate, dot); + err = sockmap_init_sockets(); if (err) { fprintf(stderr, "ERROR: test socket failed: %d\n", err); - return err; + goto out; } - return 0; + + err = forever_ping_pong(rate, verbose); +out: + close(s1); + close(s2); + close(p1); + close(p2); + close(c1); + close(c2); + return err; } void running_handler(int a) { running = 0; + printf("\n"); } From patchwork Mon Jan 8 18:05:24 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Fastabend X-Patchwork-Id: 857005 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="nKxe35Oj"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zFjqm30SGz9s7v for ; Tue, 9 Jan 2018 05:05:40 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755031AbeAHSFi (ORCPT ); Mon, 8 Jan 2018 13:05:38 -0500 Received: from mail-pg0-f67.google.com ([74.125.83.67]:37558 "EHLO mail-pg0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755024AbeAHSFg (ORCPT ); Mon, 8 Jan 2018 13:05:36 -0500 Received: by mail-pg0-f67.google.com with SMTP id z17so105437pgc.4 for ; Mon, 08 Jan 2018 10:05:35 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:from:to:cc:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=b6UZBZ6xtwxEo7ymb5U/As2oFiakhQQc+DsBMmrX8ok=; b=nKxe35OjE2HekXG1uKREkdnFofbvkrhVhSsxVZ0f6PPjpY+VEaLnYitzl5bk7T4goJ mICkJKxRQxZkSGYQH83KNyQT+zN/15Ks9oRKjpIfG7Wpt+IAmL22t8FXzZm6G2xNMxNJ ejTWYyJkDN3NDb97OlqBqlQ5oandJ4DN51wouLkpmW8pFRNYtGobJT49cC/LCs1KDF/9 6s49zJ4jc95IfezSXKhuelAWABLDqH9IzKA+53Z0du2tFqmG1IdN1JfKLILNv51vtIGy RQ8Qjqg/Od01M+NEtfCFocolzI7CSnItEfSoVAPjkSNv5eKGTNbGF6Rnk6aWwhkB1L3h tqPQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:date:message-id:in-reply-to :references:user-agent:mime-version:content-transfer-encoding; bh=b6UZBZ6xtwxEo7ymb5U/As2oFiakhQQc+DsBMmrX8ok=; b=NlnEujdf99Sm4xAvtcRt13GIwe0AibT4bKHTgSrrTTV82YzmoRv6HVwiEBbMC9hGHo hDLX7wDfmb5j9BNxe8TwbHjhDSxCTyOK4Tpf2Vi4lc+AeCEkBQFPrGPh8iIkYgMZzKHW FNf84Y9Bd4pg2fNIc9haMcBc4G1x0kRtInqsz0FAr40G//9Yykk4+Km4kk3kMklynqqD iVXjohP6EjHSBPwmMW+Ahq+8PgrTqPm+BFuUg9dvdcoefIpDr9HTW+TIhlyZ/5qfWBwz AdF9evn6WtglK39M05rhyUqKk8zmlf+Czxm48pSapwU7O8JUPMTiXaQ6+zfQd5+AohBm lkvQ== X-Gm-Message-State: AKGB3mJDeKZxK14V295twd6VJB+gcmoVUGUrhQ5p1eSIsFK7YvO30aq0 a6M/R05yRE5GVGHZjaJ/rr/4UQ== X-Google-Smtp-Source: ACJfBovY56M9DVckR3Bzoz+WJfloqpleeEJAVMEq0oDzI4eJsupqwIikVrAajwLBS2YRpq2b5U0+ig== X-Received: by 10.159.194.136 with SMTP id y8mr5232806pln.212.1515434735191; Mon, 08 Jan 2018 10:05:35 -0800 (PST) Received: from [127.0.1.1] ([75.106.27.153]) by smtp.gmail.com with ESMTPSA id y1sm23052285pgc.52.2018.01.08.10.05.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 08 Jan 2018 10:05:34 -0800 (PST) Subject: [bpf-next PATCH 2/7] bpf: add sendmsg option for testing BPF programs From: John Fastabend To: john.fastabend@gmail.com, ast@kernel.org, daniel@iogearbox.net Cc: netdev@vger.kernel.org Date: Mon, 08 Jan 2018 10:05:24 -0800 Message-ID: <20180108180524.13647.97521.stgit@john-Precision-Tower-5810> In-Reply-To: <20180108180302.13647.13866.stgit@john-Precision-Tower-5810> References: <20180108180302.13647.13866.stgit@john-Precision-Tower-5810> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org When testing BPF programs using sockmap I often want to have more control over how sendmsg is exercised. This becomes even more useful as new sockmap program types are added. This adds a test type option to select type of test to run. Currently, only "ping" and "sendmsg" are supported, but more can be added as needed. The new help argument gives the following, Usage: ./sockmap --cgroup options: --help -h --cgroup -c --rate -r --verbose -v --iov_count -i --length -l --test -t Signed-off-by: John Fastabend --- samples/sockmap/sockmap_user.c | 143 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 140 insertions(+), 3 deletions(-) diff --git a/samples/sockmap/sockmap_user.c b/samples/sockmap/sockmap_user.c index 5cbe7a5..2d51672 100644 --- a/samples/sockmap/sockmap_user.c +++ b/samples/sockmap/sockmap_user.c @@ -56,6 +56,9 @@ {"cgroup", required_argument, NULL, 'c' }, {"rate", required_argument, NULL, 'r' }, {"verbose", no_argument, NULL, 'v' }, + {"iov_count", required_argument, NULL, 'i' }, + {"length", required_argument, NULL, 'l' }, + {"test", required_argument, NULL, 't' }, {0, 0, NULL, 0 } }; @@ -184,6 +187,113 @@ static int sockmap_init_sockets(void) return err; } +struct msg_stats { + size_t bytes_sent; + size_t bytes_recvd; +}; + +static int msg_loop(int fd, int iov_count, int iov_length, int cnt, + struct msg_stats *s, bool tx) +{ + struct msghdr msg = {0}; + struct iovec *iov; + int i, flags = 0; + + iov = calloc(iov_count, sizeof(struct iovec)); + if (!iov) + return -ENOMEM; + + for (i = 0; i < iov_count; i++) { + char *d = calloc(iov_length, sizeof(char)); + + if (!d) { + fprintf(stderr, "iov_count %i/%i OOM\n", i, iov_count); + free(iov); + return -ENOMEM; + } + iov[i].iov_base = d; + iov[i].iov_len = iov_length; + } + + msg.msg_iov = iov; + msg.msg_iovlen = iov_count; + + if (tx) { + for (i = 0; i < cnt; i++) { + int sent = sendmsg(fd, &msg, flags); + + if (sent < 0) { + perror("send loop error:"); + return sent; + } + s->bytes_sent += sent; + } + } else { + int slct, recv, max_fd = fd; + struct timeval timeout; + float total_bytes; + fd_set w; + + total_bytes = (float)iov_count * (float)iov_length * (float)cnt; + while (s->bytes_recvd < total_bytes) { + timeout.tv_sec = 1; + timeout.tv_usec = 0; + + /* FD sets */ + FD_ZERO(&w); + FD_SET(fd, &w); + + slct = select(max_fd + 1, &w, NULL, NULL, &timeout); + if (slct == -1) { + perror("select()"); + return slct; + } else if (!slct) { + fprintf(stderr, "unexpected timeout\n"); + return slct; + } + + recv = recvmsg(fd, &msg, flags); + if (recv < 0) { + if (errno != EWOULDBLOCK) { + perror("recv failed()\n"); + return errno; + } + } + + s->bytes_recvd += recv; + } + } + + for (i = 0; i < iov_count; i++) + free(iov[i].iov_base); + free(iov); + return 0; +} + +static int sendmsg_test(int iov_count, int iov_buf, int cnt, int verbose) +{ + struct msg_stats s = {0}; + int err; + + err = msg_loop(c1, iov_count, iov_buf, cnt, &s, true); + if (err) { + fprintf(stderr, + "msg_loop_tx: iov_count %i iov_buf %i cnt %i err %i\n", + iov_count, iov_buf, cnt, err); + return err; + } + + msg_loop(p2, iov_count, iov_buf, cnt, &s, false); + if (err) + fprintf(stderr, + "msg_loop_rx: iov_count %i iov_buf %i cnt %i err %i\n", + iov_count, iov_buf, cnt, err); + + fprintf(stdout, "sendmsg: TX_bytes %zu RX_bytes %zu\n", + s.bytes_sent, s.bytes_recvd); + return err; +} + static int forever_ping_pong(int rate, int verbose) { struct timeval timeout; @@ -259,13 +369,19 @@ static int forever_ping_pong(int rate, int verbose) return 0; } +enum { + PING_PONG, + SENDMSG, +}; + int main(int argc, char **argv) { - int rate = 1, verbose = 0; + int iov_count = 1, length = 1024, rate = 1, verbose = 0; int opt, longindex, err, cg_fd = 0; + int test = PING_PONG; char filename[256]; - while ((opt = getopt_long(argc, argv, "hvc:r:", + while ((opt = getopt_long(argc, argv, "hvc:r:i:l:t:", long_options, &longindex)) != -1) { switch (opt) { /* Cgroup configuration */ @@ -283,6 +399,22 @@ int main(int argc, char **argv) case 'v': verbose = 1; break; + case 'i': + iov_count = atoi(optarg); + break; + case 'l': + length = atoi(optarg); + break; + case 't': + if (memcmp(optarg, "ping", 4) == 0) { + test = PING_PONG; + } else if (memcmp(optarg, "sendmsg", 7) == 0) { + test = SENDMSG; + } else { + usage(argv); + return -1; + } + break; case 'h': default: usage(argv); @@ -340,7 +472,12 @@ int main(int argc, char **argv) goto out; } - err = forever_ping_pong(rate, verbose); + if (test == PING_PONG) + err = forever_ping_pong(rate, verbose); + else if (test == SENDMSG) + err = sendmsg_test(iov_count, length, rate, verbose); + else + fprintf(stderr, "unknown test\n"); out: close(s1); close(s2); From patchwork Mon Jan 8 18:05:41 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Fastabend X-Patchwork-Id: 857006 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="fcSbHHwM"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zFjr42nkkz9s7g for ; Tue, 9 Jan 2018 05:05:56 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755047AbeAHSFy (ORCPT ); Mon, 8 Jan 2018 13:05:54 -0500 Received: from mail-pf0-f193.google.com ([209.85.192.193]:35522 "EHLO mail-pf0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755036AbeAHSFx (ORCPT ); Mon, 8 Jan 2018 13:05:53 -0500 Received: by mail-pf0-f193.google.com with SMTP id t12so3673070pfg.2 for ; Mon, 08 Jan 2018 10:05:53 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:from:to:cc:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=/3JKTPXphcORYWu9nhERYke+hD8317ehRhS/ffijAH4=; b=fcSbHHwMZFOGKxnNVTMAqS/I1WDOZzIUMebYvHBRP1yVEETS7H9QaQuMf0xetbBOlz eGP+njcRgLrIylpn9xHYkMPV5VqRUuf7eAtmuVnMzXxmglrXF8g39AyHqKbZfMQN2NZn tYqQER1/AdlSRzRrHtlWhR52fAWyrY/LJUyl6ca/5WB/XRO3qV1LU+O8Gs6Yvqy8kVCR 0yVHealRoGfgxBy1qLvCpz7Ux4wMt95iBl6H74Xz4Q+/W+lJ9ds2VjAbg8GcSwoz4Nd1 ARVcj+MArMnQjhTqac0I3zlHR/BIJ9yDPlS1TcAXGI3gUhtaRBjovz/+Gcy+l11bmVGK n1hw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:date:message-id:in-reply-to :references:user-agent:mime-version:content-transfer-encoding; bh=/3JKTPXphcORYWu9nhERYke+hD8317ehRhS/ffijAH4=; b=i7F29ImB1pVI4qRIt67s64uo3JcMdb81o8bYK04qsnEvTDWQo/x8IbUOz6aKKOxUjH jHm9M+xJT4/LobWjBq3ElaxZQn98AfV0PbpMFyHIyRlAQVdvTeGFpJGgIyh4IhUcAAzj fc90uPJM+hBIQUP1ziOcSLq3ZbHRQIlHMhyE/yK5qHI6RD1ksEY7cqSQyVQzwKxptTIX LC2K7A4vUCAuEXcg71xGuIqK9ioJwsQDBsgKoLmt9kXLHwPO6vN27gjD20dez3S9EI6A HH2hWs7fooOHD50K0Xqdez/ijnhEFeBK/NUQn86C0ZMEe/S710hIw9ZXFSTUFRHFULS6 +kpg== X-Gm-Message-State: AKGB3mJlD/i4cR/oxinWzKKnL+yrmAYlKg3K9TlUnkiy5iFF1L0tXeb5 0KxGtZrzpGrSEWWiokbbJBTg2A== X-Google-Smtp-Source: ACJfBotsCxgLcY5Y+C4aWZ7Cw7fc5kJSRmDtlFGG/7cycTlZAoO+W2TlgllMt3TbGhR7HJkA2pzIIg== X-Received: by 10.101.81.7 with SMTP id f7mr10065413pgq.423.1515434752546; Mon, 08 Jan 2018 10:05:52 -0800 (PST) Received: from [127.0.1.1] ([75.106.27.153]) by smtp.gmail.com with ESMTPSA id x22sm27200469pfa.169.2018.01.08.10.05.47 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 08 Jan 2018 10:05:51 -0800 (PST) Subject: [bpf-next PATCH 3/7] bpf: sockmap sample, use fork() for send and recv From: John Fastabend To: john.fastabend@gmail.com, ast@kernel.org, daniel@iogearbox.net Cc: netdev@vger.kernel.org Date: Mon, 08 Jan 2018 10:05:41 -0800 Message-ID: <20180108180541.13647.11500.stgit@john-Precision-Tower-5810> In-Reply-To: <20180108180302.13647.13866.stgit@john-Precision-Tower-5810> References: <20180108180302.13647.13866.stgit@john-Precision-Tower-5810> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Currently for SENDMSG tests first send completes then recv runs. This does not work well for large data sizes and/or many iterations. So fork the recv and send handler so that we run both send and recv. In the future we can add a parameter to do more than a single fork of tx/rx. With this we can get many GBps of data which helps exercise the sockmap code. Signed-off-by: John Fastabend --- samples/sockmap/sockmap_user. | 0 samples/sockmap/sockmap_user.c | 55 ++++++++++++++++++++++++++++------------ 2 files changed, 39 insertions(+), 16 deletions(-) create mode 100644 samples/sockmap/sockmap_user. diff --git a/samples/sockmap/sockmap_user. b/samples/sockmap/sockmap_user. new file mode 100644 index 0000000..e69de29 diff --git a/samples/sockmap/sockmap_user.c b/samples/sockmap/sockmap_user.c index 2d51672..4c83a1d 100644 --- a/samples/sockmap/sockmap_user.c +++ b/samples/sockmap/sockmap_user.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -197,7 +198,7 @@ static int msg_loop(int fd, int iov_count, int iov_length, int cnt, { struct msghdr msg = {0}; struct iovec *iov; - int i, flags = 0; + int i, flags = MSG_NOSIGNAL; iov = calloc(iov_count, sizeof(struct iovec)); if (!iov) @@ -272,25 +273,47 @@ static int msg_loop(int fd, int iov_count, int iov_length, int cnt, static int sendmsg_test(int iov_count, int iov_buf, int cnt, int verbose) { + int txpid, rxpid, err = 0; struct msg_stats s = {0}; - int err; - - err = msg_loop(c1, iov_count, iov_buf, cnt, &s, true); - if (err) { - fprintf(stderr, - "msg_loop_tx: iov_count %i iov_buf %i cnt %i err %i\n", - iov_count, iov_buf, cnt, err); - return err; + int status; + + errno = 0; + + rxpid = fork(); + if (rxpid == 0) { + err = msg_loop(p2, iov_count, iov_buf, cnt, &s, false); + if (err) + fprintf(stderr, + "msg_loop_rx: iov_count %i iov_buf %i cnt %i err %i\n", + iov_count, iov_buf, cnt, err); + fprintf(stdout, "rx_sendmsg: TX_bytes %zu RX_bytes %zu\n", + s.bytes_sent, s.bytes_recvd); + exit(1); + } else if (rxpid == -1) { + perror("msg_loop_rx: "); + err = errno; } - msg_loop(p2, iov_count, iov_buf, cnt, &s, false); - if (err) - fprintf(stderr, - "msg_loop_rx: iov_count %i iov_buf %i cnt %i err %i\n", - iov_count, iov_buf, cnt, err); + txpid = fork(); + if (txpid == 0) { + err = msg_loop(c1, iov_count, iov_buf, cnt, &s, true); + if (err) + fprintf(stderr, + "msg_loop_tx: iov_count %i iov_buf %i cnt %i err %i\n", + iov_count, iov_buf, cnt, err); + fprintf(stdout, "tx_sendmsg: TX_bytes %zu RX_bytes %zu\n", + s.bytes_sent, s.bytes_recvd); + exit(1); + } else if (txpid == -1) { + perror("msg_loop_tx: "); + return errno; + } - fprintf(stdout, "sendmsg: TX_bytes %zu RX_bytes %zu\n", - s.bytes_sent, s.bytes_recvd); + assert(waitpid(rxpid, &status, 0) == rxpid); + if (!txpid) + goto out; + assert(waitpid(txpid, &status, 0) == txpid); +out: return err; } From patchwork Mon Jan 8 18:05:58 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Fastabend X-Patchwork-Id: 857007 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="o4/MR5q9"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zFjrN5y4rz9s7g for ; Tue, 9 Jan 2018 05:06:12 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755088AbeAHSGL (ORCPT ); Mon, 8 Jan 2018 13:06:11 -0500 Received: from mail-pf0-f194.google.com ([209.85.192.194]:40814 "EHLO mail-pf0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754901AbeAHSGK (ORCPT ); Mon, 8 Jan 2018 13:06:10 -0500 Received: by mail-pf0-f194.google.com with SMTP id v26so6500355pfl.7 for ; Mon, 08 Jan 2018 10:06:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:from:to:cc:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=7PsX1sDUX6pNDSgQM9uwj/rKFWcJrnLA/gjSohgP5fE=; b=o4/MR5q9jma1GO71SDBx85ZKR7uUVBgpfQYDpIrtyy+1OcyMu9CHrACi14n+PetUYn 2GGMJvPZ4xvSZQUWAb9OUwvqSam2CPmXxNM1R1Hz8UbqVzPBdMviRt+GC93h9ZxMuZMZ 199nitLFkbzZFSzC9CAVMK8EgR+uUzNR8YgRwZoSCI2okxKn6BULxb04wiMuFlV9jMqt hr3KEl17FGRxvVJ+uLJblWr4kY6s1WxLBnBA6m6AjJTvRw0bEx+tofAqT+9ZdUAMBr1B ib8RyumttGqCuReMo1BBTBsAkN8nr294DokvMwAIyw2HRtd8zOSsUf7HyirA8FFiV1YS WVnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:date:message-id:in-reply-to :references:user-agent:mime-version:content-transfer-encoding; bh=7PsX1sDUX6pNDSgQM9uwj/rKFWcJrnLA/gjSohgP5fE=; b=Wpj/eiBXIyHxgtOjy4m9/HW5drk4ltCs+eFqJG+3I8/KtSZmdq0y6OeZf2+LqzidoF qV7KBU7sS4UhX7zHtsoUf+LYkWESuI6zX9BjEsvhQmjLxPzRxhCoVHlwvU+HSV4sAwMs 29qAtMRlvoq7ODvezubjBBg6Hw3hMneWsxPYT6+JwB9mfDYu+51TmvEmDuDOxymGpWmh hDCQztHp6G6gFrgb1ygKd4/pXBazY+Y80Jpho5K6iCorojpgx33SIMJhSbpgxr2sgEIZ uhFgygr+Yi1/f0rux3xpbrjiZW0IwEajNu1EGkV/e8pBPeMZyArmhszSajSwlTFgi2Ia 17Mw== X-Gm-Message-State: AKGB3mJwpl8lrWsZVDgr4VGB3pf6S2oCPyvAOCLRDK9nbCpH8pWWmNnU O/6nMjaWkagUfCIAF3ODaHXxaA== X-Google-Smtp-Source: ACJfBovFa+2r5/OVvfxJfry5dkwiaQjPXKZKjWzai7GmTd2KILXkQTQtbV4p1xJLy/BOxv2VOpyorw== X-Received: by 10.84.248.140 with SMTP id q12mr2184647pll.189.1515434769307; Mon, 08 Jan 2018 10:06:09 -0800 (PST) Received: from [127.0.1.1] ([75.106.27.153]) by smtp.gmail.com with ESMTPSA id p14sm22921696pgn.37.2018.01.08.10.06.03 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 08 Jan 2018 10:06:08 -0800 (PST) Subject: [bpf-next PATCH 4/7] bpf: sockmap sample, report bytes/sec From: John Fastabend To: john.fastabend@gmail.com, ast@kernel.org, daniel@iogearbox.net Cc: netdev@vger.kernel.org Date: Mon, 08 Jan 2018 10:05:58 -0800 Message-ID: <20180108180558.13647.13464.stgit@john-Precision-Tower-5810> In-Reply-To: <20180108180302.13647.13866.stgit@john-Precision-Tower-5810> References: <20180108180302.13647.13866.stgit@john-Precision-Tower-5810> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Report bytes/sec sent as well as total bytes. Useful to get rough idea how different configurations and usage patterns perform with sockmap. Signed-off-by: John Fastabend --- samples/sockmap/sockmap_user.c | 37 ++++++++++++++++++++++++++++++++----- 1 file changed, 32 insertions(+), 5 deletions(-) diff --git a/samples/sockmap/sockmap_user.c b/samples/sockmap/sockmap_user.c index 4c83a1d..8329097 100644 --- a/samples/sockmap/sockmap_user.c +++ b/samples/sockmap/sockmap_user.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include @@ -191,14 +192,16 @@ static int sockmap_init_sockets(void) struct msg_stats { size_t bytes_sent; size_t bytes_recvd; + struct timespec start; + struct timespec end; }; static int msg_loop(int fd, int iov_count, int iov_length, int cnt, struct msg_stats *s, bool tx) { struct msghdr msg = {0}; + int err, i, flags = MSG_NOSIGNAL; struct iovec *iov; - int i, flags = MSG_NOSIGNAL; iov = calloc(iov_count, sizeof(struct iovec)); if (!iov) @@ -220,6 +223,7 @@ static int msg_loop(int fd, int iov_count, int iov_length, int cnt, msg.msg_iovlen = iov_count; if (tx) { + clock_gettime(CLOCK_MONOTONIC, &s->start); for (i = 0; i < cnt; i++) { int sent = sendmsg(fd, &msg, flags); @@ -229,6 +233,7 @@ static int msg_loop(int fd, int iov_count, int iov_length, int cnt, } s->bytes_sent += sent; } + clock_gettime(CLOCK_MONOTONIC, &s->end); } else { int slct, recv, max_fd = fd; struct timeval timeout; @@ -236,6 +241,9 @@ static int msg_loop(int fd, int iov_count, int iov_length, int cnt, fd_set w; total_bytes = (float)iov_count * (float)iov_length * (float)cnt; + err = clock_gettime(CLOCK_MONOTONIC, &s->start); + if (err < 0) + perror("recv start time: "); while (s->bytes_recvd < total_bytes) { timeout.tv_sec = 1; timeout.tv_usec = 0; @@ -247,15 +255,18 @@ static int msg_loop(int fd, int iov_count, int iov_length, int cnt, slct = select(max_fd + 1, &w, NULL, NULL, &timeout); if (slct == -1) { perror("select()"); + clock_gettime(CLOCK_MONOTONIC, &s->end); return slct; } else if (!slct) { fprintf(stderr, "unexpected timeout\n"); + clock_gettime(CLOCK_MONOTONIC, &s->end); return slct; } recv = recvmsg(fd, &msg, flags); if (recv < 0) { if (errno != EWOULDBLOCK) { + clock_gettime(CLOCK_MONOTONIC, &s->end); perror("recv failed()\n"); return errno; } @@ -263,6 +274,7 @@ static int msg_loop(int fd, int iov_count, int iov_length, int cnt, s->bytes_recvd += recv; } + clock_gettime(CLOCK_MONOTONIC, &s->end); } for (i = 0; i < iov_count; i++) @@ -271,11 +283,14 @@ static int msg_loop(int fd, int iov_count, int iov_length, int cnt, return 0; } +static float giga = 1000000000; + static int sendmsg_test(int iov_count, int iov_buf, int cnt, int verbose) { int txpid, rxpid, err = 0; struct msg_stats s = {0}; int status; + float sent_Bps = 0, recvd_Bps = 0; errno = 0; @@ -286,8 +301,14 @@ static int sendmsg_test(int iov_count, int iov_buf, int cnt, int verbose) fprintf(stderr, "msg_loop_rx: iov_count %i iov_buf %i cnt %i err %i\n", iov_count, iov_buf, cnt, err); - fprintf(stdout, "rx_sendmsg: TX_bytes %zu RX_bytes %zu\n", - s.bytes_sent, s.bytes_recvd); + if (s.end.tv_sec - s.start.tv_sec) { + sent_Bps = s.bytes_sent / (s.end.tv_sec - s.start.tv_sec); + recvd_Bps = s.bytes_recvd / (s.end.tv_sec - s.start.tv_sec); + } + fprintf(stdout, + "rx_sendmsg: TX: %zuB %fB/s %fGB/s RX: %zuB %fB/s %fGB/s\n", + s.bytes_sent, sent_Bps, sent_Bps/giga, + s.bytes_recvd, recvd_Bps, recvd_Bps/giga); exit(1); } else if (rxpid == -1) { perror("msg_loop_rx: "); @@ -301,8 +322,14 @@ static int sendmsg_test(int iov_count, int iov_buf, int cnt, int verbose) fprintf(stderr, "msg_loop_tx: iov_count %i iov_buf %i cnt %i err %i\n", iov_count, iov_buf, cnt, err); - fprintf(stdout, "tx_sendmsg: TX_bytes %zu RX_bytes %zu\n", - s.bytes_sent, s.bytes_recvd); + if (s.end.tv_sec - s.start.tv_sec) { + sent_Bps = s.bytes_sent / (s.end.tv_sec - s.start.tv_sec); + recvd_Bps = s.bytes_recvd / (s.end.tv_sec - s.start.tv_sec); + } + fprintf(stdout, + "tx_sendmsg: TX: %zuB %fB/s %f GB/s RX: %zuB %fB/s %fGB/s\n", + s.bytes_sent, sent_Bps, sent_Bps/giga, + s.bytes_recvd, recvd_Bps, recvd_Bps/giga); exit(1); } else if (txpid == -1) { perror("msg_loop_tx: "); From patchwork Mon Jan 8 18:06:15 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Fastabend X-Patchwork-Id: 857008 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="iEqvYPFs"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zFjrk1szwz9s7g for ; Tue, 9 Jan 2018 05:06:30 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755135AbeAHSG1 (ORCPT ); Mon, 8 Jan 2018 13:06:27 -0500 Received: from mail-pf0-f193.google.com ([209.85.192.193]:37289 "EHLO mail-pf0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755124AbeAHSG0 (ORCPT ); Mon, 8 Jan 2018 13:06:26 -0500 Received: by mail-pf0-f193.google.com with SMTP id n6so6500167pfa.4 for ; Mon, 08 Jan 2018 10:06:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:from:to:cc:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=J0H8prr32d8jQHyLXtXNSIKxNuPkoh7Xhx0At3SWWmg=; b=iEqvYPFs0rIwonF6rmHdnIeZVt9klmUB64meFSmA24hwaObLuWHG1Zg3HmrRfxFnmF gYJXVo+Lgz/1F0TOrORavRAQa9brETnSRiLoW+TT1XgKT4u2BCEu+XMmUeQCd7Bcd4Io nWyj3M4lIZKFO5zC65/MqTPd7DaMZ6iF5zPxQKHxaf2T5Jj42WNVioxywwk7JCsgSaSZ Aekia0chvO1HsZ9mfHBE1yZFcCteAkRsCBQbLTNs03FphnOWSMd99juvfOmQYqwQdx/i qKIOZqQYIpkH6yjL4STCLw37IqmBKwndBCxMNdAe6xq1ROwfcOdVSzNq/50yVmx4YHcy s2aQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:date:message-id:in-reply-to :references:user-agent:mime-version:content-transfer-encoding; bh=J0H8prr32d8jQHyLXtXNSIKxNuPkoh7Xhx0At3SWWmg=; b=k/bx/XM04+sjKTKZ9+AI81X7HhrAaTjlrV60R+R8cV+h0FJow/J+kCncJacH8QYHs0 FJyu0+X3SVZpfiGUx8kZtw0P7TZAIHGZdYseRA5OFsowVhWk+95hBEQDGjci39KMut2P Dy4qtcmfCeylMhovDPHmnhAoZiOkXg9jgOiQ4ubom1nmTAEhSStCm8fMkmegyclIu/oe od0gFE7et7mvoTA5IpA7a16j9WFAe3ASMnFlrfSzuh7iOt5ABAEPZAJlBFqKGS2ek0Nc d9t11d2MCUTb2yFlVnclTpObiC5HWL0z+AzMdO8ZNm4QlOKoCoL9KDaSefVxBFmW8X6O SUfA== X-Gm-Message-State: AKGB3mJxcKTa6Q8Err1ZXyDeNeElumzrtnQAA38io2tD5WKxfs+LzJfe X/cpenH1ihe+x2MxP8Y2Fymhdw== X-Google-Smtp-Source: ACJfBosH0tMflBMD/UW9qIn3eF8KO9ejeXMGrhXlmkiG0aKWw9/ZVltKaO9FTDn61hlNkb6+Xv+YZQ== X-Received: by 10.84.245.130 with SMTP id j2mr3824739pll.135.1515434785597; Mon, 08 Jan 2018 10:06:25 -0800 (PST) Received: from [127.0.1.1] ([75.106.27.153]) by smtp.gmail.com with ESMTPSA id b3sm3164271pga.24.2018.01.08.10.06.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 08 Jan 2018 10:06:24 -0800 (PST) Subject: [bpf-next PATCH 5/7] bpf: sockmap sample add base test without any BPF for comparison From: John Fastabend To: john.fastabend@gmail.com, ast@kernel.org, daniel@iogearbox.net Cc: netdev@vger.kernel.org Date: Mon, 08 Jan 2018 10:06:15 -0800 Message-ID: <20180108180615.13647.73865.stgit@john-Precision-Tower-5810> In-Reply-To: <20180108180302.13647.13866.stgit@john-Precision-Tower-5810> References: <20180108180302.13647.13866.stgit@john-Precision-Tower-5810> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Add a base test that does not use BPF hooks to test baseline case. Signed-off-by: John Fastabend --- samples/sockmap/sockmap_user.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/samples/sockmap/sockmap_user.c b/samples/sockmap/sockmap_user.c index 8329097..bae85f8 100644 --- a/samples/sockmap/sockmap_user.c +++ b/samples/sockmap/sockmap_user.c @@ -285,18 +285,24 @@ static int msg_loop(int fd, int iov_count, int iov_length, int cnt, static float giga = 1000000000; -static int sendmsg_test(int iov_count, int iov_buf, int cnt, int verbose) +static int sendmsg_test(int iov_count, int iov_buf, int cnt, + int verbose, bool base) { - int txpid, rxpid, err = 0; + float sent_Bps = 0, recvd_Bps = 0; + int rx_fd, txpid, rxpid, err = 0; struct msg_stats s = {0}; int status; - float sent_Bps = 0, recvd_Bps = 0; errno = 0; + if (base) + rx_fd = p1; + else + rx_fd = p2; + rxpid = fork(); if (rxpid == 0) { - err = msg_loop(p2, iov_count, iov_buf, cnt, &s, false); + err = msg_loop(rx_fd, iov_count, iov_buf, cnt, &s, false); if (err) fprintf(stderr, "msg_loop_rx: iov_count %i iov_buf %i cnt %i err %i\n", @@ -422,6 +428,7 @@ static int forever_ping_pong(int rate, int verbose) enum { PING_PONG, SENDMSG, + BASE, }; int main(int argc, char **argv) @@ -460,6 +467,8 @@ int main(int argc, char **argv) test = PING_PONG; } else if (memcmp(optarg, "sendmsg", 7) == 0) { test = SENDMSG; + } else if (memcmp(optarg, "base", 4) == 0) { + test = BASE; } else { usage(argv); return -1; @@ -485,6 +494,10 @@ int main(int argc, char **argv) /* catch SIGINT */ signal(SIGINT, running_handler); + /* If base test skip BPF setup */ + if (test == BASE) + goto run; + if (load_bpf_file(filename)) { fprintf(stderr, "load_bpf_file: (%s) %s\n", filename, strerror(errno)); @@ -516,6 +529,7 @@ int main(int argc, char **argv) return err; } +run: err = sockmap_init_sockets(); if (err) { fprintf(stderr, "ERROR: test socket failed: %d\n", err); @@ -525,7 +539,9 @@ int main(int argc, char **argv) if (test == PING_PONG) err = forever_ping_pong(rate, verbose); else if (test == SENDMSG) - err = sendmsg_test(iov_count, length, rate, verbose); + err = sendmsg_test(iov_count, length, rate, verbose, false); + else if (test == BASE) + err = sendmsg_test(iov_count, length, rate, verbose, true); else fprintf(stderr, "unknown test\n"); out: From patchwork Mon Jan 8 18:06:31 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Fastabend X-Patchwork-Id: 857011 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="dgjAyqhV"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zFjs22zmPz9s7g for ; Tue, 9 Jan 2018 05:06:46 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755154AbeAHSGn (ORCPT ); Mon, 8 Jan 2018 13:06:43 -0500 Received: from mail-pf0-f193.google.com ([209.85.192.193]:34068 "EHLO mail-pf0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755147AbeAHSGm (ORCPT ); Mon, 8 Jan 2018 13:06:42 -0500 Received: by mail-pf0-f193.google.com with SMTP id e76so1719589pfk.1 for ; Mon, 08 Jan 2018 10:06:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:from:to:cc:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=FOu1ylrRhKmOS0MRFpSkZPp5b5RFItJh0/p+kHPbW0o=; b=dgjAyqhVmVkTRY0dPEVe2I4y5kxhEW3zmZp0IQeiWTe/b3z5yoW6UefkUbHnWAOW9i AoCVRuARXFgXKQzsqrZF8QdTnQhwfX1OrtHGdh1DaPPOEeU7sEzj/NNDsB3Cf6AqrFQn Pl3/59erp3l5kTMnFA+k7LEuQkcYpsgChbut2GnQGDtVwO/bC5QV/fKtmJADCPvme6BE o1w7MzkIvvVbhGYq/9Sm8b/XfKZ123QgAtKn3rqhznwbzo3AbNoohTqz1VJ1+XEiT65P pwcYKRGntx17DgULiYGlPVHJkHxpV2AzA+iFy3uB3PdXkE71Nhd2L6q784M7Jp9AlxKo uCew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:date:message-id:in-reply-to :references:user-agent:mime-version:content-transfer-encoding; bh=FOu1ylrRhKmOS0MRFpSkZPp5b5RFItJh0/p+kHPbW0o=; b=OPgdOFfieL4VOflehtMoV0f2NvZjkRFTd9GGDr3u4si6328CdKn8Atyp4UZvI3YKq5 e5l4TGfsyKbTRynB6ma+VNP1572LvuWwGS5saL03sk18ddsI05FovCcJFLQkUSfaHe0g JbcNfPJ1/3Sz1celXZKL9/sMKrXQWTmU5wDfjvjZAR9Q5vTjuhz+V8lYC41OTCYpXzRM 1F8iF4iVmdck+9miFKMmiFEzc3z8QAynBziF3GHMypqVfGbuhICGvhhHF1PU8Uj0QJCv okPgYWRwpR/PLlelCfABEB3xsZnUoe+7CmXywgBtg7Zw3IoWicY3ThEb7w1MbEr8B5i6 c7tg== X-Gm-Message-State: AKGB3mJQdXd4Qo2nyF+D15RmC6OyjuthWgI+p80iiiSWmrcFqKREXd2W ptzDykAO9Nvef8Mn7fTAEYfEjQ== X-Google-Smtp-Source: ACJfBosqWTmjFblIY/NUpLj/uKZeGksF69quwqxA02nzA09anMlrb0nTLnXNZDCBPedrRcyXdztw1A== X-Received: by 10.159.208.7 with SMTP id a7mr13310846plp.104.1515434801917; Mon, 08 Jan 2018 10:06:41 -0800 (PST) Received: from [127.0.1.1] ([75.106.27.153]) by smtp.gmail.com with ESMTPSA id g2sm27478766pfc.130.2018.01.08.10.06.36 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 08 Jan 2018 10:06:41 -0800 (PST) Subject: [bpf-next PATCH 6/7] bpf: sockmap put client sockets in blocking mode From: John Fastabend To: john.fastabend@gmail.com, ast@kernel.org, daniel@iogearbox.net Cc: netdev@vger.kernel.org Date: Mon, 08 Jan 2018 10:06:31 -0800 Message-ID: <20180108180631.13647.7114.stgit@john-Precision-Tower-5810> In-Reply-To: <20180108180302.13647.13866.stgit@john-Precision-Tower-5810> References: <20180108180302.13647.13866.stgit@john-Precision-Tower-5810> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Put client sockets in blocking mode otherwise with sendmsg tests its easy to overrun the socket buffers which results in the test being aborted. The original non-blocking was added to handle listen/accept with a single thread the client/accepted sockets do not need to be non-blocking. Signed-off-by: John Fastabend --- samples/sockmap/sockmap_user.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/sockmap/sockmap_user.c b/samples/sockmap/sockmap_user.c index bae85f8..0d8950f 100644 --- a/samples/sockmap/sockmap_user.c +++ b/samples/sockmap/sockmap_user.c @@ -110,7 +110,7 @@ static int sockmap_init_sockets(void) } /* Non-blocking sockets */ - for (i = 0; i < 4; i++) { + for (i = 0; i < 2; i++) { err = ioctl(*fds[i], FIONBIO, (char *)&one); if (err < 0) { perror("ioctl s1 failed()"); From patchwork Mon Jan 8 18:06:47 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Fastabend X-Patchwork-Id: 857012 X-Patchwork-Delegate: bpf@iogearbox.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="Kt7KNUaR"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zFjsL028Bz9s7g for ; Tue, 9 Jan 2018 05:07:02 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755158AbeAHSHA (ORCPT ); Mon, 8 Jan 2018 13:07:00 -0500 Received: from mail-pg0-f66.google.com ([74.125.83.66]:38973 "EHLO mail-pg0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754560AbeAHSG6 (ORCPT ); Mon, 8 Jan 2018 13:06:58 -0500 Received: by mail-pg0-f66.google.com with SMTP id z20so3781164pgv.6 for ; Mon, 08 Jan 2018 10:06:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:from:to:cc:date:message-id:in-reply-to:references :user-agent:mime-version:content-transfer-encoding; bh=1K7EtZ9zrlkk9LxBWMZJ34y+kuYyjYjlhssANY/T1/M=; b=Kt7KNUaRjrpfxctkKtWSj3UX2kL/4/FcAH0CWRH9774SQSs2zyYWbYR82p0lywknKe Vbsa0pfUSBmPFnD4jWjWYFCjFVvHJkuodKLT5Afpp06KyfwdgGcbxcPRtNDNoVucAZIU DRVBv77lI588zsIIzwKNRFGATetjUyD0pFL1uUs+Q+qVXHAwzs5BoidHI25iwwNjaANA wq0EwDK0FbdFHLkxInTzXstxNijkwInhQ4JheRw0OpMkPTqrChrqnD0blj584MeTpZJd 59rRekQLPUuET/RfD1P3YyyUw/Stbk9W3V6/E1NfB/Bvtgx0PCKEMekkq+NIhYFvJUjP qWLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:from:to:cc:date:message-id:in-reply-to :references:user-agent:mime-version:content-transfer-encoding; bh=1K7EtZ9zrlkk9LxBWMZJ34y+kuYyjYjlhssANY/T1/M=; b=ME4aBMNVijbtdct9zUiX/CexF9dK3FWxF694B+W9LcGvISU9dUN9jRscO47PgIRvBx ONZ8kP0QXqYAhLF4GmVj+bScU5jaiUtOAJEQ8199AFFSQjuIG+zD5qgaC7kf5NJkkftM nddt1E3kINc2o4oq57B7uS7qIV8A2M8rG5LMM0QyaMTa0+/x1naVb5HGIPYBrVVO5lXO BKaQqrexE75CDsM3zh6Y889ifOBeQWxe29B/t95WF0tebCtRlEZekurSgfNPPQX5Fud7 yJhLu6RNwqGrxB3k7PS/1K6a9NZKlKiEAqMJW5kEk7fOxMH68f77wWLjQrLh/wK/HjX4 Rf3w== X-Gm-Message-State: AKGB3mJbGROKqTpiSG+j4zF3jnFqlcESz4FAoiuUWi1/+yDe9zogckNG 70GTKo9DFQR95yMeVMFPS48TVg== X-Google-Smtp-Source: ACJfBovwKmvR3a6bKiWTMPlGBLm6x5VxaDIjfPhoyFi7redqw1YKMgkUY6DoTGEwVK4qsi7xRyT1Cw== X-Received: by 10.99.123.29 with SMTP id w29mr9932505pgc.10.1515434818197; Mon, 08 Jan 2018 10:06:58 -0800 (PST) Received: from [127.0.1.1] ([75.106.27.153]) by smtp.gmail.com with ESMTPSA id e18sm27990154pfb.168.2018.01.08.10.06.53 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 08 Jan 2018 10:06:57 -0800 (PST) Subject: [bpf-next PATCH 7/7] bpf: sockmap set rlimit From: John Fastabend To: john.fastabend@gmail.com, ast@kernel.org, daniel@iogearbox.net Cc: netdev@vger.kernel.org Date: Mon, 08 Jan 2018 10:06:47 -0800 Message-ID: <20180108180647.13647.82547.stgit@john-Precision-Tower-5810> In-Reply-To: <20180108180302.13647.13866.stgit@john-Precision-Tower-5810> References: <20180108180302.13647.13866.stgit@john-Precision-Tower-5810> User-Agent: StGit/0.17.1-dirty MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Avoid extra step of setting limit from cmdline and do it directly in the program. Signed-off-by: John Fastabend --- samples/sockmap/sockmap_user.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/samples/sockmap/sockmap_user.c b/samples/sockmap/sockmap_user.c index 0d8950f..2afbefd 100644 --- a/samples/sockmap/sockmap_user.c +++ b/samples/sockmap/sockmap_user.c @@ -27,6 +27,7 @@ #include #include +#include #include #include @@ -434,6 +435,7 @@ enum { int main(int argc, char **argv) { int iov_count = 1, length = 1024, rate = 1, verbose = 0; + struct rlimit r = {10 * 1024 * 1024, RLIM_INFINITY}; int opt, longindex, err, cg_fd = 0; int test = PING_PONG; char filename[256]; @@ -487,6 +489,11 @@ int main(int argc, char **argv) return -1; } + if (setrlimit(RLIMIT_MEMLOCK, &r)) { + perror("setrlimit(RLIMIT_MEMLOCK)"); + return 1; + } + snprintf(filename, sizeof(filename), "%s_kern.o", argv[0]); running = 1;