[dpdk-dev] [PATCH v4 3/5] eal: improve entropy for initial PRNG seed

Ferruh Yigit ferruh.yigit at intel.com
Fri Jun 28 21:01:34 CEST 2019


On 6/28/2019 10:01 AM, Mattias Rönnblom wrote:
> Replace the use of rte_get_timer_cycles() with getentropy() for
> seeding the pseudo-random number generator. getentropy() provides a
> more truly random value.
> 
> getentropy() requires glibc 2.25 and Linux kernel 3.17. In case
> getentropy() is not found at compile time, or the relevant syscall
> fails in runtime, the rdseed machine instruction will be used as a
> fallback.
> 
> rdseed is only available on x86 (Broadwell or later). In case it is
> not present, rte_get_timer_cycles() will be used as a second fallback.
> 
> On non-Meson builds, getentropy() will not be used.
> 
> Suggested-by: Bruce Richardson <bruce.richardson at intel.com>
> Suggested-by: Stephen Hemminger <stephen at networkplumber.org>
> Signed-off-by: Mattias Rönnblom <mattias.ronnblom at ericsson.com>
> Acked-by: Bruce Richardson <bruce.richardson at intel.com>

<...>

> +#ifdef RTE_MACHINE_CPUFLAG_RDSEED
> +	unsigned int rdseed_rc;
> +	unsigned long long rdseed_seed;
> +
> +	/* first fallback: rdseed instruction, if available */
> +	rdseed_rc = _rdseed64_step(&rdseed_seed);

This is causing build error for 32-bit [1] and ICC [2], can you please check?

[1]
.../dpdk/lib/librte_eal/common/rte_random.c: In function
‘__rte_random_initial_seed’:
.../dpdk/lib/librte_eal/common/rte_random.c:196:14: error: implicit declaration
of function ‘_rdseed64_step’; did you mean ‘_rdseed32_step’?
[-Werror=implicit-function-declaration]
  196 |  rdseed_rc = _rdseed64_step(&rdseed_seed);
      |              ^~~~~~~~~~~~~~
      |              _rdseed32_step
.../dpdk/lib/librte_eal/common/rte_random.c:196:14: error: nested extern
declaration of ‘_rdseed64_step’ [-Werror=nested-externs]



[2]
Building x86_64-native-linuxapp-icc ...
.../dpdk/lib/librte_eal/common/rte_random.c(196): error #167: argument of type
"unsigned long long *" is incompatible with parameter of type "unsigned long *"
        rdseed_rc = _rdseed64_step(&rdseed_seed);
                                   ^



More information about the dev mailing list