From patchwork Thu Aug 3 18:20:32 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Lobakin X-Patchwork-Id: 13096 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:9f41:0:b0:3e4:2afc:c1 with SMTP id v1csp1337481vqx; Thu, 3 Aug 2023 11:42:08 -0700 (PDT) X-Google-Smtp-Source: APBJJlGZxMYHYziVNy+Xche6sbwZEmk9WQ4KQUkVLOTlgf692KVYoTAWSkZKsmAEwCM11ow6oYHx X-Received: by 2002:a2e:9ac2:0:b0:2b6:ea3b:f082 with SMTP id p2-20020a2e9ac2000000b002b6ea3bf082mr8499126ljj.38.1691088128374; Thu, 03 Aug 2023 11:42:08 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1691088128; cv=none; d=google.com; s=arc-20160816; b=HiE89meEpORFYXZ3OH4IfTJBYCsXCBTZwef7sl90AKzcmUrgWIaCrzLFTKOv3RaRav uDIWAsMRbq/BnJGB3rDEtcXwexb+q/MQEJsRrkcyurjCIF9sHOU/eYiwWxQ/DkgQ+EMN Bd9wFSQ4+FgA7b6RLO51q2uOkOyZor4yQ5jPpSiEL1Lq+h4omcnwjq9bGQsHwyoAP1MH cyiIMHggFqvAFCXyXyxw2ue1+TRiu/otDCpUQdC5ULBExicxjqCKquhKS05Q96eO4IYb 4D4ttaUES9bxAu02BTjq6c0UqB0A/UAfA3C8NPJkZfXobT1VyExQXpIElcj1S/51/QAH U7Cg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=PQcq++jUVlzHlrYz38o0BR4hUjvGgFQL9JNA3a4d0uo=; fh=3HE1xXs4s0z3NpKSg+MkyPw1+1QpKlxno2HY1HR9bAc=; b=Uk9LjPzjSxY46pOY2dLEXlBPwWs23lfVi5TLgevbpdBcMX/XmtU++wpPslNXDsX6x3 2puY/3B4uFWjiro1yAI4aPdoGAOZUqxN/6eFNHhlKeUaSObWoJ69WDScvrPIa0yR0Ehy rA4+QhOpJHCK+YMbBVEUr3uawj0zX8BOJFASrLcr7mJqD5E8r1cZeYcenMTuRtmX/abK Vy9JDGL/e8PiKOHnFrhG9XP5vEmAcFr4ii8KDsFXBMZPXZcjSlnz40qt/kmmJQt6JyKZ qA6RfxxKIKBvgNbmRbpE8RlFWlhd3qPRo+vbzpfIjJLsi1ZkVlZD1NQtQLW1UD270c7a 8Beg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="IJ/XjaDp"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id a3-20020a170906274300b0099bcd7088dcsi322576ejd.0.2023.08.03.11.41.44; Thu, 03 Aug 2023 11:42:08 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@intel.com header.s=Intel header.b="IJ/XjaDp"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230424AbjHCSVO (ORCPT + 99 others); Thu, 3 Aug 2023 14:21:14 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:47302 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229939AbjHCSUp (ORCPT ); Thu, 3 Aug 2023 14:20:45 -0400 Received: from mgamail.intel.com (mgamail.intel.com [134.134.136.31]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0EB20110; Thu, 3 Aug 2023 11:20:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1691086844; x=1722622844; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=RWJzfm/Xt7VqAdgAmvEq0+En0/9OUFl34luIQe+uKMQ=; b=IJ/XjaDpyF9Ld/bcgaA76OzlMm9gHd6blm1wBtjIKQ5YpYfrWnDDE0ks sT/pESsw2FbyQHsnAAVhPWeYop7rBBk/AMIaQ02lKFgOhgJnmkktWmrGb IUnRkNp+rtGBeya+dp9joBedaY/vltF9RCf/cfgSbdgD0Kt049wurK7Uo 1xSexxiq2WkWaa/U5jeRqND36MbltDtmmxBUynAINd53bnc4FQf05dcFN Wvc5NqR9vvHap3dJG0qduWtk4Hei18ipTSRg/x3nfoXWttJa7hJ9WXaMC XF7Iv7hLG/d17OpD+sXJVshwiXssnRqwscMvywxX3yOq980CQY55mW4G4 A==; X-IronPort-AV: E=McAfee;i="6600,9927,10791"; a="433811781" X-IronPort-AV: E=Sophos;i="6.01,252,1684825200"; d="scan'208";a="433811781" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga104.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 03 Aug 2023 11:20:43 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10791"; a="764784515" X-IronPort-AV: E=Sophos;i="6.01,252,1684825200"; d="scan'208";a="764784515" Received: from newjersey.igk.intel.com ([10.102.20.203]) by orsmga001.jf.intel.com with ESMTP; 03 Aug 2023 11:20:39 -0700 From: Alexander Lobakin To: "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni Cc: Alexander Lobakin , Maciej Fijalkowski , Larysa Zaremba , Yunsheng Lin , Alexander Duyck , Jesper Dangaard Brouer , Ilias Apalodimas , Simon Horman , netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH net-next v3 0/6] page_pool: a couple of assorted optimizations Date: Thu, 3 Aug 2023 20:20:32 +0200 Message-ID: <20230803182038.2646541-1-aleksander.lobakin@intel.com> X-Mailer: git-send-email 2.41.0 MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_NONE,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1773234424926929797 X-GMAIL-MSGID: 1773234424926929797 That initially was a spin-off of the IAVF PP series[0], but has grown (and shrunk) since then a bunch. In fact, it consists of three semi-independent blocks: * #1-2: Compile-time optimization. Split page_pool.h into 2 headers to not overbloat the consumers not needing complex inline helpers and then stop including it in skbuff.h at all. The first patch is also prereq for the whole series. * #3: Improve cacheline locality for users of the Page Pool frag API. * #4-6: Use direct cache recycling more aggressively, when it is safe obviously. In addition, make sure nobody wants to use Page Pool API with disabled interrupts. Patches #1 and #5 are authored by Yunsheng and Jakub respectively, with small modifications from my side as per ML discussions. For the perf numbers for #3-6, please see individual commit messages. Also available on my GH with many more Page Pool goodies[1]. [0] https://lore.kernel.org/netdev/20230530150035.1943669-1-aleksander.lobakin@intel.com [1] https://github.com/alobakin/linux/commits/iavf-pp-frag Alexander Lobakin (4): net: skbuff: don't include to page_pool: place frag_* fields in one cacheline net: skbuff: avoid accessing page_pool if !napi_safe when returning page net: skbuff: always try to recycle PP pages directly when in softirq Jakub Kicinski (1): page_pool: add a lockdep check for recycling in hardirq Yunsheng Lin (1): page_pool: split types and declarations from page_pool.h MAINTAINERS | 2 +- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 2 +- drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c | 2 +- drivers/net/ethernet/engleder/tsnep_main.c | 1 + drivers/net/ethernet/freescale/fec_main.c | 1 + .../net/ethernet/hisilicon/hns3/hns3_enet.c | 1 + .../net/ethernet/hisilicon/hns3/hns3_enet.h | 2 +- drivers/net/ethernet/marvell/mvneta.c | 2 +- drivers/net/ethernet/marvell/mvpp2/mvpp2.h | 2 +- .../net/ethernet/marvell/mvpp2/mvpp2_main.c | 1 + .../marvell/octeontx2/nic/otx2_common.c | 1 + .../ethernet/marvell/octeontx2/nic/otx2_pf.c | 1 + drivers/net/ethernet/mediatek/mtk_eth_soc.c | 1 + drivers/net/ethernet/mediatek/mtk_eth_soc.h | 2 +- .../ethernet/mellanox/mlx5/core/en/params.c | 1 + .../net/ethernet/mellanox/mlx5/core/en/trap.c | 1 - .../net/ethernet/mellanox/mlx5/core/en/xdp.c | 1 + .../net/ethernet/mellanox/mlx5/core/en_main.c | 2 +- .../net/ethernet/mellanox/mlx5/core/en_rx.c | 2 +- .../ethernet/mellanox/mlx5/core/en_stats.c | 2 +- .../ethernet/microchip/lan966x/lan966x_fdma.c | 1 + .../ethernet/microchip/lan966x/lan966x_main.h | 2 +- drivers/net/ethernet/socionext/netsec.c | 2 +- drivers/net/ethernet/stmicro/stmmac/stmmac.h | 2 +- .../net/ethernet/stmicro/stmmac/stmmac_main.c | 1 + drivers/net/ethernet/ti/cpsw.c | 2 +- drivers/net/ethernet/ti/cpsw_new.c | 2 +- drivers/net/ethernet/ti/cpsw_priv.c | 2 +- drivers/net/ethernet/wangxun/libwx/wx_lib.c | 2 +- drivers/net/veth.c | 2 +- drivers/net/wireless/mediatek/mt76/mac80211.c | 1 - drivers/net/wireless/mediatek/mt76/mt76.h | 1 + drivers/net/xen-netfront.c | 2 +- include/linux/lockdep.h | 7 + include/linux/skbuff.h | 5 +- .../net/{page_pool.h => page_pool/helpers.h} | 246 +----------------- include/net/page_pool/types.h | 236 +++++++++++++++++ include/trace/events/page_pool.h | 2 +- net/bpf/test_run.c | 2 +- net/core/page_pool.c | 43 +-- net/core/skbuff.c | 49 +++- net/core/xdp.c | 2 +- 42 files changed, 337 insertions(+), 307 deletions(-) rename include/net/{page_pool.h => page_pool/helpers.h} (50%) create mode 100644 include/net/page_pool/types.h --- From v2[2]: * just rebase on top of Jakub's kdoc changes landed last minute. From v1[3]: * move the "avoid calling no-op DMA sync ops" piece out of the series -- will join some other or transform into something else (Jakub et al.); * #1: restore accidentally removed path in MAINTAINERS (Yunsheng); * #1: prefer `include/net/page_pool/` over `include/net/page_pool/*` in MAINTAINERS (Yunsheng); * #2: rename page_pool_return_skb_page() to napi_pp_put_page() -- the old name seems to not make any sense for some time already (Yunsheng); * #2: guard napi_pp_put_page() with CONFIG_PAGE_POOL in skbuff.c (to not compile it when there are no users) (Yunsheng). From RFC v2[4]: * drop the dependency on the hybrid allocation series (and thus the "RFC" prefix) -- it wasn't a strict dep and it's not in the trees yet; * add [slightly reworked] Yunsheng's patch which splits page_pool.h into 2 headers -- merge conflict hell otherwise. Also fix a typo while nobody looks (Simon); * #3 (former #2): word the commitmsg a bit better, mention the main reason for the change more clearly (Ilias); * add Jakub's hardirq assertion as a prereq for the last patch; * #9 (former #7): add comment mentioning that the hardirq case is not checked due to the assertion checking it later (yes, it is illegal to use Page Pool with the interrupts disabled or when in TH) (Jakub). From RFC v1[5]: * #1: move the entire function to skbuff.c, don't try to split it (Alex); * #2-4: new; * #5: use internal flags field added in #4 and don't modify driver-defined structure (Alex, Jakub); * #6: new; * drop "add new NAPI state" as a redundant complication; * #7: replace the check for the new NAPI state to just in_softirq(), should be fine (Jakub). [2] https://lore.kernel.org/netdev/20230803164014.993838-1-aleksander.lobakin@intel.com [3] https://lore.kernel.org/netdev/20230727144336.1646454-1-aleksander.lobakin@intel.com [4] https://lore.kernel.org/netdev/20230714170853.866018-1-aleksander.lobakin@intel.com [5] https://lore.kernel.org/netdev/20230629152305.905962-1-aleksander.lobakin@intel.com