Received: by 2002:a05:6a10:1d13:0:0:0:0 with SMTP id pp19csp1622539pxb; Tue, 17 Aug 2021 16:56:33 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxzWAqOOF84o9xI8DT+kNJ3FC0sZfJ9GX6tKkqh2r364wUBrJK2/AgwXqBYnaEWWEbHiN4f X-Received: by 2002:a6b:d90b:: with SMTP id r11mr4145712ioc.99.1629244592938; Tue, 17 Aug 2021 16:56:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1629244592; cv=none; d=google.com; s=arc-20160816; b=ryAlC6ManqyIOfCD+B8hTd8+CAGpbRWGHW9QF0D75X4C+juDmv7fbDmv2/a3iiVcpo hGULDkLFdKoCY1Br6I4IdVU23xK/vyjEgHAr58UiiOu/ZJV5gLfXKJKxhM/tIeAxRas3 7ksP9Ky7vQ87rfQ5xmuFd9QstByazZw6sKpCXNPkpWxRp2nDo9c+a8X2FefNkXskNcIt 5OImD8QhjrH+cP9n+sPGfdIxwsEujTX4CtYlhXztab7NxuIYdHDcbXVsA8ZfCWFz7I5I Eifwm0JlefgFl6cuKCTsMGIduqp2b1qsXs9oRSKDyyITgub09dTmzq+BB5VKdFzF1grw fgAw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=xi0kyUWy+SjrYmgP326qubMilb3XVeWb6FjGNBgjGig=; b=jT5i6QrcvHcAydMX0O4zMInN6YhwOaBXQPlRSx93kSS5V7je0VF0Am+C/6N8EOI651 P6NTYScsFO3EdFuzOVEe43kJNny4ZRNwjXp6iJYJc+ekBwETghpt66ciRxUwf9Krr1oT EfDnyqJcV3yg61pu+dhEO7Bc97WMYxuRNaG+Q7jwLr412vMGwvxhmyBFo2EbarzzdMOz Xwtr7Jndscfjbt82aE76lVfMGMIFHdlGAF/yOHPL2wLJTw16sZYYs42YeCFgG8E99etN qaG0ADtc+nzMgekVyNbWn0Cj3egx/tPzhcszwm/DWD9+x37UIO+RKVtdPSw79vZShvQL a3ow== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=D6wM5m3Z; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id r17si4355943iov.104.2021.08.17.16.56.21; Tue, 17 Aug 2021 16:56:32 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=D6wM5m3Z; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236746AbhHQX4N (ORCPT + 99 others); Tue, 17 Aug 2021 19:56:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45306 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S235369AbhHQX4M (ORCPT ); Tue, 17 Aug 2021 19:56:12 -0400 Received: from mail-lf1-x129.google.com (mail-lf1-x129.google.com [IPv6:2a00:1450:4864:20::129]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A4733C0613CF for ; Tue, 17 Aug 2021 16:55:38 -0700 (PDT) Received: by mail-lf1-x129.google.com with SMTP id w20so620512lfu.7 for ; Tue, 17 Aug 2021 16:55:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=xi0kyUWy+SjrYmgP326qubMilb3XVeWb6FjGNBgjGig=; b=D6wM5m3Zp6apHsOp1dKVDEyoNWvE3nDVdrXRF3xlqiuueS8Ka3SoKMOoMeMktDoGAN ujNdL9H4AlQ8CxW42wy6b/Vdt5mN8PN96GuJkaqvQamCE2r35r386WPDqqUCsgfWTOP1 O1Gvtz/KfUfbtQ1AQhO38UedKG9XcOhozAabcGoSmR2LxU0YkCgEtrUbOlrL4V4ZOzfy CNo/NGxRFlczEdNJ2g1RAs7aQurZ3t9lhAzO/8CVZhs7phoeqSviJXu7b7Ye92nFrIrM b0fartnjSKRL9Ib40JfJGrds2tku+WM2S4u7vgsF37oFcOSjTl8kZfO7l0CdqfQYBEko cpsg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=xi0kyUWy+SjrYmgP326qubMilb3XVeWb6FjGNBgjGig=; b=ji8HGfGRA4is0c8hF/MI0I7U7grT/OWmZG6xi/lGsXDwVVUjFQNBca0eex7aMppOA2 B6DSH8xEzNWc+IzNYuDNUil9Z3jpBhI/RC8WY4hm1UxczSL9KCQaY98Rv9dbyxZyHtgQ yTvVmL9VCDL5KC43d11TLszaA5z46ygnp94QmugogJuWpIfG/v6KO1Q9+bExaXN0TzN7 YjBeQVKtt/c7vQMvBofhnrXd4lZeHHz/i38Pg+xR30KxARG5UHUL/jLazGH6p5EehFHC zZelAJkKzm4bnZSQH1GCSGfE7CKoVx6hH0WJuMqyor1UwMvzyFxSr4ngpf6jsBs6SdMO q4ng== X-Gm-Message-State: AOAM530up/c9vltdmiRLnV58GaIJSkFF1aOkFp2D90bopTHkWQaLtnLt HoyUbn0XEY08TNH+5F3bcDQuNVCGqQmkqp0weHhPlA== X-Received: by 2002:a05:6512:318e:: with SMTP id i14mr4309315lfe.113.1629244536515; Tue, 17 Aug 2021 16:55:36 -0700 (PDT) MIME-Version: 1.0 References: <20210810190159.4103778-1-richardsonnick@google.com> <20210810190159.4103778-3-richardsonnick@google.com> <4135e426-5a6f-c36a-d048-382c07f16b0a@kernel.org> In-Reply-To: <4135e426-5a6f-c36a-d048-382c07f16b0a@kernel.org> From: Nick Richardson Date: Tue, 17 Aug 2021 19:55:21 -0400 Message-ID: Subject: Re: [PATCH v2 2/3] pktgen: Add imix distribution bins To: Nathan Chancellor Cc: Naresh Kamboju , "David S. Miller" , Jakub Kicinski , nrrichar@ncsu.edu, Philip Romanov , Arun Kalyanasundaram , "Gustavo A. R. Silva" , Di Zhu , Leesoo Ahn , Ye Bin , Yejune Deng , Netdev , open list , Linux-Next Mailing List , lkft-triage@lists.linaro.org, Mark Brown , Stephen Rothwell Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Aug 17, 2021 at 6:27 PM Nathan Chancellor wrote: > > On 8/17/2021 3:17 PM, Nick Richardson wrote: > > On Wed, 11 Aug 2021 at 00:32, Nicholas Richardson > > wrote: > >> > >> From: Nick Richardson > >> > >> In order to represent the distribution of imix packet sizes, a > >> pre-computed data structure is used. It features 100 (IMIX_PRECISION) > >> "bins". Contiguous ranges of these bins represent the respective > >> packet size of each imix entry. This is done to avoid the overhead of > >> selecting the correct imix packet size based on the corresponding weights. > >> > >> Example: > >> imix_weights 40,7 576,4 1500,1 > >> total_weight = 7 + 4 + 1 = 12 > >> > >> pkt_size 40 occurs 7/total_weight = 58% of the time > >> pkt_size 576 occurs 4/total_weight = 33% of the time > >> pkt_size 1500 occurs 1/total_weight = 9% of the time > >> > >> We generate a random number between 0-100 and select the corresponding > >> packet size based on the specified weights. > >> Eg. random number = 358723895 % 100 = 65 > >> Selects the packet size corresponding to index:65 in the pre-computed > >> imix_distribution array. > >> An example of the pre-computed array is below: > >> > >> The imix_distribution will look like the following: > >> 0 -> 0 (index of imix_entry.size == 40) > >> 1 -> 0 (index of imix_entry.size == 40) > >> 2 -> 0 (index of imix_entry.size == 40) > >> [...] -> 0 (index of imix_entry.size == 40) > >> 57 -> 0 (index of imix_entry.size == 40) > >> 58 -> 1 (index of imix_entry.size == 576) > >> [...] -> 1 (index of imix_entry.size == 576) > >> 90 -> 1 (index of imix_entry.size == 576) > >> 91 -> 2 (index of imix_entry.size == 1500) > >> [...] -> 2 (index of imix_entry.size == 1500) > >> 99 -> 2 (index of imix_entry.size == 1500) > >> > >> Create and use "bin" representation of the imix distribution. > >> > >> Signed-off-by: Nick Richardson > >> --- > >> net/core/pktgen.c | 41 +++++++++++++++++++++++++++++++++++++++++ > >> 1 file changed, 41 insertions(+) > >> > >> diff --git a/net/core/pktgen.c b/net/core/pktgen.c > >> index a7e45eaccef7..ac1de15000e2 100644 > >> --- a/net/core/pktgen.c > >> +++ b/net/core/pktgen.c > >> @@ -177,6 +177,7 @@ > >> #define MPLS_STACK_BOTTOM htonl(0x00000100) > >> /* Max number of internet mix entries that can be specified in imix_weights. */ > >> #define MAX_IMIX_ENTRIES 20 > >> +#define IMIX_PRECISION 100 /* Precision of IMIX distribution */ > >> > >> #define func_enter() pr_debug("entering %s\n", __func__); > >> > >> @@ -354,6 +355,8 @@ struct pktgen_dev { > >> /* IMIX */ > >> unsigned int n_imix_entries; > >> struct imix_pkt imix_entries[MAX_IMIX_ENTRIES]; > >> + /* Maps 0-IMIX_PRECISION range to imix_entry based on probability*/ > >> + __u8 imix_distribution[IMIX_PRECISION]; > >> > >> /* MPLS */ > >> unsigned int nr_labels; /* Depth of stack, 0 = no MPLS */ > >> @@ -483,6 +486,7 @@ static void pktgen_stop_all_threads(struct pktgen_net *pn); > >> > >> static void pktgen_stop(struct pktgen_thread *t); > >> static void pktgen_clear_counters(struct pktgen_dev *pkt_dev); > >> +static void fill_imix_distribution(struct pktgen_dev *pkt_dev); > > > > Linux next 20210813 tag arm builds failed due to following build errors. > > > > Regressions found on arm: > > > > - build/gcc-10-ixp4xx_defconfig > > - build/gcc-10-orion5x_defconfig > > - build/gcc-10-multi_v5_defconfig > > > > net/core/pktgen.c:489:13: warning: 'fill_imix_distribution' used but > > never defined > > static void fill_imix_distribution(struct pktgen_dev *pkt_dev); > > ^~~~~~~~~~~~~~~~~~~~~~ > > ERROR: modpost: "fill_imix_distribution" [net/core/pktgen.ko] undefined! > > make[2]: *** [scripts/Makefile.modpost:150: modules-only.symvers] Error 1 > > make[2]: *** Deleting file 'modules-only.symvers' > > make[2]: Target '__modpost' not remade because of errors. > > make[1]: *** [Makefile:1918: modules] Error 2 > > > > Reported-by: Linux Kernel Functional Testing > > > > Steps to reproduce: > > > > # TuxMake is a command line tool and Python library that provides > > # portable and repeatable Linux kernel builds across a variety of > > # architectures, toolchains, kernel configurations, and make targets. > > # > > # TuxMake supports the concept of runtimes. > > # See https://docs.tuxmake.org/runtimes/, for that to work it requires > > # that you install podman or docker on your system. > > # > > # To install tuxmake on your system globally: > > # sudo pip3 install -U tuxmake > > # > > # See https://docs.tuxmake.org/ for complete documentation. > > > > tuxmake --runtime podman --target-arch arm --toolchain gcc-10 > > --kconfig orion5x_defconfig > > > > > > On Sat, Aug 14, 2021 at 1:13 AM Naresh Kamboju > > wrote: > >> > >> On Wed, 11 Aug 2021 at 00:32, Nicholas Richardson > >> wrote: > >>> > >>> From: Nick Richardson > >>> > >>> In order to represent the distribution of imix packet sizes, a > >>> pre-computed data structure is used. It features 100 (IMIX_PRECISION) > >>> "bins". Contiguous ranges of these bins represent the respective > >>> packet size of each imix entry. This is done to avoid the overhead of > >>> selecting the correct imix packet size based on the corresponding weights. > >>> > >>> Example: > >>> imix_weights 40,7 576,4 1500,1 > >>> total_weight = 7 + 4 + 1 = 12 > >>> > >>> pkt_size 40 occurs 7/total_weight = 58% of the time > >>> pkt_size 576 occurs 4/total_weight = 33% of the time > >>> pkt_size 1500 occurs 1/total_weight = 9% of the time > >>> > >>> We generate a random number between 0-100 and select the corresponding > >>> packet size based on the specified weights. > >>> Eg. random number = 358723895 % 100 = 65 > >>> Selects the packet size corresponding to index:65 in the pre-computed > >>> imix_distribution array. > >>> An example of the pre-computed array is below: > >>> > >>> The imix_distribution will look like the following: > >>> 0 -> 0 (index of imix_entry.size == 40) > >>> 1 -> 0 (index of imix_entry.size == 40) > >>> 2 -> 0 (index of imix_entry.size == 40) > >>> [...] -> 0 (index of imix_entry.size == 40) > >>> 57 -> 0 (index of imix_entry.size == 40) > >>> 58 -> 1 (index of imix_entry.size == 576) > >>> [...] -> 1 (index of imix_entry.size == 576) > >>> 90 -> 1 (index of imix_entry.size == 576) > >>> 91 -> 2 (index of imix_entry.size == 1500) > >>> [...] -> 2 (index of imix_entry.size == 1500) > >>> 99 -> 2 (index of imix_entry.size == 1500) > >>> > >>> Create and use "bin" representation of the imix distribution. > >>> > >>> Signed-off-by: Nick Richardson > >>> --- > >>> net/core/pktgen.c | 41 +++++++++++++++++++++++++++++++++++++++++ > >>> 1 file changed, 41 insertions(+) > >>> > >>> diff --git a/net/core/pktgen.c b/net/core/pktgen.c > >>> index a7e45eaccef7..ac1de15000e2 100644 > >>> --- a/net/core/pktgen.c > >>> +++ b/net/core/pktgen.c > >>> @@ -177,6 +177,7 @@ > >>> #define MPLS_STACK_BOTTOM htonl(0x00000100) > >>> /* Max number of internet mix entries that can be specified in imix_weights. */ > >>> #define MAX_IMIX_ENTRIES 20 > >>> +#define IMIX_PRECISION 100 /* Precision of IMIX distribution */ > >>> > >>> #define func_enter() pr_debug("entering %s\n", __func__); > >>> > >>> @@ -354,6 +355,8 @@ struct pktgen_dev { > >>> /* IMIX */ > >>> unsigned int n_imix_entries; > >>> struct imix_pkt imix_entries[MAX_IMIX_ENTRIES]; > >>> + /* Maps 0-IMIX_PRECISION range to imix_entry based on probability*/ > >>> + __u8 imix_distribution[IMIX_PRECISION]; > >>> > >>> /* MPLS */ > >>> unsigned int nr_labels; /* Depth of stack, 0 = no MPLS */ > >>> @@ -483,6 +486,7 @@ static void pktgen_stop_all_threads(struct pktgen_net *pn); > >>> > >>> static void pktgen_stop(struct pktgen_thread *t); > >>> static void pktgen_clear_counters(struct pktgen_dev *pkt_dev); > >>> +static void fill_imix_distribution(struct pktgen_dev *pkt_dev); > >> > >> Linux next 20210813 tag arm builds failed due to following build errors. > >> > >> Regressions found on arm: > >> > >> - build/gcc-10-ixp4xx_defconfig > >> - build/gcc-10-orion5x_defconfig > >> - build/gcc-10-multi_v5_defconfig > >> > >> net/core/pktgen.c:489:13: warning: 'fill_imix_distribution' used but > >> never defined > >> static void fill_imix_distribution(struct pktgen_dev *pkt_dev); > >> ^~~~~~~~~~~~~~~~~~~~~~ > >> ERROR: modpost: "fill_imix_distribution" [net/core/pktgen.ko] undefined! > >> make[2]: *** [scripts/Makefile.modpost:150: modules-only.symvers] Error 1 > >> make[2]: *** Deleting file 'modules-only.symvers' > >> make[2]: Target '__modpost' not remade because of errors. > >> make[1]: *** [Makefile:1918: modules] Error 2 > >> > >> Reported-by: Linux Kernel Functional Testing > >> > >> Steps to reproduce: > >> > >> # TuxMake is a command line tool and Python library that provides > >> # portable and repeatable Linux kernel builds across a variety of > >> # architectures, toolchains, kernel configurations, and make targets. > >> # > >> # TuxMake supports the concept of runtimes. > >> # See https://docs.tuxmake.org/runtimes/, for that to work it requires > >> # that you install podman or docker on your system. > >> # > >> # To install tuxmake on your system globally: > >> # sudo pip3 install -U tuxmake > >> # > >> # See https://docs.tuxmake.org/ for complete documentation. > >> > >> tuxmake --runtime podman --target-arch arm --toolchain gcc-10 > >> --kconfig orion5x_defconfig > >> > >> -- > >> Linaro LKFT > >> https://lkft.linaro.org > > > > Thanks for the reply Naresh. Do you have any ideas on how to resolve > > this error? Pktgen already defines a couple of function prototypes > > before they are declared and that seems to be the cause of this error > > message. > > The problem is that you declare and use fill_imix_distribution() > unconditionally in the file but fill_imix_distribution() is only defined > if CONFIG_XFRM is set, resulting in this error if CONFIG_XFRM is not set. > > Should fill_imix_distribution() be moved out of that block or does it > truly depend on CONFIG_XFRM? If it does, should the use of > fill_imix_distribution() be guarded by CONFIG_XFRM as well? > > Cheers, > Nathan Good catch, thanks. Fixed in v3.