From: Vadim Kochan <vadi...@gmail.com>

Trafgen uses all the online cpus even if number of packets specified
by -n is less than numbers of selected cpus.
Such behaviour leads to issues:

    - trafgen re-calculates number of packets per cpu which
      leads to rounding it to 0 then no packets will be sent.

    - trafgen might send more packets than specified by -n because
      of using all the online cpus.

Fixed by calculation the minimum number of cpus for generation
number of packets specified by -n.

Signed-off-by: Vadim Kochan <vadi...@gmail.com>
---
 cpus.h    | 7 +++++++
 trafgen.c | 3 +++
 2 files changed, 10 insertions(+)

diff --git a/cpus.h b/cpus.h
index 0626726..be33884 100644
--- a/cpus.h
+++ b/cpus.h
@@ -25,4 +25,11 @@ static inline unsigned int get_number_cpus_online(void)
        return ret;
 }
 
+static inline unsigned int alloc_cpus_by_n_pkts(int npkts)
+{
+       unsigned int cpus = get_number_cpus_online();
+
+       return min_t(unsigned int, ((double)npkts / cpus) * cpus, cpus);
+}
+
 #endif /* CPUS_H */
diff --git a/trafgen.c b/trafgen.c
index 9151b5d..5403d47 100644
--- a/trafgen.c
+++ b/trafgen.c
@@ -1038,6 +1038,9 @@ int main(int argc, char **argv)
                }
        }
 
+       if (ctx.num && ctx.num < ctx.cpus && ctx.cpus > 1)
+               ctx.cpus = alloc_cpus_by_n_pkts(ctx.num);
+
        if (argc < 5)
                help();
        if (ctx.device == NULL)
-- 
2.3.1

-- 
You received this message because you are subscribed to the Google Groups 
"netsniff-ng" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to netsniff-ng+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to