From patchwork Wed Dec 26 20:27:52 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: William Tu X-Patchwork-Id: 1018732 X-Patchwork-Delegate: bpf@iogearbox.net 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="WZAiDi6I"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 43Q4L61wsJz9s3l for ; Thu, 27 Dec 2018 07:28:30 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727797AbeLZU22 (ORCPT ); Wed, 26 Dec 2018 15:28:28 -0500 Received: from mail-pl1-f195.google.com ([209.85.214.195]:36749 "EHLO mail-pl1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727674AbeLZU2Z (ORCPT ); Wed, 26 Dec 2018 15:28:25 -0500 Received: by mail-pl1-f195.google.com with SMTP id g9so7897136plo.3 for ; Wed, 26 Dec 2018 12:28:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id:in-reply-to:references; bh=KBTn+8dsvS6Ket37B9sbkPQt2QppL5cxtBOM4iUJIRU=; b=WZAiDi6IcJMxOrW48pWl2syG3vXGzO7d53sg3QIrvDZgtuZmtETTlwpXEogLtZPEZD CDTu+WGotxu3mGnAHXyO5gSk1GDAEtq4TMz78rljvxezkhtAEIKKHdI/UQRbO4Yz/uxf 6OdH8Fi5GbD9ecZNZP9zg6DVHIzcQg8ulCPsi9CNx1qLdKxx7NNnRM06p7l0kE5k19uR GvUqHy5cm5IfC71knjwJeD0WCTI1opg0Y0rcNFMz3lWPE4RgzDvWC/NW++npk/B1at8F 77QnC8o8bAftGO9hUiPEIir7hUvyQHv7u4taTYEZR3AeXj+EZW6YYvKnTZMX6vWOz93f pomw== 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:in-reply-to :references; bh=KBTn+8dsvS6Ket37B9sbkPQt2QppL5cxtBOM4iUJIRU=; b=T4R5sojCuZJFASr92aP5WDSqm+90dKAOEoCREe0EYHNy8wh2PAAhHIVCxg0F5Ut1we 2BOxL4lSJzkaJYK40F1nnkW9ZgCFITdLipVBk7fL7mAr86o8AQs7u1JA54qkULISiuYl y/sY2CKJb8wmZlV1jtlnzkbWrWAgjOIDYfys2RJTyJGYl1S1tBSzQb2m11JNafH5M5GJ 5W0bihcVMK9uY+0kPMKqVTtE8pDegsvoTzgrsE+9GPv49sUe4YIn/45paiP3oAxJWBJi BesXhV6AZSRCJafixQrXmeCkMImnDzfE8exOGKLFNa/GTd9z/jWsfFcDlTf//BnL40z2 M6Nw== X-Gm-Message-State: AJcUukcSXNto98/7D5kB3/yvohA4s3rPJTPhEGgJ6dnx4eXGFPXkwqOj /LPg5nukaCooqexlFBuB4Lk= X-Google-Smtp-Source: ALg8bN7SFFcKRxxfu3+GcZhWmX8OhbsICV4h+Y87xhwUxNTxg07qSHG9izBZ0vqN6BKg+a7HQh9avg== X-Received: by 2002:a17:902:8641:: with SMTP id y1mr21019652plt.159.1545856104327; Wed, 26 Dec 2018 12:28:24 -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.23 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 26 Dec 2018 12:28:23 -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 5/6] veth: add AF_XDP RX support. Date: Wed, 26 Dec 2018 12:27:52 -0800 Message-Id: <1545856073-8680-6-git-send-email-u9012063@gmail.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1545856073-8680-1-git-send-email-u9012063@gmail.com> References: <1545856073-8680-1-git-send-email-u9012063@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org If the receiving veth side has umem rx enabled, the patch directly copy the packet from the peer side's send buffer to the umem receive buffer. This requires running AF_XDP as both side of the veth peer. For example: Receiver: # ip netns exec at_ns0 xdpsock -r -N -z -i p0 Sender: # xdpsock -i p1 -t -N -z The performance increases from 1.4Mpps to 2.3Mpps. Signed-off-by: William Tu --- drivers/net/veth.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/drivers/net/veth.c b/drivers/net/veth.c index 551444195398..8aac67554880 100644 --- a/drivers/net/veth.c +++ b/drivers/net/veth.c @@ -766,11 +766,28 @@ static int veth_xsk_poll(struct napi_struct *napi, int budget) struct sk_buff *skb; struct page *page; void *vaddr; + u64 handle; u32 len; if (!xsk_umem_consume_tx_virtual(peer_rq->xsk_umem, &vaddr, &len)) break; + if (rq->xsk_umem && xsk_umem_peek_addr(rq->xsk_umem, &handle)) { + char *daddr; + u64 hr = 0; + + /* the peer side also has umem enabled, + * copy directly to it. + */ + handle &= rq->xsk_umem->chunk_mask; + hr = rq->xsk_umem->headroom + XDP_PACKET_HEADROOM; + daddr = xdp_umem_get_data(rq->xsk_umem, handle); + daddr += hr; + memcpy((void *)daddr, vaddr, len); + xsk_umem_discard_addr(rq->xsk_umem); + vaddr = daddr; + } + xdpf.data = vaddr + metasize; xdpf.len = len; xdpf.headroom = 0;