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; }