[dpdk-dev] [PATCH 3/6] eal: improve entropy for initial PRNG seed
Bruce Richardson
bruce.richardson at intel.com
Tue May 14 11:37:41 CEST 2019
On Tue, May 14, 2019 at 11:20:43AM +0200, 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.
>
> Suggested-by: Stephen Hemminger <stephen at networkplumber.org>
> Signed-off-by: Mattias Rönnblom <mattias.ronnblom at ericsson.com>
> ---
> lib/librte_eal/common/rte_random.c | 12 +++++++++++-
> 1 file changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/lib/librte_eal/common/rte_random.c b/lib/librte_eal/common/rte_random.c
> index 4d3cf5226..aafc2f7ad 100644
> --- a/lib/librte_eal/common/rte_random.c
> +++ b/lib/librte_eal/common/rte_random.c
> @@ -3,6 +3,7 @@
> */
>
> #include <stdlib.h>
> +#include <unistd.h>
>
> #include <rte_branch_prediction.h>
> #include <rte_cycles.h>
> @@ -135,5 +136,14 @@ rte_rand(void)
>
> RTE_INIT(rte_rand_init)
> {
> - rte_srand(rte_get_timer_cycles());
> + uint64_t seed;
> + int rc;
> +
> + rc = getentropy(&seed, sizeof(seed));
This API was only introduced in FreeBSD in v12, so you may want to have a
define for enabling it, and (for meson) but in a check for
cc.has_function(get_entropy).
> +
> + /* fall back to rdtsc in case of failure */
> + if (rc < 0)
> + seed = rte_get_timer_cycles();
Rather than fallback immediately to time, what about putting in a call to
HW random number generator support if available, e.g. rdseed instruction.
> +
> + rte_srand(seed);
> }
> --
> 2.17.1
>
More information about the dev
mailing list