Received: by 2002:a05:7412:37c9:b0:e2:908c:2ebd with SMTP id jz9csp2380150rdb; Thu, 21 Sep 2023 17:51:07 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFvBieo+zIymiuxFv9VGnhaXFvbhnx44m63Eb6r1/45kVh/S3oJtnnFLGU2+l9NCbigC/nk X-Received: by 2002:a05:6a00:2312:b0:68f:b015:ea99 with SMTP id h18-20020a056a00231200b0068fb015ea99mr1784295pfh.10.1695343867155; Thu, 21 Sep 2023 17:51:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695343867; cv=none; d=google.com; s=arc-20160816; b=ZTdJHccYhf8uiSYDd2OifHyYuNK00WpNTjhMjkOTH/wG4bzsQWmJfmgivgSZXLPYv4 btmuBitEBpR+v14Vc5pIkAFmx7Lu81nbRqEWqsyisgOXYM8mWwJ+9k2b3OqkxNrjfZNl RyS51fa/23J2rQ1PyK2o/lNU4hnnuJW91UR11K5JsMFwM25BBB+3vi43mY3kd5w3yAVH xzI1xheYbm7ajLl9zd1nInQEQknFoyhkRcpZuk2kc1dJwMJdFOa2XKFJIaq5SfgZmSfs gGmart95KCE9GsPoj67xniXdBrN1icv22zbd6zkwXzaLF2X7LpwRqTwp4JFjtuRfdQwK h6wQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=BLlJX9huq9ej0iAVLAlYlRkGYLAh3a+BqLGjUG3BDUo=; fh=E75f8n1lmKdky9pyl1B72dl1DbQz48jSmaiYJDhz67E=; b=Q9OsoD3YS5um9U0/HcHYm8GR1+MD3vQ4vlmF1LRU2NQ0KwwkQpiGlY5JIqgtE2VEKe 3ne8UXOM33lhveyQ7M2a1NGb7C/vVx2vcIIU0qGT+Cv0wUXTXKR6ul7C6o3OmeGTDpfO qEJ5swEVpmHZ5MURqNOUuB0YqxO1zHiUd9tpriuAFR85efCDAB1zC9LcUOZI5J65rHUd aCgrz0RAYwoQQ1a85HHdvDlkbb/ducgjtig5vINDRzQKKtjqztRFd+DHPEjJWiD/Ikf9 5OHqHIxxPCjoXNe6kPhyO/io5+CoxGOiGLmSUYhqxE/oYxLoPGMMC4AwLktxd7yq3dW7 jHOw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=gCwpbrpB; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from fry.vger.email (fry.vger.email. [23.128.96.38]) by mx.google.com with ESMTPS id l16-20020a656810000000b005774d2f4abasi2518160pgt.876.2023.09.21.17.51.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 21 Sep 2023 17:51:07 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) client-ip=23.128.96.38; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20230601 header.b=gCwpbrpB; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by fry.vger.email (Postfix) with ESMTP id 7B6AB80D770A; Thu, 21 Sep 2023 12:46:04 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at fry.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231130AbjIUTp6 (ORCPT + 99 others); Thu, 21 Sep 2023 15:45:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44968 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231137AbjIUTpm (ORCPT ); Thu, 21 Sep 2023 15:45:42 -0400 Received: from mail-qt1-x82a.google.com (mail-qt1-x82a.google.com [IPv6:2607:f8b0:4864:20::82a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 50A8CD8AB7 for ; Thu, 21 Sep 2023 12:09:11 -0700 (PDT) Received: by mail-qt1-x82a.google.com with SMTP id d75a77b69052e-414ba610766so73311cf.0 for ; Thu, 21 Sep 2023 12:09:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20230601; t=1695323350; x=1695928150; darn=vger.kernel.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=BLlJX9huq9ej0iAVLAlYlRkGYLAh3a+BqLGjUG3BDUo=; b=gCwpbrpBnjCkHBljVLlGxCiWkWTVNtBSPV5VAb4PvGI0wTP+FzNG5/5rlRqC7DGYpP K2u62JW4+rzn8B5xgUrxbiQqz7lc0tCRJ6dKspc8RbRc+C1NJakVwfT6gNPnB08ybSYn +TLEhhvBgZ2JHcje25VDiNg8OQXf1nP5qo9I4wQKFXbfU8UqHH4CnunyEy7qwUoSUFhT CA8QzHunt3xwPX67pd9DED3sK8OOboRag0sSTj2XnYeIKGGs3EwXmnS80mmUvytKo2Az nlB3WVKseGQWKOs7pKcZz37g3sBt0kqkyXhy5tPHvwhW6didaGgqLqXKjkbIAenneVSg FEtw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695323350; x=1695928150; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=BLlJX9huq9ej0iAVLAlYlRkGYLAh3a+BqLGjUG3BDUo=; b=wh/FH//NiYlLwklswYZeN5Ufo5V3BrR+pNem4CfnGBwHc2ugBRG46hH1I7m7WF0q/e YJRncBhM6QGJGOn+fAWgIukziGHLVAqsDybvp3Zpt1hVgu/MKqXCY+DjK82KruRpLIbl Ue/IzD/9unVgBqtVXvx+FRPDZqfZUVos6k0yXQ+3A66OBUgpFDGYtDfFtloFtGUat6aW BvsyCgmqI89/J4kH2v/q+lGCDrA0eBJQ7qSCYLiHc+xptsBWtpHq+6fIUZL4HRJvYzZe YTrJRKJilADQZb7it+otoRrDYCbV2HwHAlz6AmOh3rXR2gkCledLVm+6wgq7oo8eMYqa ZJXw== X-Gm-Message-State: AOJu0YzZUcxegE7ty7M82xXB0vUEjRn+v+7/sQxuXU1u9mht/JkHgYzb r8uX+pZUcZXqOMFq14PUYjiFrT2lx6IRIuO45J6/QQ== X-Received: by 2002:a05:622a:24b:b0:410:9855:ac6 with SMTP id c11-20020a05622a024b00b0041098550ac6mr333593qtx.14.1695323349892; Thu, 21 Sep 2023 12:09:09 -0700 (PDT) MIME-Version: 1.0 References: <20230921190429.1970766-1-i.maximets@ovn.org> In-Reply-To: <20230921190429.1970766-1-i.maximets@ovn.org> From: Eric Dumazet Date: Thu, 21 Sep 2023 21:08:58 +0200 Message-ID: Subject: Re: [PATCH net-next] openvswitch: reduce stack usage in do_execute_actions To: Ilya Maximets Cc: netdev@vger.kernel.org, Jakub Kicinski , "David S. Miller" , Paolo Abeni , linux-kernel@vger.kernel.org, dev@openvswitch.org, Pravin B Shelar , Eelco Chaudron Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-8.4 required=5.0 tests=DKIMWL_WL_MED,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_IN_DEF_DKIM_WL autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on fry.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (fry.vger.email [0.0.0.0]); Thu, 21 Sep 2023 12:46:04 -0700 (PDT) On Thu, Sep 21, 2023 at 9:03=E2=80=AFPM Ilya Maximets = wrote: > > do_execute_actions() function can be called recursively multiple > times while executing actions that require pipeline forking or > recirculations. It may also be re-entered multiple times if the packet > leaves openvswitch module and re-enters it through a different port. > > Currently, there is a 256-byte array allocated on stack in this > function that is supposed to hold NSH header. Compilers tend to > pre-allocate that space right at the beginning of the function: > > a88: 48 81 ec b0 01 00 00 sub $0x1b0,%rsp > > NSH is not a very common protocol, but the space is allocated on every > recursive call or re-entry multiplying the wasted stack space. > > Move the stack allocation to push_nsh() function that is only used > if NSH actions are actually present. push_nsh() is also a simple > function without a possibility for re-entry, so the stack is returned > right away. > > With this change the preallocated space is reduced by 256 B per call: > > b18: 48 81 ec b0 00 00 00 sub $0xb0,%rsp > > Signed-off-by: Ilya Maximets > --- > net/openvswitch/actions.c | 20 +++++++++----------- > 1 file changed, 9 insertions(+), 11 deletions(-) > > diff --git a/net/openvswitch/actions.c b/net/openvswitch/actions.c > index 5f8094acd056..80cc5c512d7b 100644 > --- a/net/openvswitch/actions.c > +++ b/net/openvswitch/actions.c > @@ -312,10 +312,16 @@ static int push_eth(struct sk_buff *skb, struct sw_= flow_key *key, > } > > static int push_nsh(struct sk_buff *skb, struct sw_flow_key *key, > - const struct nshhdr *nh) > + const struct nlattr *a) Presumably this function should be inlined. (one caller only) I would add noinline_for_stack to make sure the compiler will not play games with this attempt. > { > + u8 buffer[NSH_HDR_MAX_LEN]; > + struct nshhdr *nh =3D (struct nshhdr *)buffer; > int err; > > + err =3D nsh_hdr_from_nlattr(a, nh, NSH_HDR_MAX_LEN); > + if (err) > + return err; > + > err =3D nsh_push(skb, nh); > if (err) > return err; > @@ -1439,17 +1445,9 @@ static int do_execute_actions(struct datapath *dp,= struct sk_buff *skb, > err =3D pop_eth(skb, key); > break; > > - case OVS_ACTION_ATTR_PUSH_NSH: { > - u8 buffer[NSH_HDR_MAX_LEN]; > - struct nshhdr *nh =3D (struct nshhdr *)buffer; > - > - err =3D nsh_hdr_from_nlattr(nla_data(a), nh, > - NSH_HDR_MAX_LEN); > - if (unlikely(err)) > - break; > - err =3D push_nsh(skb, key, nh); > + case OVS_ACTION_ATTR_PUSH_NSH: > + err =3D push_nsh(skb, key, nla_data(a)); > break; > - } > > case OVS_ACTION_ATTR_POP_NSH: > err =3D pop_nsh(skb, key); > -- > 2.41.0 >