On 2015-03-24 at 12:20:39 +0100, Vadim Kochan <vadi...@gmail.com> wrote:
> 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.

Good catch!

> 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);

Why the divide & multiply? Wouldn't min_t(unsigned int, npkt, cpus) be
enough?
> +}
> +
>  #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);

I'd rather just inline the min_t here instead of having an own function.
Maybe put a short comment outlining the two issue you mention in the
patch description.

Thanks a lot!
Tobias
> +
>       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