> Den 2026-09-12 kl. 18:16, skrev Stephen Hemminger: > > Many performance tests use rte_rand() and the random number > > can perturb the results. Add an ability to override the automatic > > random seed on DPDK startup. > > There is a way to seed the PRNG already, rte_srand(). Why the tests > can't use this? > > Provided the test results depend on something that use the PRNG before > the test driver has had the opportunity to call rte_srand(), controlling > the *initial* seed may be required. > > I don't think this feature should be controlled by an environment > variable. There is no precedent for that. If this functionality is > deemed useful, it should be an EAL command line option, it seems to me.
+1 > > > > > This is not a security problem since rte_rand() is documented > > as not being cryptographically secure. > > > > Signed-off-by: Stephen Hemminger <[email protected]> > > Reviewed-by: Morten Brørup <[email protected]> > > --- > > v2 - fix header inclusion > > - add docbook comment > > > > lib/eal/common/rte_random.c | 14 +++++++++++++- > > lib/eal/include/rte_random.h | 8 +++++--- > > 2 files changed, 18 insertions(+), 4 deletions(-) > > > > diff --git a/lib/eal/common/rte_random.c b/lib/eal/common/rte_random.c > > index 576a32a46c..3cc0e3ec5f 100644 > > --- a/lib/eal/common/rte_random.c > > +++ b/lib/eal/common/rte_random.c > > @@ -8,6 +8,7 @@ > > #endif > > #endif > > #include <unistd.h> > > +#include <stdlib.h> > > > > #include <rte_bitops.h> > > #include <rte_branch_prediction.h> > > @@ -247,7 +248,18 @@ eal_rand_init(void) > > > > RTE_LCORE_VAR_ALLOC(rand_state); > > > > - seed = __rte_random_initial_seed(); > > + const char *env = getenv("DPDK_RANDOM_SEED"); > > + if (env != NULL && *env != '\0') { > > + char *end; > > + > > + errno = 0; > > + seed = strtoull(env, &end, 0); > > + if (errno != 0 || *end != '\0') > > + rte_exit(EXIT_FAILURE, > > + "invalid DPDK_RANDOM_SEED: %s\n", env); > > Is rte_exit() the way to deal with errors here? Not to be used in DPDK > libraries, if I recall correctly. Again, +1 Whole patch looks to me like a strange hack that completely ignores DPDK coding practices. My vote is NACK. > > I would think logging an error would suffice. Or rte_eal_init_alert(). > > > + } else { > > + seed = __rte_random_initial_seed(); > > + } > > > > rte_srand(seed); > > } > > diff --git a/lib/eal/include/rte_random.h b/lib/eal/include/rte_random.h > > index 15cbe6215a..bdd4001e78 100644 > > --- a/lib/eal/include/rte_random.h > > +++ b/lib/eal/include/rte_random.h > > @@ -20,9 +20,11 @@ extern "C" { > > /** > > * Seed the pseudo-random generator. > > * > > - * The generator is automatically seeded by the EAL init with a timer > > - * value. It may need to be re-seeded by the user with a real random > > - * value. > > + * The generator is automatically seeded by the EAL init with > > + * a system provided random entropy source. But for testing > > + * it can be useful to force a repeatable starting point by > > + * setting the initial seed. This can be done by setting > > + * the `DPDK_RANDOM_SEED` environment variable. > > * > > * This function is not multi-thread safe in regards to other > > * rte_srand() calls, nor is it in relation to concurrent rte_rand(),

