From patchwork Tue Aug 17 23:51:36 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Richardson X-Patchwork-Id: 498585 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-26.3 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER, INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, USER_AGENT_GIT,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C748FC4338F for ; Tue, 17 Aug 2021 23:51:51 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id A9F6561019 for ; Tue, 17 Aug 2021 23:51:51 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236723AbhHQXwX (ORCPT ); Tue, 17 Aug 2021 19:52:23 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44398 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236698AbhHQXwX (ORCPT ); Tue, 17 Aug 2021 19:52:23 -0400 Received: from mail-qv1-xf49.google.com (mail-qv1-xf49.google.com [IPv6:2607:f8b0:4864:20::f49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 68E2BC061796 for ; Tue, 17 Aug 2021 16:51:49 -0700 (PDT) Received: by mail-qv1-xf49.google.com with SMTP id f10-20020a0ccc8a0000b02903521ac3b9d7so781067qvl.15 for ; Tue, 17 Aug 2021 16:51:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=1elKTcdW+FvNYbz11By/qdVfUowhJEzra5rUhhk1zhk=; b=P3S9cXL+qBnbdV2ynwMVH7DF7JmMk8NfHBFpWXgWCW7xfgpOckV7JoxvB1APGMwRoa 0bplfkazkfghoF2VYEPx35YSFWVSPg3wEXJEMP/Qzch/m0vHBlAG2GeSSILqtBra1EvP zh82D5p0JI8iqYV2E3FAiTY6sE5yiP6owLQ2vZEuajc3gS6MSkQA0NjVzEXAC0BEx5XF B6KxRnEqbWh+NSb4JuIG/1tV8jh62VApiiRWjjF3Q26/4zC6hIy+HJz7rvw519iFfOxz 79S4l+ioqqV1XXC4mZb75omf0F4i7wML/VFRQqRYXUS/nmKNpUwhUzxJwMIFt6xxEx4h wSgg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=1elKTcdW+FvNYbz11By/qdVfUowhJEzra5rUhhk1zhk=; b=dxnPr9Za9JQhjXxz6pYCouC3sHA+GguBdKfidiypUm5HRhh97E0k3UbcDiNJt4Cc/m lNCiXCnMmVWCJW98RF92pP39dLUXZVF0vvUN6kkp+kpzQVCU0kQ8fSA3eyr7B1fruVpQ /ahtq8acE1HwutojFLA/Z/PHHKY50yHzB5dwlLG4OUJVUdmno9MgQiGVS5lJePyLtJeU q6I9k37f6CUdalzMdeVjfaBpaHXeId8HYHx3i3g4l58DA2TzvBCjxHAlHdtPwjZmSeRc ia6mXSybGH48CsahDvDtMhsxuVcxi1HTclAw5wNif4TpyWdDEDq5r7sbUaocsa9bskun CqZg== X-Gm-Message-State: AOAM532TvGRHIwHSwTobEG4vzN5GoAOuG8x4EbfhaZtuw0U3IcaIl8kC xy0/MpWr05vdJiBgQzTos/sLxnBMR1IIoUnEk0InkTJ16VJJ3v7LgmCRaepIqXAXVaswdtfXsvB ygk5sgdjVh/0lTXoAR7AIkRo5F5yxksaLfmP+B0OtterBH5wVVVunefzxMTuY4yzOQ25A7mEIib eP1Oap1Bo= X-Google-Smtp-Source: ABdhPJxH76gAGLE97RMZ3CIwsI+hAJDRqD6thgql0QygnAKRv2Ju+C0uEQapyaFfFQR1NXrwnsZSwTuaGzO4g6NuS9ZKgw== X-Received: from mustash.c.googlers.com ([fda3:e722:ac3:cc00:14:4d90:c0a8:337b]) (user=richardsonnick job=sendgmr) by 2002:a0c:e70f:: with SMTP id d15mr5994177qvn.47.1629244308522; Tue, 17 Aug 2021 16:51:48 -0700 (PDT) Date: Tue, 17 Aug 2021 23:51:36 +0000 In-Reply-To: <20210817235141.1136355-1-richardsonnick@google.com> Message-Id: <20210817235141.1136355-2-richardsonnick@google.com> Mime-Version: 1.0 References: <20210817235141.1136355-1-richardsonnick@google.com> X-Mailer: git-send-email 2.33.0.rc1.237.g0d66db33f3-goog Subject: [PATCH v3 1/3] pktgen: Parse internet mix (imix) input From: Nicholas Richardson To: netdev@vger.kernel.org, davem@davemloft.net, kuba@kernel.org Cc: nrrichar@ncsu.edu, promanov@google.com, arunkaly@google.com, Nick Richardson , "Gustavo A. R. Silva" , Yejune Deng , Leesoo Ahn , Ye Bin , Di Zhu , linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Nick Richardson Adds "imix_weights" command for specifying internet mix distribution. The command is in this format: "imix_weights size_1,weight_1 size_2,weight_2 ... size_n,weight_n" where the probability that packet size_i is picked is: weight_i / (weight_1 + weight_2 + .. + weight_n) The user may provide up to 100 imix entries (size_i,weight_i) in this command. The user specified imix entries will be displayed in the "Params" section of the interface output. Values for clone_skb > 0 is not supported in IMIX mode. Summary of changes: Add flag for enabling internet mix mode. Add command (imix_weights) for internet mix input. Return -ENOTSUPP when clone_skb > 0 in IMIX mode. Display imix_weights in Params. Create data structures to store imix entries and distribution. Signed-off-by: Nick Richardson --- net/core/pktgen.c | 96 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) diff --git a/net/core/pktgen.c b/net/core/pktgen.c index 7e258d255e90..a7e45eaccef7 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -175,6 +175,8 @@ #define IP_NAME_SZ 32 #define MAX_MPLS_LABELS 16 /* This is the max label stack depth */ #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 func_enter() pr_debug("entering %s\n", __func__); @@ -242,6 +244,12 @@ static char *pkt_flag_names[] = { #define VLAN_TAG_SIZE(x) ((x)->vlan_id == 0xffff ? 0 : 4) #define SVLAN_TAG_SIZE(x) ((x)->svlan_id == 0xffff ? 0 : 4) +struct imix_pkt { + u64 size; + u64 weight; + u64 count_so_far; +}; + struct flow_state { __be32 cur_daddr; int count; @@ -343,6 +351,10 @@ struct pktgen_dev { __u8 traffic_class; /* ditto for the (former) Traffic Class in IPv6 (see RFC 3260, sec. 4) */ + /* IMIX */ + unsigned int n_imix_entries; + struct imix_pkt imix_entries[MAX_IMIX_ENTRIES]; + /* MPLS */ unsigned int nr_labels; /* Depth of stack, 0 = no MPLS */ __be32 labels[MAX_MPLS_LABELS]; @@ -552,6 +564,16 @@ static int pktgen_if_show(struct seq_file *seq, void *v) (unsigned long long)pkt_dev->count, pkt_dev->min_pkt_size, pkt_dev->max_pkt_size); + if (pkt_dev->n_imix_entries > 0) { + seq_puts(seq, " imix_weights: "); + for (i = 0; i < pkt_dev->n_imix_entries; i++) { + seq_printf(seq, "%llu,%llu ", + pkt_dev->imix_entries[i].size, + pkt_dev->imix_entries[i].weight); + } + seq_puts(seq, "\n"); + } + seq_printf(seq, " frags: %d delay: %llu clone_skb: %d ifname: %s\n", pkt_dev->nfrags, (unsigned long long) pkt_dev->delay, @@ -792,6 +814,62 @@ static int strn_len(const char __user * user_buffer, unsigned int maxlen) return i; } +/* Parses imix entries from user buffer. + * The user buffer should consist of imix entries separated by spaces + * where each entry consists of size and weight delimited by commas. + * "size1,weight_1 size2,weight_2 ... size_n,weight_n" for example. + */ +static ssize_t get_imix_entries(const char __user *buffer, + struct pktgen_dev *pkt_dev) +{ + const int max_digits = 10; + int i = 0; + long len; + char c; + + pkt_dev->n_imix_entries = 0; + + do { + unsigned long weight; + unsigned long size; + + len = num_arg(&buffer[i], max_digits, &size); + if (len < 0) + return len; + i += len; + if (get_user(c, &buffer[i])) + return -EFAULT; + /* Check for comma between size_i and weight_i */ + if (c != ',') + return -EINVAL; + i++; + + if (size < 14 + 20 + 8) + size = 14 + 20 + 8; + + len = num_arg(&buffer[i], max_digits, &weight); + if (len < 0) + return len; + if (weight <= 0) + return -EINVAL; + + pkt_dev->imix_entries[pkt_dev->n_imix_entries].size = size; + pkt_dev->imix_entries[pkt_dev->n_imix_entries].weight = weight; + + i += len; + if (get_user(c, &buffer[i])) + return -EFAULT; + + i++; + pkt_dev->n_imix_entries++; + + if (pkt_dev->n_imix_entries > MAX_IMIX_ENTRIES) + return -E2BIG; + } while (c == ' '); + + return i; +} + static ssize_t get_labels(const char __user *buffer, struct pktgen_dev *pkt_dev) { unsigned int n = 0; @@ -960,6 +1038,18 @@ static ssize_t pktgen_if_write(struct file *file, return count; } + if (!strcmp(name, "imix_weights")) { + if (pkt_dev->clone_skb > 0) + return -EINVAL; + + len = get_imix_entries(&user_buffer[i], pkt_dev); + if (len < 0) + return len; + + i += len; + return count; + } + if (!strcmp(name, "debug")) { len = num_arg(&user_buffer[i], 10, &value); if (len < 0) @@ -1082,10 +1172,16 @@ static ssize_t pktgen_if_write(struct file *file, len = num_arg(&user_buffer[i], 10, &value); if (len < 0) return len; + /* clone_skb is not supported for netif_receive xmit_mode and + * IMIX mode. + */ if ((value > 0) && ((pkt_dev->xmit_mode == M_NETIF_RECEIVE) || !(pkt_dev->odev->priv_flags & IFF_TX_SKB_SHARING))) return -ENOTSUPP; + if (value > 0 && pkt_dev->n_imix_entries > 0) + return -EINVAL; + i += len; pkt_dev->clone_skb = value; From patchwork Tue Aug 17 23:51:37 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Richardson X-Patchwork-Id: 499624 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-26.3 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER, INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, USER_AGENT_GIT,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6355BC4338F for ; Tue, 17 Aug 2021 23:51:57 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 4487360F39 for ; Tue, 17 Aug 2021 23:51:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236814AbhHQXw3 (ORCPT ); Tue, 17 Aug 2021 19:52:29 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44440 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236787AbhHQXw2 (ORCPT ); Tue, 17 Aug 2021 19:52:28 -0400 Received: from mail-vs1-xe49.google.com (mail-vs1-xe49.google.com [IPv6:2607:f8b0:4864:20::e49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E90BBC0617AF for ; Tue, 17 Aug 2021 16:51:53 -0700 (PDT) Received: by mail-vs1-xe49.google.com with SMTP id a186-20020a671ac30000b0290289c309d3b2so199545vsa.18 for ; Tue, 17 Aug 2021 16:51:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=k3/pK0CBn1A5G7wmRtLTVqgpdu0r/GTbQhPeFcXxvFY=; b=ezCUgRcS7hbHqYdcKEr0XSHh+C2g/EVQSoS+dFXfsQKC64yA6NqxjFkKItwWO38uTV ncg15u+8n6C9kxFndEqdo+y/ngDMPaQHUeX+SZ9lAsM8d60DcGfPhy3HStG0hLMnnfXq TQsKr+Zv5Tdvu+gNjoBahmERLn2B63skVaLAPqCps7UZ40KngExg60kCO67gJCkU8JXj FH/xn33919O6rUD2kl2KlQpao9ht9L+ZKuZMsLdtcMuZ5C2E+EsYD957mZqjiex5I5lI +DOpiOPhaHvJBkkH1OsUjD7zbUFSO3g4lfOsG3tzwfhWLaazNVm6utpPInfscLfuKdGy EQlQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=k3/pK0CBn1A5G7wmRtLTVqgpdu0r/GTbQhPeFcXxvFY=; b=rsFG5lsPK9iOqyaFsKFzoV6msZhiQzJfqpNKobDwPGTWIEOan/kjbiFSvRnvFl+WKr WbY9bWdaO46JZ9IK5VEFoPu2iWi5KHeW820WOkE4Tev1OpN1VGjt0opHnWuzfNvA9vQ7 xmV5cSI09u1HdYC+l0z6G9VlJg+11J/JwT7TPCmLPXowNN42QLCpf2jV9uf8if6bf82w 5QJyiJL8Nm6fBIisIdk/s3ji1AfGzQX0cNrCIhZkvjVYJAhQQVfKs18HCkeZqszZpOs/ JujserQzz2yvSbsixeYyOiVVrNwG3YUGwiTF+P+XC9+lCXzzpetaJwHwvD/pTXkfZnuh 1btA== X-Gm-Message-State: AOAM530v6WRUnwT/rwn5wq91T9FmUlWDUGx/Oi8UoIxlteUmttZuWtWf ai/XNujQiH+28lg7rJbS5mBk8LSHW8KyuXF5a+q5gqGJc5LqeMPMx3kbnFGhOjnSwxVIpQSLJIF babz3pMKBLnRTK5yslmG4ftUX+0CZaRiLrDGf4Q5CJyxmx1HkpS3iA+TVqtK/Y4FWY5BJKwNnee NQ5I5H3zo= X-Google-Smtp-Source: ABdhPJzLRv1JuVVLa9pCsI3wSB+ZLbyYwnSYcTz35ZEQSZ5fitRriUlcdld3rPgAndZCZWnWNXZ7POBq8Sbb3KdQ8rB51A== X-Received: from mustash.c.googlers.com ([fda3:e722:ac3:cc00:14:4d90:c0a8:337b]) (user=richardsonnick job=sendgmr) by 2002:a05:6102:3f50:: with SMTP id l16mr5638742vsv.10.1629244312829; Tue, 17 Aug 2021 16:51:52 -0700 (PDT) Date: Tue, 17 Aug 2021 23:51:37 +0000 In-Reply-To: <20210817235141.1136355-1-richardsonnick@google.com> Message-Id: <20210817235141.1136355-3-richardsonnick@google.com> Mime-Version: 1.0 References: <20210817235141.1136355-1-richardsonnick@google.com> X-Mailer: git-send-email 2.33.0.rc1.237.g0d66db33f3-goog Subject: [PATCH v3 2/3] pktgen: Add imix distribution bins From: Nicholas Richardson To: netdev@vger.kernel.org, davem@davemloft.net, kuba@kernel.org Cc: nrrichar@ncsu.edu, promanov@google.com, arunkaly@google.com, Nick Richardson , "Gustavo A. R. Silva" , Ye Bin , Leesoo Ahn , Yejune Deng , Di Zhu , linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org 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 | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/net/core/pktgen.c b/net/core/pktgen.c index a7e45eaccef7..9e78edf0f69b 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); /* Module parameters, defaults. */ static int pg_count_d __read_mostly = 1000; @@ -1046,6 +1050,8 @@ static ssize_t pktgen_if_write(struct file *file, if (len < 0) return len; + fill_imix_distribution(pkt_dev); + i += len; return count; } @@ -2573,6 +2579,14 @@ static void mod_cur_headers(struct pktgen_dev *pkt_dev) t = pkt_dev->min_pkt_size; } pkt_dev->cur_pkt_size = t; + } else if (pkt_dev->n_imix_entries > 0) { + struct imix_pkt *entry; + __u32 t = prandom_u32() % IMIX_PRECISION; + __u8 entry_index = pkt_dev->imix_distribution[t]; + + entry = &pkt_dev->imix_entries[entry_index]; + entry->count_so_far++; + pkt_dev->cur_pkt_size = entry->size; } set_cur_queue_map(pkt_dev); @@ -2580,6 +2594,32 @@ static void mod_cur_headers(struct pktgen_dev *pkt_dev) pkt_dev->flows[flow].count++; } +static void fill_imix_distribution(struct pktgen_dev *pkt_dev) +{ + int cumulative_probabilites[MAX_IMIX_ENTRIES]; + int j = 0; + __u64 cumulative_prob = 0; + __u64 total_weight = 0; + int i = 0; + + for (i = 0; i < pkt_dev->n_imix_entries; i++) + total_weight += pkt_dev->imix_entries[i].weight; + + /* Fill cumulative_probabilites with sum of normalized probabilities */ + for (i = 0; i < pkt_dev->n_imix_entries - 1; i++) { + cumulative_prob += div64_u64(pkt_dev->imix_entries[i].weight * + IMIX_PRECISION, + total_weight); + cumulative_probabilites[i] = cumulative_prob; + } + cumulative_probabilites[pkt_dev->n_imix_entries - 1] = 100; + + for (i = 0; i < IMIX_PRECISION; i++) { + if (i == cumulative_probabilites[j]) + j++; + pkt_dev->imix_distribution[i] = j; + } +} #ifdef CONFIG_XFRM static u32 pktgen_dst_metrics[RTAX_MAX + 1] = { From patchwork Tue Aug 17 23:51:38 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nicholas Richardson X-Patchwork-Id: 498584 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-26.3 required=3.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER, INCLUDES_PATCH, MAILING_LIST_MULTI, SPF_HELO_NONE, SPF_PASS, USER_AGENT_GIT,USER_IN_DEF_DKIM_WL autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B4FA1C4338F for ; Tue, 17 Aug 2021 23:52:02 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 975F661019 for ; Tue, 17 Aug 2021 23:52:02 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236922AbhHQXwe (ORCPT ); Tue, 17 Aug 2021 19:52:34 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44470 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236787AbhHQXwc (ORCPT ); Tue, 17 Aug 2021 19:52:32 -0400 Received: from mail-qk1-x74a.google.com (mail-qk1-x74a.google.com [IPv6:2607:f8b0:4864:20::74a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4919DC0613C1 for ; Tue, 17 Aug 2021 16:51:58 -0700 (PDT) Received: by mail-qk1-x74a.google.com with SMTP id p23-20020a05620a22f700b003d5ac11ac5cso446771qki.15 for ; Tue, 17 Aug 2021 16:51:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=66LPn3qAi6+RNBmqfq0UYvC3j3r/16uwPxDAmwkK1Rw=; b=MuXuzaYjkly6ZK6hbdIJnuw+v7wznvPbDZ0p5MMYdjR2zpPsmOU1mOJZDjly7T7t3h Vor+OvLRGzh8Bd/dUJ2iiV+DJ0Ze5P5CHK6O7sVdw1/fyIv8SifmAFvv85DVwZ3Yhg/f v2YLLY2yEtoEC8PlqkLlQ1zTUixMwAtTfMUU4hV6yvSERkh2717O6RPgTjCsfEhzbWbQ /m/fH4YcNnEF09btKf/x6aznzeFYMFpsPy4JV/tV1Rytsyr5wGgD1pA7JusBqJyL1NmS eRvD8GALaACkO8jsXXmBOgSaURGv6FEuiGC4FXzQD6sTey3/a5DANaYeVFzVIVe0uw5m TaWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=66LPn3qAi6+RNBmqfq0UYvC3j3r/16uwPxDAmwkK1Rw=; b=MRNl3qPHerjD0zcVjsYU+Ib4KgfWG2UaZKYQg+EYP9tU7YGnZ93s39RQH/uGfGLi99 Fv2t1Dc30RzeI8zknSTj91Y2ACgw3t+eomLBFByvGEkh4RNmFWOZbn/rlvTISzWITm0E xAkhq7AliDicVHT07bNs6hppCjpqkrCRs4AVg2F3m62OmpuxYy5/pp+V9DQc3SkwgX1A kv8/9uiQI3Fg4U/qKbcsgr0KySYpvgbmYv8EiHFzuCeb36jZSkZR6cSXJXjTjqDgOQpk nkH0UsmCkT36scHOfdPG8FcecrxrsAWv8PRSFqh5GMM1JzVqycWINrtuDLD0yMTvLhG2 vxHA== X-Gm-Message-State: AOAM533Ia7tkGheYbc7dUNiJK8sboTekYvA6QrCG5A+cFjtux553omNN t5AqLyWRXoUJ28jUKurIGO953rNdTn2Z051FilHcIDj8kl45DAHXIi+Y8MO63QuswJI7B7uwuBd IbF/3+ZeVpWX50jtXSB/JDcw1mjjhiTtluTAy+OX9IKY3iQ8/m83QV6BEld+8pjCW9Vf0xWVGkD NXHISgLRg= X-Google-Smtp-Source: ABdhPJxJBFWKOxzMxsf1ZaOmZuY64y/gaCGF1flpnHOTiBjvAE8aVUtkkKkBy0xIE8sDlAx/xsrBfH/7aExo84L29XKv6Q== X-Received: from mustash.c.googlers.com ([fda3:e722:ac3:cc00:14:4d90:c0a8:337b]) (user=richardsonnick job=sendgmr) by 2002:a05:6214:f2e:: with SMTP id iw14mr6100161qvb.36.1629244317401; Tue, 17 Aug 2021 16:51:57 -0700 (PDT) Date: Tue, 17 Aug 2021 23:51:38 +0000 In-Reply-To: <20210817235141.1136355-1-richardsonnick@google.com> Message-Id: <20210817235141.1136355-4-richardsonnick@google.com> Mime-Version: 1.0 References: <20210817235141.1136355-1-richardsonnick@google.com> X-Mailer: git-send-email 2.33.0.rc1.237.g0d66db33f3-goog Subject: [PATCH v3 3/3] pktgen: Add output for imix results From: Nicholas Richardson To: netdev@vger.kernel.org, davem@davemloft.net, kuba@kernel.org Cc: nrrichar@ncsu.edu, promanov@google.com, arunkaly@google.com, Nick Richardson , "Gustavo A. R. Silva" , Ye Bin , Leesoo Ahn , Di Zhu , Yejune Deng , linux-kernel@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Nick Richardson The bps for imix mode is calculated by: sum(imix_entry.size) / time_elapsed The actual counts of each imix_entry are displayed under the "Current:" section of the interface output in the following format: imix_size_counts: size_1,count_1 size_2,count_2 ... size_n,count_n Example (count = 200000): imix_weights: 256,1 859,3 205,2 imix_size_counts: 256,32082 859,99796 205,68122 Result: OK: 17992362(c17964678+d27684) usec, 200000 (859byte,0frags) 11115pps 47Mb/sec (47977140bps) errors: 0 Summary of changes: Calculate bps based on imix counters when in IMIX mode. Add output for IMIX counters. Signed-off-by: Nick Richardson --- net/core/pktgen.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/net/core/pktgen.c b/net/core/pktgen.c index 9e78edf0f69b..699f76779f0c 100644 --- a/net/core/pktgen.c +++ b/net/core/pktgen.c @@ -695,6 +695,18 @@ static int pktgen_if_show(struct seq_file *seq, void *v) (unsigned long long)pkt_dev->sofar, (unsigned long long)pkt_dev->errors); + if (pkt_dev->n_imix_entries > 0) { + int i; + + seq_puts(seq, " imix_size_counts: "); + for (i = 0; i < pkt_dev->n_imix_entries; i++) { + seq_printf(seq, "%llu,%llu ", + pkt_dev->imix_entries[i].size, + pkt_dev->imix_entries[i].count_so_far); + } + seq_puts(seq, "\n"); + } + seq_printf(seq, " started: %lluus stopped: %lluus idle: %lluus\n", (unsigned long long) ktime_to_us(pkt_dev->started_at), @@ -3281,7 +3293,19 @@ static void show_results(struct pktgen_dev *pkt_dev, int nr_frags) pps = div64_u64(pkt_dev->sofar * NSEC_PER_SEC, ktime_to_ns(elapsed)); - bps = pps * 8 * pkt_dev->cur_pkt_size; + if (pkt_dev->n_imix_entries > 0) { + int i; + struct imix_pkt *entry; + + bps = 0; + for (i = 0; i < pkt_dev->n_imix_entries; i++) { + entry = &pkt_dev->imix_entries[i]; + bps += entry->size * entry->count_so_far; + } + bps = div64_u64(bps * 8 * NSEC_PER_SEC, ktime_to_ns(elapsed)); + } else { + bps = pps * 8 * pkt_dev->cur_pkt_size; + } mbps = bps; do_div(mbps, 1000000);