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

Mattias Rönnblom mattias.ronnblom at ericsson.com
Fri Jun 28 22:58:13 CEST 2019


On 2019-06-28 21:01, Ferruh Yigit wrote:
> 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]
> 
> 

My suggestion would be to just replace _rdseed64_step() with two 
_rdseed32_step() calls on both 32-bit and 64-bit x86. I'll submit a patch.

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

I'll fix this as well.

Thanks.



More information about the dev mailing list