From patchwork Wed Dec 26 20:27:47 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: William Tu X-Patchwork-Id: 1018729 Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@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; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="E+cOCypw"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43Q4Kz2Wwhz9s3l for ; Thu, 27 Dec 2018 07:28:23 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727673AbeLZU2U (ORCPT ); Wed, 26 Dec 2018 15:28:20 -0500 Received: from mail-pg1-f193.google.com ([209.85.215.193]:45703 "EHLO mail-pg1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727513AbeLZU2U (ORCPT ); Wed, 26 Dec 2018 15:28:20 -0500 Received: by mail-pg1-f193.google.com with SMTP id y4so7909929pgc.12 for ; Wed, 26 Dec 2018 12:28:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=kzk+G01amZLNZ4oVbDu9gmyMXhWgy8V9VW4nI4cCCuI=; b=E+cOCypwuTKxnj7PCNgL29HUSTVvhYF+3G9EHco2Sep5lcwQ8VVTPNuYT1Hvtv5khn yXE4Q2vE63jtM/63eTZo2N1q2isUT7QCEAD97EAXtCIfkA8MjjmAAOnzaXx32ty50JfC mhZ/ge7xJ2y85SxSuoZvGQ65Wpd/Y+jhcLStE9GORs6PnstEoqGJu77/pQOG2IBHWAkq 3YZGj1SM558vYV5JjqGNXzbzVem3YT05MqGj1x8TNeaMDqYAN0HW0v/Uf8aidF5ceO1j K5CQoT8tDI3/Ks3uOyFuLZEwK9pFkMfwj3ED/yN5F23P2M9Nlo3FKNtI5obpKc53A6Xy u3Rw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:mime-version :content-transfer-encoding; bh=kzk+G01amZLNZ4oVbDu9gmyMXhWgy8V9VW4nI4cCCuI=; b=etbcUlzpvKp29N54MibGyeKQlQI0vTcQkV5ym/OotnVWiYYqp5+M+KMgwlYEcAq7v0 81uoYUlj7JWw55BkgEVWp8NQ69VAgmfeYWCiRv1IyTVLa9IVKsY5/z722GOqIFyS3NlZ vCQyCReIGmNnjn3mpwZx4vD960v8lGGKEuv0rCHVV145zFIIsSxrSCFY98kQ+go4ji2Y gtCbJyJT26H/tw0rDx1XrU8lq7mktld1soIIV+lpRi8wjCU9+fnhfT3gRK0oaPNQrO81 uDgLcLOdUZrbGYSQ/gdLEuv8y24C9uX9eTTNrXe9wmacphE1Hb09TgfZOiGjWQTCOapG KAZA== X-Gm-Message-State: AA+aEWaCMQ7lGgb/x/o33Hzt1iEvqU1SiI4NLchKCqQLUhLRiRvvAlCE qYDZvlZqxxdeWlB1oXEEwdk= X-Google-Smtp-Source: AFSGD/XNilYWsJ7+UaG2nJSQ5t4vOhIMA2Hes2ZTeqwiSXnP4rgaVjJn5OdrVY/Y2swl8ORnS8X2TQ== X-Received: by 2002:a62:4886:: with SMTP id q6mr22105866pfi.182.1545856099383; Wed, 26 Dec 2018 12:28:19 -0800 (PST) Received: from sc9-mailhost2.vmware.com ([66.170.99.1]) by smtp.gmail.com with ESMTPSA id t90sm72712460pfj.23.2018.12.26.12.28.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 26 Dec 2018 12:28:18 -0800 (PST) From: William Tu To: bjorn.topel@gmail.com, magnus.karlsson@gmail.com, ast@kernel.org, daniel@iogearbox.net, netdev@vger.kernel.org, makita.toshiaki@lab.ntt.co.jp, yihung.wei@gmail.com, magnus.karlsson@intel.com Subject: [PATCH bpf-next RFCv3 0/6] AF_XDP support for veth. Date: Wed, 26 Dec 2018 12:27:47 -0800 Message-Id: <1545856073-8680-1-git-send-email-u9012063@gmail.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org The patch series adds AF_XDP support for veth device. The first patch adds a new API for supporting non-physical NIC device to get packet's virtual address. The second patch implements the async xmit with one extra copy. The third and forth patches implement the zero copy AF_XDP TX support. The fifth patch implements the AF_XDP RX and last patch adds example use cases. I tested with 2 namespaces, one as sender, the other as receiver. The packet rate is measure at the receiver side. ip netns add at_ns0 ip link add p0 type veth peer name p1 ip link set p0 netns at_ns0 ip link set dev p1 up ip netns exec at_ns0 ip link set dev p0 up # receiver ip netns exec at_ns0 xdp_rxq_info --dev p0 --action XDP_DROP # receiver with AF_XDP ip netns exec at_ns0 xdpsock -i p0 -r -N -z # sender without AF_XDP ZC xdpsock -i p1 -t -S # sender with AF_XDP xdpsock -i p1 -t -N -z Without AF_XDP: 724 Kpps With AF_XDP: 1.1 Mpps (with ksoftirqd 100% cpu) With AF_XDP: 1.4 Mpps (with ksoftirqd 100% cpu) With both peer running AF_XDP: 2.4Mpps v2->v3: - refactor the xsk_umem_consume_tx_virtual, suggested by Björn Töpel - fix the racy condition by processing tx and its peer's rx napi, suggested by Björn Töpel - add AF_XDP zero copy TX - add AF_XDP RX v1->v2: - refactor the xsk_umem_consume_tx_virtual - use the umems provided by netdev - fix bug from locating peer side rq with qid William Tu (6): xsk: add xsk_umem_consume_tx_virtual. veth: support AF_XDP TX copy-mode. xsk: add new MEM type for virtual device. veth: add zero-copy AF_XDP TX support. veth: add AF_XDP RX support. samples: bpf: add veth AF_XDP example. drivers/net/veth.c | 212 ++++++++++++++++++++++++++++++++++++++++- include/net/xdp.h | 1 + include/net/xdp_sock.h | 7 ++ net/core/xdp.c | 1 + net/xdp/xdp_umem.c | 1 + net/xdp/xsk.c | 41 ++++++-- samples/bpf/test_veth_afxdp.sh | 82 ++++++++++++++++ 7 files changed, 336 insertions(+), 9 deletions(-) create mode 100755 samples/bpf/test_veth_afxdp.sh