From patchwork Fri Jan 12 05:06:17 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Fastabend X-Patchwork-Id: 859502 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="d+WTJ9zv"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zHrLy56q2z9t2l for ; Fri, 12 Jan 2018 16:06:34 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754110AbeALFGa (ORCPT ); Fri, 12 Jan 2018 00:06:30 -0500 Received: from mail-pg0-f65.google.com ([74.125.83.65]:46321 "EHLO mail-pg0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751958AbeALFG3 (ORCPT ); Fri, 12 Jan 2018 00:06:29 -0500 Received: by mail-pg0-f65.google.com with SMTP id s9so2063174pgq.13 for ; Thu, 11 Jan 2018 21:06:29 -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=WHDb8TKM1QEnAceBpAg63RyJ8ot45M5Capv/EmH0YRA=; b=d+WTJ9zvJXChQLBEAaqpuR+xJGtaPN9RvR41UpAz5du7blVtbkSl6jJTfwFePfre50 3hCZ615Jv6nMGx4ATzjQ5YdUcRM++yJ4jYvHavOhGm9OtNNoxqYvk3EryndLn4eLn0JN 1TVaShlScC9aFMYyr/oVQ1zA7FbzAtEnpnUO8/2MGuITTroB60cMJe7mJOTvhU8gFrNt HtdEva71B6kH5scIAIvBLYavh0yKxWT0Sklz1qCKuFedf4s66fZFG69XqFseCs4AW32Z 2+uuqfeQolgzr/m4T6LHwjP+Icfqixug6Isj4PNhslz6XE9igpRhQXZm1ONRdFLf8VKU S+IA== 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=WHDb8TKM1QEnAceBpAg63RyJ8ot45M5Capv/EmH0YRA=; b=SkYjlCFV6qyekUi+SrdVKzLedI7SB1V76HB2vF9RWjN/LxuEM5EYtoZDLHsMBQWHTI yZFOsorsGJhDsAIA7cLsR65gnv3/1bbRnZcExWzAd5/9kjYg92YDz/MtkeMDjCxF2XR/ kGt1nDsoCUM0f+OHfiUeYoa1plUIwTyI2dkuIftvb2t98LiQlChx1ib0c3JW4kE/7M5q yKhwF1aarumB0CJNngR+Kwz5VSluqaCRFR9TFs61frP7Oqxl1X/cvZe9NOZpfNIHCeHH PPfbKqtulU5WKbOVgP8Qxl1BqoFziMSLCMDr085mhG+euPXP6xPsrArzx8mFPK4Pd9gK i6UQ== X-Gm-Message-State: AKGB3mKeLiVTyRAcEVipBh3H/m04gVWtz0N0ZwPpDSbw8AMauv+eq3IQ o1itcB0SquS6q8wTmvCmz/yMgg== X-Google-Smtp-Source: ACJfBouMBXMZNBvAfQiZiSkYcIOU3odhOg8zcj1ielxIDrJh+rr5DTG6iXqsKMrc/oS0FXxePkXsgw== X-Received: by 10.99.66.68 with SMTP id p65mr13152047pga.384.1515733588413; Thu, 11 Jan 2018 21:06:28 -0800 (PST) Received: from [127.0.1.1] ([75.106.27.153]) by smtp.gmail.com with ESMTPSA id g19sm41713092pfb.65.2018.01.11.21.06.22 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 11 Jan 2018 21:06:27 -0800 (PST) Subject: [bpf-next PATCH v3 1/7] bpf: refactor sockmap sample program update for arg parsing From: John Fastabend To: borkmann@iogearbox.net, john.fastabend@gmail.com, ast@kernel.org, kafai@fb.com Cc: netdev@vger.kernel.org Date: Thu, 11 Jan 2018 21:06:17 -0800 Message-ID: <20180112050617.5823.7863.stgit@john-Precision-Tower-5810> In-Reply-To: <20180112050243.5823.85987.stgit@john-Precision-Tower-5810> References: <20180112050243.5823.85987.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: Martin KaFai Lau --- samples/sockmap/sockmap_user.c | 164 ++++++++++++++++++++++++++++------------ 1 file changed, 113 insertions(+), 51 deletions(-) diff --git a/samples/sockmap/sockmap_user.c b/samples/sockmap/sockmap_user.c index 7cc9d22..17400d4 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, sc, err, max_fd, one = 1; - int s1, s2, c1, c2, p1, p2; + 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, 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; @@ -63,8 +89,7 @@ static int sockmap_test_sockets(int rate, int dot) *fds[i] = socket(AF_INET, SOCK_STREAM, 0); if (*fds[i] < 0) { perror("socket s1 failed()"); - err = *fds[i]; - goto out; + return errno; } } @@ -74,7 +99,7 @@ static int sockmap_test_sockets(int rate, int dot) (char *)&one, sizeof(one)); if (err) { perror("setsockopt failed()"); - goto out; + return errno; } } @@ -83,7 +108,7 @@ static int sockmap_test_sockets(int rate, int dot) err = ioctl(*fds[i], FIONBIO, (char *)&one); if (err < 0) { perror("ioctl s1 failed()"); - goto out; + return errno; } } @@ -96,14 +121,14 @@ static int sockmap_test_sockets(int rate, int dot) err = bind(s1, (struct sockaddr *)&addr, sizeof(addr)); if (err < 0) { perror("bind s1 failed()\n"); - goto out; + return errno; } addr.sin_port = htons(S2_PORT); err = bind(s2, (struct sockaddr *)&addr, sizeof(addr)); if (err < 0) { perror("bind s2 failed()\n"); - goto out; + return errno; } /* Listen server sockets */ @@ -111,14 +136,14 @@ static int sockmap_test_sockets(int rate, int dot) err = listen(s1, 32); if (err < 0) { perror("listen s1 failed()\n"); - goto out; + return errno; } addr.sin_port = htons(S2_PORT); err = listen(s2, 32); if (err < 0) { perror("listen s1 failed()\n"); - goto out; + return errno; } /* Initiate Connect */ @@ -126,46 +151,56 @@ static int sockmap_test_sockets(int rate, int dot) err = connect(c1, (struct sockaddr *)&addr, sizeof(addr)); if (err < 0 && errno != EINPROGRESS) { perror("connect c1 failed()\n"); - goto out; + return errno; } addr.sin_port = htons(S2_PORT); err = connect(c2, (struct sockaddr *)&addr, sizeof(addr)); if (err < 0 && errno != EINPROGRESS) { perror("connect c2 failed()\n"); - goto out; + return errno; + } else if (err < 0) { + err = 0; } /* Accept Connecrtions */ p1 = accept(s1, NULL, NULL); if (p1 < 0) { perror("accept s1 failed()\n"); - goto out; + return errno; } p2 = accept(s2, NULL, NULL); if (p2 < 0) { perror("accept s1 failed()\n"); - goto out; + return errno; } - 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); + return 0; +} + +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 +228,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 +240,61 @@ 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 +308,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,12 +333,21 @@ 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) From patchwork Fri Jan 12 05:06:34 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Fastabend X-Patchwork-Id: 859503 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="vbw5KOz3"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zHrML5LQZz9t2l for ; Fri, 12 Jan 2018 16:06:54 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754175AbeALFGu (ORCPT ); Fri, 12 Jan 2018 00:06:50 -0500 Received: from mail-pf0-f194.google.com ([209.85.192.194]:38223 "EHLO mail-pf0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754134AbeALFGt (ORCPT ); Fri, 12 Jan 2018 00:06:49 -0500 Received: by mail-pf0-f194.google.com with SMTP id k19so3614039pfj.5 for ; Thu, 11 Jan 2018 21:06:48 -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=OqJNhjlApXtEtPt6AZIeHLljIMcNWcuJcrQpSoFIGxA=; b=vbw5KOz3SVyr82i+ERMN9apaY10Cc7CIt/8/rkUiBMgmIAqEyMDw7QiWuewypQMMOP z20Lyjeec+6aPpEZiKDQYSUp3Hs0CnVBOOPUozB6kWDCvIIJ365Xd8nJgfqV0BMFEKto a3X8jXRgSyItIEGv2MkIecZqUT0tp0BTnMmMhzHc9ERGJ4qapQSTZHODgT2dN8u33JuW kvO3v3fOgyMf2mdok4tc7tnU1TEJlgV97a34wVNlxp/Eu+/rhjHdq/2TUG4gswsglh2U zuWpjMwAgx+EIdJaxVOYlgY3IwHErdN84jBNLBkhqrSdnCGwgTbSlIMx+4Rkg37rsUTj AmEw== 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=OqJNhjlApXtEtPt6AZIeHLljIMcNWcuJcrQpSoFIGxA=; b=rTWw879w9kEZrWbhuQ9jW4QuPhCm8MLZAkjQSKfC/iGWIjdK7a9SKHcotcTSln229f SFHAp+8gUF8oDrBxWUbMOPFDTSkWXIM1J04RWZ7F5TIW9HI8jgak21CnvWfMNu4kFolP Tk5jgZOFYaa7ay7WPFYhI1yXPJCsLDMwyuUbXcd7Vx+VvjmsRQeBO24HAWMMPrQ6Qk7o L0QUBu6gF5DDzop5OV4PdBiB27s2/d7pf4Y6IXsoaUq/5+ffhe9wt4y4nCmAxnqs9pvl XGC4EuB6wusrsBp4D4XMhHnIKWk5wCBzPhyO4lgTfxbtQ6697F0mN0YaPiiEWcv2bneC pBJw== X-Gm-Message-State: AKGB3mIwZvpqKFKzVAA71oGzHmH2QEWxq9yE+v/P70CfuaDiVgiyz5Z5 C0pimvvImZUwZq0rAT0k9azqxw== X-Google-Smtp-Source: ACJfBos5OlkFmrLQDOOL1IH2vfbGXnFPrNnNa0DMQrpfj65OoXHXgdNRo79O/HGnwbDRG4qf2ZeRSg== X-Received: by 10.159.241.1 with SMTP id q1mr16919425plr.378.1515733608308; Thu, 11 Jan 2018 21:06:48 -0800 (PST) Received: from [127.0.1.1] ([75.106.27.153]) by smtp.gmail.com with ESMTPSA id e26sm39512317pfi.10.2018.01.11.21.06.42 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 11 Jan 2018 21:06:47 -0800 (PST) Subject: [bpf-next PATCH v3 2/7] bpf: add sendmsg option for testing BPF programs From: John Fastabend To: borkmann@iogearbox.net, john.fastabend@gmail.com, ast@kernel.org, kafai@fb.com Cc: netdev@vger.kernel.org Date: Thu, 11 Jan 2018 21:06:34 -0800 Message-ID: <20180112050634.5823.81340.stgit@john-Precision-Tower-5810> In-Reply-To: <20180112050243.5823.85987.stgit@john-Precision-Tower-5810> References: <20180112050243.5823.85987.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 | 147 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 144 insertions(+), 3 deletions(-) diff --git a/samples/sockmap/sockmap_user.c b/samples/sockmap/sockmap_user.c index 17400d4..8ec7dbf 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 } }; @@ -182,6 +185,117 @@ static int sockmap_init_sockets(void) return 0; } +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:"); + free(iov); + 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()"); + goto out_errno; + } else if (!slct) { + fprintf(stderr, "unexpected timeout\n"); + goto out_errno; + } + + recv = recvmsg(fd, &msg, flags); + if (recv < 0) { + if (errno != EWOULDBLOCK) { + perror("recv failed()\n"); + goto out_errno; + } + } + + s->bytes_recvd += recv; + } + } + + for (i = 0; i < iov_count; i++) + free(iov[i].iov_base); + free(iov); + return 0; +out_errno: + free(iov); + return errno; +} + +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; @@ -257,13 +371,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 */ @@ -282,6 +402,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); @@ -339,7 +475,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 Fri Jan 12 05:06:54 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Fastabend X-Patchwork-Id: 859504 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="UrirvagM"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zHrMc751Wz9t2l for ; Fri, 12 Jan 2018 16:07:08 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754210AbeALFHG (ORCPT ); Fri, 12 Jan 2018 00:07:06 -0500 Received: from mail-pf0-f193.google.com ([209.85.192.193]:38256 "EHLO mail-pf0-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754125AbeALFHF (ORCPT ); Fri, 12 Jan 2018 00:07:05 -0500 Received: by mail-pf0-f193.google.com with SMTP id k19so3614578pfj.5 for ; Thu, 11 Jan 2018 21:07:05 -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=guMvw2lzAwXrREUbNntvldVyJ75Z5/ta4TJ9MI7fkWQ=; b=UrirvagM+ySb1pSSho//XMTZsDEZu1p0oRMjkArcHGWnaW5ltgWlakHtPhNR0R74uW 4361Tz+sRCENYgeVGX3FhqYBj+XkHW/frfs1mWxvdwp9BkAR9w4siB+xHnDzbTJOGjlw sek8Mvc8gQwafiD/zkGjNUU6ABC66rS7LZG0cl6bkPVgbfbdtJ8p+Ek9aTQEcoRMxUUE YBBqkUnb21u0fQwe63e2qKEAkYxdb9nPyTSju+Yh30D/7BEWozFMNnkJ9HcNJomxMgAs V5Hsp/t4pSmMLTHb10TND2PSJLFSX21iNKlHfUJu+gX8Ufg5DAoU28nMaJJqJSLbSY0P cMRg== 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=guMvw2lzAwXrREUbNntvldVyJ75Z5/ta4TJ9MI7fkWQ=; b=XZX3R9k5Sykf4KjkGFtQV5DRj3Ez4KCfFy6ia70fSDVLncOaPjBIBTHolgGoFnM/9M UQQ1Fydgt+/t0uDevuj2gOCNfztLNX5b1+d9xgXpc9+Ye2mj/BahVI8CP2EKhDWd7xT9 2Nztqc6MJjfDyXprNfuT05g5Se2hqa46YeA6/9OivC2a0CNcqHjGLYNICkeV/xhurldy 3YTr3Qs1C3o6Z2m43+rZbkSQCnwwRNpjewWZrtMv4LdoyRCr/llgEJgriiK0WXApY5+9 +qrasCtaeh3He4M+yhRYduhVTCnypTaTOXslWZIGvRmAR6/blBoHvR/Uq8bw23rEF5qw tPjQ== X-Gm-Message-State: AKGB3mI9p9yO8hEW5ErLDP1KImaLQOK4rOaJ8pzaPTBunlxcb4DzI1XP hq2Cx5ZQ4aRGhfCssRbFXf/umw== X-Google-Smtp-Source: ACJfBouWdwhX3eYQdYTqLx7iHXYy9xEHUoMzAegGE+sWCppv+oN8wQWCg5GmIUzSthPc6vK/2/qyyw== X-Received: by 10.84.137.169 with SMTP id 38mr25400357pln.246.1515733624893; Thu, 11 Jan 2018 21:07:04 -0800 (PST) Received: from [127.0.1.1] ([75.106.27.153]) by smtp.gmail.com with ESMTPSA id m22sm42965878pfg.120.2018.01.11.21.06.59 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 11 Jan 2018 21:07:04 -0800 (PST) Subject: [bpf-next PATCH v3 3/7] bpf: sockmap sample, use fork() for send and recv From: John Fastabend To: borkmann@iogearbox.net, john.fastabend@gmail.com, ast@kernel.org, kafai@fb.com Cc: netdev@vger.kernel.org Date: Thu, 11 Jan 2018 21:06:54 -0800 Message-ID: <20180112050654.5823.91255.stgit@john-Precision-Tower-5810> In-Reply-To: <20180112050243.5823.85987.stgit@john-Precision-Tower-5810> References: <20180112050243.5823.85987.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 Acked-by: Martin KaFai Lau Acked-by: Martin KaFai Lau --- samples/sockmap/sockmap_user.c | 58 +++++++++++++++++++++++++++++----------- 1 file changed, 42 insertions(+), 16 deletions(-) diff --git a/samples/sockmap/sockmap_user.c b/samples/sockmap/sockmap_user.c index 8ec7dbf..bbe9587 100644 --- a/samples/sockmap/sockmap_user.c +++ b/samples/sockmap/sockmap_user.c @@ -23,6 +23,7 @@ #include #include #include +#include #include #include @@ -195,7 +196,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) @@ -274,25 +275,50 @@ 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); + shutdown(p2, SHUT_RDWR); + shutdown(p1, SHUT_RDWR); + exit(1); + } else if (rxpid == -1) { + perror("msg_loop_rx: "); + return 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); + shutdown(c1, SHUT_RDWR); + 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 Fri Jan 12 05:07:10 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Fastabend X-Patchwork-Id: 859505 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="b+HlvvyT"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zHrMy5rmgz9t2l for ; Fri, 12 Jan 2018 16:07:26 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754216AbeALFHY (ORCPT ); Fri, 12 Jan 2018 00:07:24 -0500 Received: from mail-pf0-f195.google.com ([209.85.192.195]:33122 "EHLO mail-pf0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750714AbeALFHX (ORCPT ); Fri, 12 Jan 2018 00:07:23 -0500 Received: by mail-pf0-f195.google.com with SMTP id y89so3609167pfk.0 for ; Thu, 11 Jan 2018 21:07:23 -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=BNI1koNrC9N5UFEv/QtK0GJhrk+yEGyFObxc9uyfq44=; b=b+HlvvyT5SdJR4Yvsq2C/eptCFOoyu5K47/HR8MpVjleCY0er3e1E8ww0KpJTyOad9 n3M3aro+m0/leP/ltfuNcWK0+1lGirM8wkHzQE2eEQc5WxB/VNUFt1Ed1NRkcfzOKcoW Hvlw8nrWz9EC1OqrYaZryecHGo2lRn2BbgYwwdDV0MKY0Jb/p1DMtT9sMOHNZosuJybI 4rBaCvNcw2RF45FVqlxsc/9mlcOAMUKu5p8UJzNFssXpF0qAL+1CAKILoVDh3axiD3O8 YQyWnA/1sKKTLqae1R4jD2HY57e0cRVghkF/ewA01BJpizEIYiKfG4BVQF/VeGR/lQ2v 99bQ== 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=BNI1koNrC9N5UFEv/QtK0GJhrk+yEGyFObxc9uyfq44=; b=oFscWIQTf5WET7V7d8TX9YhAhJJxtD8Qkqw0V5x/W147DWLukCjBIu5gjK5WF3UkoZ +azmzXpDJ6yaIGCY4lgTNZeaWONaM2rsojgeoWBoIx5d1Ts+KoOEaHFCYLm6Vv/rP7Gw BrpU5J7OeUoI4wR98MBHpTxUHZsIzG97Grb88hN5cPaDDG+85QKmKgRydqzLD5RJwtTo 2BwFrOTd3Cb2SqzntNqPBsycApVqHHcckJlayoIguDUR39j/fbq0RY1pCaPqBHRVQzmQ MJQvAS1ZIgtX3PYlyHR9RubcxRtD4qbQwdYHHIfXFppLDU06feJ3IRq3C1SNUvP6vVPV pm4g== X-Gm-Message-State: AKGB3mIi8GI8+7Dn3y7jKI5EfmqKS0GkPx4gygwea2iFBuwHf+rKtsby LzZx1UkL+B+UovqlHuniYZRWJQ== X-Google-Smtp-Source: ACJfBouG+tGBdY1L0LNyuWEiL9YidiQooI4ob0ftu9zMvVApMwgGYYybhOmWxkFTZv0CiigK7m5UXQ== X-Received: by 10.84.246.131 with SMTP id m3mr24333535pll.50.1515733643049; Thu, 11 Jan 2018 21:07:23 -0800 (PST) Received: from [127.0.1.1] ([75.106.27.153]) by smtp.gmail.com with ESMTPSA id 15sm16077254pfi.97.2018.01.11.21.07.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 11 Jan 2018 21:07:22 -0800 (PST) Subject: [bpf-next PATCH v3 4/7] bpf: sockmap sample, report bytes/sec From: John Fastabend To: borkmann@iogearbox.net, john.fastabend@gmail.com, ast@kernel.org, kafai@fb.com Cc: netdev@vger.kernel.org Date: Thu, 11 Jan 2018 21:07:10 -0800 Message-ID: <20180112050710.5823.76043.stgit@john-Precision-Tower-5810> In-Reply-To: <20180112050243.5823.85987.stgit@john-Precision-Tower-5810> References: <20180112050243.5823.85987.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 Acked-by: Martin KaFai Lau --- 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 bbe9587..442fc00 100644 --- a/samples/sockmap/sockmap_user.c +++ b/samples/sockmap/sockmap_user.c @@ -24,6 +24,7 @@ #include #include #include +#include #include #include @@ -189,14 +190,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) @@ -218,6 +221,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); @@ -228,6 +232,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; @@ -235,6 +240,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; @@ -246,15 +254,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); goto out_errno; } else if (!slct) { fprintf(stderr, "unexpected timeout\n"); + clock_gettime(CLOCK_MONOTONIC, &s->end); goto out_errno; } recv = recvmsg(fd, &msg, flags); if (recv < 0) { if (errno != EWOULDBLOCK) { + clock_gettime(CLOCK_MONOTONIC, &s->end); perror("recv failed()\n"); goto out_errno; } @@ -262,6 +273,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++) @@ -273,11 +285,14 @@ static int msg_loop(int fd, int iov_count, int iov_length, int cnt, return errno; } +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; @@ -288,10 +303,16 @@ 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); shutdown(p2, SHUT_RDWR); shutdown(p1, SHUT_RDWR); + 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: "); @@ -305,9 +326,15 @@ 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); shutdown(c1, SHUT_RDWR); + 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 Fri Jan 12 05:07:29 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Fastabend X-Patchwork-Id: 859506 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="WYkzoqFi"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zHrNH0qCnz9t2l for ; Fri, 12 Jan 2018 16:07:43 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754244AbeALFHl (ORCPT ); Fri, 12 Jan 2018 00:07:41 -0500 Received: from mail-pf0-f194.google.com ([209.85.192.194]:38326 "EHLO mail-pf0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750714AbeALFHk (ORCPT ); Fri, 12 Jan 2018 00:07:40 -0500 Received: by mail-pf0-f194.google.com with SMTP id k19so3615795pfj.5 for ; Thu, 11 Jan 2018 21:07:40 -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=wgHDUF1+OeWGHbYTpadndSiqIVmnD+BDwUvFM45fFjc=; b=WYkzoqFiq3Y1kZ+DEgxJg4HOWFWFDWDu7dxNZpgz1vz3BqgBLjp8YH5fYuNCrD5KIY k5hYadKWMNcXmng4yerGyTn644L1YIwXk5QxxhuNrKZwrbAiCOM1IUQzHgyRlIRpEmi3 NUeFoVJOnXS8yJfz4Zg4dgEbMMqVOjs0i6ERgURLIxQhuR3cCy+8eg+pOpYALlutk0PI 94ljq0SIsJ99HxgHqX1ksm20WxR7AGg/LLshr2tuSw7YXwiIa5hfporgiRNCEtyO7+/J XwIxHJit+qEdBgnALENNJt2LZK0FBs/YbnI8XyJTfNCOGDhJTuAkwolJYcDmMugRVUxv OSDg== 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=wgHDUF1+OeWGHbYTpadndSiqIVmnD+BDwUvFM45fFjc=; b=JdDUvjvvHjGkLZSJv+0Htxfvsp7KRyM0GVLaMtnTN0CwMX9jW5J82nRytYXnlWPJ12 zLxSdo4tnUqUhelhuRy+B6YkNTycdVzBBT3aUEf/00itqhbmTZ9DJOpfAKf0r21L10Qm Xt2RoovOGJPU9v5uo8RXfBpV3QEgNBbAqK/6V448HlK4chwlBmmG6IXd4CnpikW0uI17 zJgB95lkuINwRUtjCRgr9HfSvzC2//SVCXf+MSORRA6kRvNoHMjYifFeEVAJ8p0g3EQ3 bc+IryU3tX1pDRzb2KU2eHkFAw0atzqcYsBAQL64WcLZlexs/RvKrB6lrWbbtjP2Z0YG 4xzw== X-Gm-Message-State: AKwxytfx46TKFmxNL2IYNUMa3b0A0R4BJjOQzj7u7ViarjT4AWRlubP6 X9uypeDfYoU56pYZvYqhYYLFrQ== X-Google-Smtp-Source: ACJfBovNbMD2JBdmvsbMxm4uurDZsrQhHi+rBEqNXVn/UonZAT29Dl6lxmRnG82HXWXI6mgbaBd5TA== X-Received: by 10.159.247.135 with SMTP id e7mr4586173pls.156.1515733659579; Thu, 11 Jan 2018 21:07:39 -0800 (PST) Received: from [127.0.1.1] ([75.106.27.153]) by smtp.gmail.com with ESMTPSA id t69sm5549634pfa.180.2018.01.11.21.07.34 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 11 Jan 2018 21:07:38 -0800 (PST) Subject: [bpf-next PATCH v3 5/7] bpf: sockmap sample add base test without any BPF for comparison From: John Fastabend To: borkmann@iogearbox.net, john.fastabend@gmail.com, ast@kernel.org, kafai@fb.com Cc: netdev@vger.kernel.org Date: Thu, 11 Jan 2018 21:07:29 -0800 Message-ID: <20180112050728.5823.19190.stgit@john-Precision-Tower-5810> In-Reply-To: <20180112050243.5823.85987.stgit@john-Precision-Tower-5810> References: <20180112050243.5823.85987.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 Acked-by: Martin KaFai Lau --- 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 442fc00..c3295a7 100644 --- a/samples/sockmap/sockmap_user.c +++ b/samples/sockmap/sockmap_user.c @@ -287,18 +287,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", @@ -427,6 +433,7 @@ static int forever_ping_pong(int rate, int verbose) enum { PING_PONG, SENDMSG, + BASE, }; int main(int argc, char **argv) @@ -466,6 +473,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; @@ -491,6 +500,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)); @@ -522,6 +535,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); @@ -531,7 +545,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 Fri Jan 12 05:07:45 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Fastabend X-Patchwork-Id: 859507 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="CVNbBhWS"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zHrNc1szCz9t2l for ; Fri, 12 Jan 2018 16:08:00 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754285AbeALFH6 (ORCPT ); Fri, 12 Jan 2018 00:07:58 -0500 Received: from mail-pg0-f66.google.com ([74.125.83.66]:43063 "EHLO mail-pg0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754255AbeALFH5 (ORCPT ); Fri, 12 Jan 2018 00:07:57 -0500 Received: by mail-pg0-f66.google.com with SMTP id f14so3861519pga.10 for ; Thu, 11 Jan 2018 21:07:57 -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=PlrVOKjjJsVvjc5v09Am2e9EzAjVsUN+ssLcnFMhKvA=; b=CVNbBhWSD3kfJMv+kCwefghj7FFQsCv24FOnSP5DRAIfocjSO0chmPeZVtiWTfzoeG mOPvbTEhL+maWNgglOcVEby13V4T+2MgdBS5Cz5t2DYmiRm4y8Yj50MSzwhIAaIN885F Hh2vHS2DneIQ/eTtdKbh6eroNxymU59SIxqNHeKueNf8sUiJlN5ytZezk2ewv4whimkx qmVmAa7LQjWP7p+rfU/X9uGxYEoSfW+VcSkM09iA6dboazd8O8Zfiu4UWbFATfYVd21l dbp7SRZuD/0P2xJS7hOAAAdpekV4gvxZTK9x94EwcQqwGz3Svsxg0ScBrUwB477Gkf7D ednw== 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=PlrVOKjjJsVvjc5v09Am2e9EzAjVsUN+ssLcnFMhKvA=; b=cBG5BPSBY+Ze1/Oh0yxQmksPi7K3C3K4LZxz1Jy9V4x2uJHmEE88oVuGN5lbzNA3Ip ukc0FfEwzE+6X3g2gL3crxYaFKVqdGAtABVu48FojKD+FyEmdV9+PVAGx8hg3ZnQ4FjA YbV95QjU5dpCXtX9wr9QCc50QbFs++PYPj4ib9aXh0JU1YEGSLoSRy6Nlx6vHIHWL/Ga lqWZfVCS9oQme6n8unkzS+9/MZdaW2ZZW9MK+ms3m6qDNrZw9yx9VWCwKGqT9vy2ge/Y OZ6qSTlDrEFSI0pjG9Itqy+psoDI8Iq6SkVGo+gGp5wDIl7undnO9FdbfBbcguA0A4J5 V5ow== X-Gm-Message-State: AKwxyte1w19T6gEzyETnk550XCIPc615v2YWPIG1DHNTblXFK927Yxxh h9g7LlQGXs5nCJEPbz/hgpKTyw== X-Google-Smtp-Source: ACJfBot0Z++gx6T67bqOBSD/2w+4jSni0RX/Bfnh6aaluy+ksIb4IDXd3wUfKMD7/hydkk7mmvv2yg== X-Received: by 10.84.178.37 with SMTP id y34mr1905702plb.399.1515733676659; Thu, 11 Jan 2018 21:07:56 -0800 (PST) Received: from [127.0.1.1] ([75.106.27.153]) by smtp.gmail.com with ESMTPSA id q6sm39512210pgv.72.2018.01.11.21.07.51 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 11 Jan 2018 21:07:56 -0800 (PST) Subject: [bpf-next PATCH v3 6/7] bpf: sockmap put client sockets in blocking mode From: John Fastabend To: borkmann@iogearbox.net, john.fastabend@gmail.com, ast@kernel.org, kafai@fb.com Cc: netdev@vger.kernel.org Date: Thu, 11 Jan 2018 21:07:45 -0800 Message-ID: <20180112050745.5823.94244.stgit@john-Precision-Tower-5810> In-Reply-To: <20180112050243.5823.85987.stgit@john-Precision-Tower-5810> References: <20180112050243.5823.85987.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 Acked-by: Martin KaFai Lau --- 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 c3295a7..818766b 100644 --- a/samples/sockmap/sockmap_user.c +++ b/samples/sockmap/sockmap_user.c @@ -109,7 +109,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 Fri Jan 12 05:08:02 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: John Fastabend X-Patchwork-Id: 859508 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="IYvlnH/7"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3zHrNw3sHPz9t3B for ; Fri, 12 Jan 2018 16:08:16 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754350AbeALFIO (ORCPT ); Fri, 12 Jan 2018 00:08:14 -0500 Received: from mail-pf0-f194.google.com ([209.85.192.194]:40028 "EHLO mail-pf0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754316AbeALFIN (ORCPT ); Fri, 12 Jan 2018 00:08:13 -0500 Received: by mail-pf0-f194.google.com with SMTP id i66so3611173pfd.7 for ; Thu, 11 Jan 2018 21:08:13 -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=pZpNZwK7VOYBJlRiLuYzQwacCmlPRdtaV5avZ1wlMho=; b=IYvlnH/7Bf4d50sC6o7WDz7VyI3oju9Pf7LQmF9tY/wBCmRIL/qKa2P/DIDICdnjxe R0Zwg87SoRzTOrHnt9xmLmu8AZtRvLakjQEFUg8+W7huTg93/2KFucz02hnnGnMN3wOQ Q785rtgha8nBRwi5lzFdzYsGHp/3rwzyIPI6UiA/7usk3ylXkbqgaXF+qtZqd2Lu41c9 T/4MVcAM6+MY+Fcq+1rdPXIEImgGplXr+paLAMUJgTYjXVd7kh6EQdRJwV9uzo/n8O1x +GDNsnaFYUOyalL9B82Pd8EPnVlucxzKZiYScvIwGZ8IdBEofolI/I1Ql2ojDghlPCOK bJVg== 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=pZpNZwK7VOYBJlRiLuYzQwacCmlPRdtaV5avZ1wlMho=; b=F7Ft26M6pSMlz0EwsxtJ+bzCFK6279WWpt/7G3ZNNJ0HHVTCpUv0XNPrf0gmUYlqV6 OKNT8ABi8a3Xb+dh9jpDKZPB374rLUzMUJnw+/rlO0M0zgk00WTV/d2b4zKkdbcRmiNa n6+jGG16Uy9UxviLP3REiVuNaoCIN4oYhwojYRDW+9MBYZDzkaPV/+ZLer0wXWUjT5S5 cOLGeJSX9yja8Wg0WUiFwVQQXOcYLlRJWl3Wlz5KoxEb82ZtnwoXwgpoM9X1bTs38B0J 0UwPvYOuSnXTG9hpAaq1lTJRGslNkHah2IaqukPd6Q2uKT05iPd3ZCrGCt4YFTcsRnpq Py+g== X-Gm-Message-State: AKwxytdzEiLjXAB86343px8AeqtVjXisqRYWpfnVlTJUWGurWNTc81ie rgFPYNkJH/jigiQFmt6Ab6Uvcw== X-Google-Smtp-Source: ACJfBovU4vXi3qjsvEgKasAB9+z/E6a1xYeLQxRmr8MfObXZHWMFbGQEWMukmlGe9m7ojLD/scvzfg== X-Received: by 10.84.245.132 with SMTP id j4mr6198194pll.199.1515733692436; Thu, 11 Jan 2018 21:08:12 -0800 (PST) Received: from [127.0.1.1] ([75.106.27.153]) by smtp.gmail.com with ESMTPSA id 68sm41088176pfx.186.2018.01.11.21.08.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 11 Jan 2018 21:08:11 -0800 (PST) Subject: [bpf-next PATCH v3 7/7] bpf: sockmap set rlimit From: John Fastabend To: borkmann@iogearbox.net, john.fastabend@gmail.com, ast@kernel.org, kafai@fb.com Cc: netdev@vger.kernel.org Date: Thu, 11 Jan 2018 21:08:02 -0800 Message-ID: <20180112050802.5823.93014.stgit@john-Precision-Tower-5810> In-Reply-To: <20180112050243.5823.85987.stgit@john-Precision-Tower-5810> References: <20180112050243.5823.85987.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 Acked-by: Martin KaFai Lau --- 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 818766b..a6dab97 100644 --- a/samples/sockmap/sockmap_user.c +++ b/samples/sockmap/sockmap_user.c @@ -27,6 +27,7 @@ #include #include +#include #include #include @@ -439,6 +440,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]; @@ -493,6 +495,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;